UNPKG

@tanstack/table-core

Version:

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

143 lines (138 loc) 5.8 kB
/** * table-core * * Copyright (c) TanStack * * This source code is licensed under the MIT license found in the * LICENSE.md file in the root directory of this source tree. * * @license MIT */ 'use strict'; var aggregationFns = require('../aggregationFns.js'); var utils = require('../utils.js'); // const ColumnGrouping = { getDefaultColumnDef: () => { return { aggregatedCell: props => { var _toString, _props$getValue; return (_toString = (_props$getValue = props.getValue()) == null || _props$getValue.toString == null ? void 0 : _props$getValue.toString()) != null ? _toString : null; }, aggregationFn: 'auto' }; }, getInitialState: state => { return { grouping: [], ...state }; }, getDefaultOptions: table => { return { onGroupingChange: utils.makeStateUpdater('grouping', table), groupedColumnMode: 'reorder' }; }, createColumn: (column, table) => { column.toggleGrouping = () => { table.setGrouping(old => { // Find any existing grouping for this column if (old != null && old.includes(column.id)) { return old.filter(d => d !== column.id); } return [...(old != null ? old : []), column.id]; }); }; column.getCanGroup = () => { var _column$columnDef$ena, _table$options$enable; return ((_column$columnDef$ena = column.columnDef.enableGrouping) != null ? _column$columnDef$ena : true) && ((_table$options$enable = table.options.enableGrouping) != null ? _table$options$enable : true) && (!!column.accessorFn || !!column.columnDef.getGroupingValue); }; column.getIsGrouped = () => { var _table$getState$group; return (_table$getState$group = table.getState().grouping) == null ? void 0 : _table$getState$group.includes(column.id); }; column.getGroupedIndex = () => { var _table$getState$group2; return (_table$getState$group2 = table.getState().grouping) == null ? void 0 : _table$getState$group2.indexOf(column.id); }; column.getToggleGroupingHandler = () => { const canGroup = column.getCanGroup(); return () => { if (!canGroup) return; column.toggleGrouping(); }; }; column.getAutoAggregationFn = () => { const firstRow = table.getCoreRowModel().flatRows[0]; const value = firstRow == null ? void 0 : firstRow.getValue(column.id); if (typeof value === 'number') { return aggregationFns.aggregationFns.sum; } if (Object.prototype.toString.call(value) === '[object Date]') { return aggregationFns.aggregationFns.extent; } }; column.getAggregationFn = () => { var _table$options$aggreg, _table$options$aggreg2; if (!column) { throw new Error(); } return utils.isFunction(column.columnDef.aggregationFn) ? column.columnDef.aggregationFn : column.columnDef.aggregationFn === 'auto' ? column.getAutoAggregationFn() : (_table$options$aggreg = (_table$options$aggreg2 = table.options.aggregationFns) == null ? void 0 : _table$options$aggreg2[column.columnDef.aggregationFn]) != null ? _table$options$aggreg : aggregationFns.aggregationFns[column.columnDef.aggregationFn]; }; }, createTable: table => { table.setGrouping = updater => table.options.onGroupingChange == null ? void 0 : table.options.onGroupingChange(updater); table.resetGrouping = defaultState => { var _table$initialState$g, _table$initialState; table.setGrouping(defaultState ? [] : (_table$initialState$g = (_table$initialState = table.initialState) == null ? void 0 : _table$initialState.grouping) != null ? _table$initialState$g : []); }; table.getPreGroupedRowModel = () => table.getFilteredRowModel(); table.getGroupedRowModel = () => { if (!table._getGroupedRowModel && table.options.getGroupedRowModel) { table._getGroupedRowModel = table.options.getGroupedRowModel(table); } if (table.options.manualGrouping || !table._getGroupedRowModel) { return table.getPreGroupedRowModel(); } return table._getGroupedRowModel(); }; }, createRow: (row, table) => { row.getIsGrouped = () => !!row.groupingColumnId; row.getGroupingValue = columnId => { if (row._groupingValuesCache.hasOwnProperty(columnId)) { return row._groupingValuesCache[columnId]; } const column = table.getColumn(columnId); if (!(column != null && column.columnDef.getGroupingValue)) { return row.getValue(columnId); } row._groupingValuesCache[columnId] = column.columnDef.getGroupingValue(row.original); return row._groupingValuesCache[columnId]; }; row._groupingValuesCache = {}; }, createCell: (cell, column, row, table) => { cell.getIsGrouped = () => column.getIsGrouped() && column.id === row.groupingColumnId; cell.getIsPlaceholder = () => !cell.getIsGrouped() && column.getIsGrouped(); cell.getIsAggregated = () => { var _row$subRows; return !cell.getIsGrouped() && !cell.getIsPlaceholder() && !!((_row$subRows = row.subRows) != null && _row$subRows.length); }; } }; function orderColumns(leafColumns, grouping, groupedColumnMode) { if (!(grouping != null && grouping.length) || !groupedColumnMode) { return leafColumns; } const nonGroupingColumns = leafColumns.filter(col => !grouping.includes(col.id)); if (groupedColumnMode === 'remove') { return nonGroupingColumns; } const groupingColumns = grouping.map(g => leafColumns.find(col => col.id === g)).filter(Boolean); return [...groupingColumns, ...nonGroupingColumns]; } exports.ColumnGrouping = ColumnGrouping; exports.orderColumns = orderColumns; //# sourceMappingURL=ColumnGrouping.js.map