UNPKG

@cn-ui/table-core

Version:

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

45 lines (40 loc) 1.39 kB
import { Table, RowModel, Row, RowData } from '../types' import { getMemoOptions, memo } from '../utils' import { filterRows } from './filterRowsUtils' export function getFacetedRowModel<TData extends RowData>(): ( table: Table<TData>, columnId: string ) => () => RowModel<TData> { return (table, columnId) => memo( () => [ table.getPreFilteredRowModel(), table.getState().columnFilters, table.getState().globalFilter, table.getFilteredRowModel(), ], (preRowModel, columnFilters, globalFilter) => { if ( !preRowModel.rows.length || (!columnFilters?.length && !globalFilter) ) { return preRowModel } const filterableIds = [ ...columnFilters.map(d => d.id).filter(d => d !== columnId), globalFilter ? '__global__' : undefined, ].filter(Boolean) as string[] const filterRowsImpl = (row: Row<TData>) => { // Horizontally filter rows through each column for (let i = 0; i < filterableIds.length; i++) { if (row.columnFilters[filterableIds[i]!] === false) { return false } } return true } return filterRows(preRowModel.rows, filterRowsImpl, table) }, getMemoOptions(table.options, 'debugTable', 'getFacetedRowModel') ) }