131 lines
4.4 KiB
JavaScript
131 lines
4.4 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
function _export(target, all) {
|
|
for(var name in all)Object.defineProperty(target, name, {
|
|
enumerable: true,
|
|
get: all[name]
|
|
});
|
|
}
|
|
_export(exports, {
|
|
defaultTableSelectionState: function() {
|
|
return defaultTableSelectionState;
|
|
},
|
|
useTableSelection: function() {
|
|
return useTableSelection;
|
|
},
|
|
useTableSelectionState: function() {
|
|
return useTableSelectionState;
|
|
}
|
|
});
|
|
const _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildcard");
|
|
const _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
|
|
const _reactutilities = require("@fluentui/react-utilities");
|
|
const noop = ()=>undefined;
|
|
const defaultTableSelectionState = {
|
|
allRowsSelected: false,
|
|
clearRows: noop,
|
|
deselectRow: noop,
|
|
isRowSelected: ()=>false,
|
|
selectRow: noop,
|
|
selectedRows: new Set(),
|
|
someRowsSelected: false,
|
|
toggleAllRows: noop,
|
|
toggleRow: noop,
|
|
selectionMode: 'multiselect'
|
|
};
|
|
function useTableSelection(options) {
|
|
'use no memo';
|
|
// False positive, these plugin hooks are intended to be run on every render
|
|
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
return (tableState)=>useTableSelectionState(tableState, options);
|
|
}
|
|
function useTableSelectionState(tableState, options) {
|
|
const { items, getRowId } = tableState;
|
|
const { selectionMode: selectionMode, defaultSelectedItems, selectedItems, onSelectionChange } = options;
|
|
const [selected, selectionMethods] = (0, _reactutilities.useSelection)({
|
|
selectionMode,
|
|
defaultSelectedItems,
|
|
selectedItems,
|
|
onSelectionChange
|
|
});
|
|
// Selection state can contain obselete items (i.e. rows that are removed)
|
|
const selectableRowIds = _react.useMemo(()=>{
|
|
const rowIds = new Set();
|
|
for(let i = 0; i < items.length; i++){
|
|
var _getRowId;
|
|
rowIds.add((_getRowId = getRowId === null || getRowId === void 0 ? void 0 : getRowId(items[i])) !== null && _getRowId !== void 0 ? _getRowId : i);
|
|
}
|
|
return rowIds;
|
|
}, [
|
|
items,
|
|
getRowId
|
|
]);
|
|
const allRowsSelected = _react.useMemo(()=>{
|
|
if (selectionMode === 'single') {
|
|
const selectedRow = Array.from(selected)[0];
|
|
return selectableRowIds.has(selectedRow);
|
|
}
|
|
// multiselect case
|
|
if (selected.size < selectableRowIds.size) {
|
|
return false;
|
|
}
|
|
if (selectableRowIds.size === 0) {
|
|
return false;
|
|
}
|
|
let res = true;
|
|
selectableRowIds.forEach((selectableRowId)=>{
|
|
if (!selected.has(selectableRowId)) {
|
|
res = false;
|
|
}
|
|
});
|
|
return res;
|
|
}, [
|
|
selectableRowIds,
|
|
selected,
|
|
selectionMode
|
|
]);
|
|
const someRowsSelected = _react.useMemo(()=>{
|
|
if (selected.size <= 0) {
|
|
return false;
|
|
}
|
|
let res = false;
|
|
selectableRowIds.forEach((selectableRowId)=>{
|
|
if (selected.has(selectableRowId)) {
|
|
res = true;
|
|
}
|
|
});
|
|
return res;
|
|
}, [
|
|
selectableRowIds,
|
|
selected
|
|
]);
|
|
const toggleAllRows = (0, _reactutilities.useEventCallback)((e)=>{
|
|
selectionMethods.toggleAllItems(e, items.map((item, i)=>{
|
|
var _getRowId;
|
|
return (_getRowId = getRowId === null || getRowId === void 0 ? void 0 : getRowId(item)) !== null && _getRowId !== void 0 ? _getRowId : i;
|
|
}));
|
|
});
|
|
const toggleRow = (0, _reactutilities.useEventCallback)((e, rowId)=>selectionMethods.toggleItem(e, rowId));
|
|
const deselectRow = (0, _reactutilities.useEventCallback)((e, rowId)=>selectionMethods.deselectItem(e, rowId));
|
|
const selectRow = (0, _reactutilities.useEventCallback)((e, rowId)=>selectionMethods.selectItem(e, rowId));
|
|
const isRowSelected = (rowId)=>selectionMethods.isSelected(rowId);
|
|
const clearRows = (0, _reactutilities.useEventCallback)((e)=>selectionMethods.clearItems(e));
|
|
return {
|
|
...tableState,
|
|
selection: {
|
|
selectionMode,
|
|
someRowsSelected,
|
|
allRowsSelected,
|
|
selectedRows: selected,
|
|
toggleRow,
|
|
toggleAllRows,
|
|
clearRows,
|
|
deselectRow,
|
|
selectRow,
|
|
isRowSelected
|
|
}
|
|
};
|
|
}
|