UNPKG

@tanstack/table-core

Version:

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

53 lines (51 loc) 2.03 kB
import { assignPrototypeAPIs, assignTableAPIs, makeStateUpdater } from "../../utils.js"; import { column_getIndex, column_getIsFirstColumn, column_getIsLastColumn, getDefaultColumnOrderState, table_getColumnIndexes, table_getOrderColumnsFn, table_resetColumnOrder, table_setColumnOrder } from "./columnOrderingFeature.utils.js"; //#region src/features/column-ordering/columnOrderingFeature.ts /** * Feature that adds column ordering state and APIs for ordering leaf columns. */ const columnOrderingFeature = { getInitialState: (initialState) => { return { columnOrder: getDefaultColumnOrderState(), ...initialState }; }, getDefaultTableOptions: (table) => { return { onColumnOrderChange: makeStateUpdater("columnOrder", table) }; }, assignColumnPrototype: (prototype, table) => { assignPrototypeAPIs("columnOrderingFeature", prototype, table, { column_getIndex: { fn: (column, position) => column_getIndex(column, position) }, column_getIsFirstColumn: { fn: (column, position) => column_getIsFirstColumn(column, position) }, column_getIsLastColumn: { fn: (column, position) => column_getIsLastColumn(column, position) } }); }, constructTableAPIs: (table) => { assignTableAPIs("columnOrderingFeature", table, { table_getColumnIndexes: { fn: () => table_getColumnIndexes(table), memoDeps: () => [ table.options.columns, table.atoms.columnOrder?.get(), table.atoms.columnPinning?.get(), table.atoms.columnVisibility?.get(), table.atoms.grouping?.get(), table.options.groupedColumnMode ] }, table_setColumnOrder: { fn: (updater) => table_setColumnOrder(table, updater) }, table_resetColumnOrder: { fn: (defaultState) => table_resetColumnOrder(table, defaultState) }, table_getOrderColumnsFn: { fn: () => table_getOrderColumnsFn(table), memoDeps: () => [ table.atoms.columnOrder?.get(), table.atoms.grouping?.get(), table.options.groupedColumnMode ] } }); } }; //#endregion export { columnOrderingFeature };