UNPKG

@ackplus/react-tanstack-data-table

Version:

A powerful React data table component built with MUI and TanStack Table

173 lines (172 loc) 6.9 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CustomSelectionFeature = void 0; const react_table_1 = require("@tanstack/react-table"); exports.CustomSelectionFeature = { getInitialState: (state) => { return Object.assign({ selectionState: { ids: [], type: 'include', selectMode: 'page', } }, state); }, getDefaultOptions: (table) => { return { enableCustomSelection: true, selectMode: 'page', onSelectionStateChange: (0, react_table_1.makeStateUpdater)('selectionState', table), }; }, createTable: (table) => { table.setSelectionState = (updater) => { var _a, _b; const safeUpdater = (old) => { const newState = (0, react_table_1.functionalUpdate)(updater, old); return newState; }; return (_b = (_a = table.options).onSelectionStateChange) === null || _b === void 0 ? void 0 : _b.call(_a, safeUpdater); }; table.selectRow = (rowId) => { if (!table.canSelectRow(rowId)) return; table.setSelectionState((old) => { if (old.type === 'exclude') { return Object.assign(Object.assign({}, old), { ids: old.ids.filter(id => id !== rowId) }); } else { const newIds = old.ids.includes(rowId) ? old.ids : [...old.ids, rowId]; return Object.assign(Object.assign({}, old), { ids: newIds }); } }); }; table.deselectRow = (rowId) => { table.setSelectionState((old) => { if (old.type === 'exclude') { const newIds = old.ids.includes(rowId) ? old.ids : [...old.ids, rowId]; return Object.assign(Object.assign({}, old), { ids: newIds }); } else { return Object.assign(Object.assign({}, old), { ids: old.ids.filter(id => id !== rowId) }); } }); }; table.toggleRowSelected = (rowId) => { if (table.getIsRowSelected(rowId)) { table.deselectRow(rowId); } else { table.selectRow(rowId); } }; table.selectAll = () => { const selectMode = table.options.selectMode || 'page'; if (selectMode === 'all') { table.setSelectionState((old) => (Object.assign(Object.assign({}, old), { ids: [], type: 'exclude' }))); } else { const currentPageRows = table.getPaginationRowModel().rows; const selectableRowIds = currentPageRows .filter(row => table.canSelectRow(row.id)) .map(row => row.id); table.setSelectionState((old) => (Object.assign(Object.assign({}, old), { ids: selectableRowIds, type: 'include' }))); } }; table.deselectAll = () => { table.setSelectionState((old) => (Object.assign(Object.assign({}, old), { ids: [], type: 'include' }))); }; table.toggleAllRowsSelected = () => { if (table.getIsAllRowsSelected()) { table.deselectAll(); } else { table.selectAll(); } }; table.getIsRowSelected = (rowId) => { const state = table.getSelectionState(); if (state.type === 'exclude') { return !state.ids.includes(rowId); } else { return state.ids.includes(rowId); } }; table.getIsAllRowsSelected = () => { const state = table.getSelectionState(); const selectMode = table.options.selectMode || 'page'; if (selectMode === 'all') { if (state.type === 'exclude') { return state.ids.length === 0; } else { const totalCount = table.getRowCount(); return state.ids.length === totalCount; } } else { const currentPageRows = table.getPaginationRowModel().rows; const selectableRows = currentPageRows.filter(row => table.canSelectRow(row.id)); if (selectableRows.length === 0) return false; return selectableRows.every(row => table.getIsRowSelected(row.id)); } }; table.getIsSomeRowsSelected = () => { const state = table.getSelectionState(); const selectMode = table.options.selectMode || 'page'; if (selectMode === 'all' && state.type === 'exclude') { const totalCount = table.getRowCount(); return state.ids.length < totalCount; } else { return state.ids.length > 0; } }; table.getSelectionState = () => { return table.getState().selectionState || { ids: [], type: 'include', selectMode: 'page', }; }; table.getSelectedCount = () => { const state = table.getSelectionState(); const selectMode = table.options.selectMode || 'page'; if (selectMode === 'all' && state.type === 'exclude') { const totalCount = table.getRowCount(); return totalCount - state.ids.length; } else { return state.ids.length; } }; table.getSelectedRowIds = () => { const state = table.getSelectionState(); if (state.type === 'exclude') { console.warn('getSelectedRowIds() in exclude mode returns exclude list. Use getSelectionState() instead.'); return state.ids; } else { return state.ids; } }; table.getSelectedRows = () => { const state = table.getSelectionState(); const allRows = table.getRowModel().rows; if (state.type === 'exclude') { return allRows.filter(row => !state.ids.includes(row.id)); } else { return allRows.filter(row => state.ids.includes(row.id)); } }; table.canSelectRow = (rowId) => { if (!table.options.isRowSelectable) return true; const row = table.getRowModel().rows.find(r => r.id === rowId); if (!row) return false; return table.options.isRowSelectable({ row: row.original, id: rowId }); }; }, };