@tanstack/table-core
Version:
Headless UI for building powerful tables & datagrids for TS/JS.
53 lines (51 loc) • 2.03 kB
JavaScript
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 };