UNPKG

@cn-ui/table-core

Version:

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

52 lines (43 loc) 1.32 kB
import { Table, Row, RowModel, RowData } from '../types' import { getMemoOptions, memo } from '../utils' export function getExpandedRowModel<TData extends RowData>(): ( table: Table<TData> ) => () => RowModel<TData> { return table => memo( () => [ table.getState().expanded, table.getPreExpandedRowModel(), table.options.paginateExpandedRows, ], (expanded, rowModel, paginateExpandedRows) => { if ( !rowModel.rows.length || (expanded !== true && !Object.keys(expanded ?? {}).length) ) { return rowModel } if (!paginateExpandedRows) { // Only expand rows at this point if they are being paginated return rowModel } return expandRows(rowModel) }, getMemoOptions(table.options, 'debugTable', 'getExpandedRowModel') ) } export function expandRows<TData extends RowData>(rowModel: RowModel<TData>) { const expandedRows: Row<TData>[] = [] const handleRow = (row: Row<TData>) => { expandedRows.push(row) if (row.subRows?.length && row.getIsExpanded()) { row.subRows.forEach(handleRow) } } rowModel.rows.forEach(handleRow) return { rows: expandedRows, flatRows: rowModel.flatRows, rowsById: rowModel.rowsById, } }