UNPKG

@1771technologies/lytenyte-pro

Version:

Blazingly fast headless React data grid with 100s of features.

34 lines (33 loc) 1.71 kB
import { computePathTable, getMaxHeaderDepth, getVisibleColumns, getVisibleColumnsWithGroups, makeColumnGroupMetadata, partitionColumnsByPinState, } from "@1771technologies/lytenyte-shared"; export function makeColumnView({ columns, base, groupExpansions, groupJoinDelimiter, groupExpansionDefault, }) { const lookup = new Map(columns.map((c) => [c.id, c])); const columnsNotHidden = getVisibleColumns(columns, base); const groupMetadata = makeColumnGroupMetadata(columnsNotHidden, groupJoinDelimiter); const visible = getVisibleColumnsWithGroups(columnsNotHidden, groupMetadata, groupExpansions, groupExpansionDefault); const { start, center, end } = partitionColumnsByPinState(visible); const seenMap = {}; const maxDepth = getMaxHeaderDepth(visible); const endOffset = start.length + center.length; const startTable = computePathTable(start, maxDepth, seenMap, groupJoinDelimiter, 0).table; const centerTable = computePathTable(center, maxDepth, seenMap, groupJoinDelimiter, start.length).table; const endTable = computePathTable(end, maxDepth, seenMap, groupJoinDelimiter, endOffset).table; const combinedView = []; for (let i = 0; i <= maxDepth; i++) { const row = []; row.push(...(startTable[i] ?? [])); row.push(...(centerTable[i] ?? [])); row.push(...(endTable[i] ?? [])); combinedView.push(row); } return { meta: groupMetadata, maxRow: maxDepth + 1, maxCol: visible.length, combinedView, visibleColumns: [...start, ...center, ...end], lookup, startCount: start.length, endCount: end.length, centerCount: center.length, }; }