Outlook_Addin_LLM/node_modules/@fluentui/react-table/lib-commonjs/hooks/useTableSelection.js

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
}
};
}