UNPKG

@tanstack/table-core

Version:

Headless UI for building powerful tables & datagrids for TS/JS.

120 lines (118 loc) 5.13 kB
import { assignPrototypeAPIs, assignTableAPIs, makeStateUpdater } from "../../utils.js"; import { getDefaultRowSelectionState, row_getCanMultiSelect, row_getCanSelect, row_getCanSelectSubRows, row_getIsAllSubRowsSelected, row_getIsSelected, row_getIsSomeSelected, row_getToggleSelectedHandler, row_toggleSelected, table_getFilteredSelectedRowModel, table_getGroupedSelectedRowModel, table_getIsAllPageRowsSelected, table_getIsAllRowsSelected, table_getIsSomePageRowsSelected, table_getIsSomeRowsSelected, table_getPreSelectedRowModel, table_getSelectedRowIds, table_getSelectedRowModel, table_getToggleAllPageRowsSelectedHandler, table_getToggleAllRowsSelectedHandler, table_resetRowSelection, table_setRowSelection, table_toggleAllPageRowsSelected, table_toggleAllRowsSelected } from "./rowSelectionFeature.utils.js"; //#region src/features/row-selection/rowSelectionFeature.ts /** * Feature that adds row selection state and APIs for row and page selection. */ const rowSelectionFeature = { initTableInstanceData: (table) => { table._lastSelectedRowId = null; }, resetTableInstanceData: (table) => { table._lastSelectedRowId = null; }, getInitialState: (initialState) => { return { rowSelection: getDefaultRowSelectionState(), ...initialState }; }, getDefaultTableOptions: (table) => { return { onRowSelectionChange: makeStateUpdater("rowSelection", table), enableRowSelection: true, enableMultiRowSelection: true, enableRowRangeSelection: true, enableSubRowSelection: true, isRowRangeSelectionEvent: (event) => { const rangeEvent = event; return Boolean(rangeEvent.shiftKey || rangeEvent.nativeEvent?.shiftKey); } }; }, assignRowPrototype: (prototype, table) => { assignPrototypeAPIs("rowSelectionFeature", prototype, table, { row_toggleSelected: { fn: (row, value, opts) => row_toggleSelected(row, value, opts) }, row_getIsSelected: { fn: (row) => row_getIsSelected(row) }, row_getIsSomeSelected: { fn: (row) => row_getIsSomeSelected(row), memoDeps: (row) => [ row.subRows, row.table.atoms.rowSelection?.get(), row.table.options.enableRowSelection ] }, row_getIsAllSubRowsSelected: { fn: (row) => row_getIsAllSubRowsSelected(row), memoDeps: (row) => [ row.subRows, row.table.atoms.rowSelection?.get(), row.table.options.enableRowSelection ] }, row_getCanSelect: { fn: (row) => row_getCanSelect(row) }, row_getCanSelectSubRows: { fn: (row) => row_getCanSelectSubRows(row) }, row_getCanMultiSelect: { fn: (row) => row_getCanMultiSelect(row) }, row_getToggleSelectedHandler: { fn: (row, opts) => row_getToggleSelectedHandler(row, opts) } }); }, constructTableAPIs: (table) => { assignTableAPIs("rowSelectionFeature", table, { table_setRowSelection: { fn: (updater) => table_setRowSelection(table, updater) }, table_resetRowSelection: { fn: (defaultState) => table_resetRowSelection(table, defaultState) }, table_toggleAllRowsSelected: { fn: (value, opts) => table_toggleAllRowsSelected(table, value, opts) }, table_toggleAllPageRowsSelected: { fn: (value, opts) => table_toggleAllPageRowsSelected(table, value, opts) }, table_getPreSelectedRowModel: { fn: () => table_getPreSelectedRowModel(table) }, table_getSelectedRowModel: { fn: () => table_getSelectedRowModel(table), memoDeps: () => [table.atoms.rowSelection?.get(), table.getCoreRowModel()] }, table_getFilteredSelectedRowModel: { fn: () => table_getFilteredSelectedRowModel(table), memoDeps: () => [table.atoms.rowSelection?.get(), table.getFilteredRowModel()] }, table_getGroupedSelectedRowModel: { fn: () => table_getGroupedSelectedRowModel(table), memoDeps: () => [table.atoms.rowSelection?.get(), table.getSortedRowModel()] }, table_getSelectedRowIds: { fn: () => table_getSelectedRowIds(table), memoDeps: () => [table.atoms.rowSelection?.get()] }, table_getIsAllRowsSelected: { fn: () => table_getIsAllRowsSelected(table), memoDeps: () => [ table.atoms.rowSelection?.get(), table.getFilteredRowModel(), table.options.enableRowSelection, table.options.enableSubRowSelection ] }, table_getIsAllPageRowsSelected: { fn: () => table_getIsAllPageRowsSelected(table), memoDeps: () => [ table.atoms.rowSelection?.get(), table.getPaginatedRowModel(), table.options.enableRowSelection, table.options.enableSubRowSelection ] }, table_getIsSomeRowsSelected: { fn: () => table_getIsSomeRowsSelected(table), memoDeps: () => [table.atoms.rowSelection?.get()] }, table_getIsSomePageRowsSelected: { fn: () => table_getIsSomePageRowsSelected(table), memoDeps: () => [ table.atoms.rowSelection?.get(), table.getPaginatedRowModel(), table.options.enableRowSelection ] }, table_getToggleAllRowsSelectedHandler: { fn: () => table_getToggleAllRowsSelectedHandler(table) }, table_getToggleAllPageRowsSelectedHandler: { fn: () => table_getToggleAllPageRowsSelectedHandler(table) } }); } }; //#endregion export { rowSelectionFeature };