UNPKG

@cn-ui/table-core

Version:

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

61 lines (51 loc) 1.65 kB
import { Table, RowModel, Row, RowData } from '../types' import { getMemoOptions, memo } from '../utils' import { expandRows } from './getExpandedRowModel' export function getPaginationRowModel<TData extends RowData>(opts?: { initialSync: boolean }): (table: Table<TData>) => () => RowModel<TData> { return table => memo( () => [ table.getState().pagination, table.getPrePaginationRowModel(), table.options.paginateExpandedRows ? undefined : table.getState().expanded, ], (pagination, rowModel) => { if (!rowModel.rows.length) { return rowModel } const { pageSize, pageIndex } = pagination let { rows, flatRows, rowsById } = rowModel const pageStart = pageSize * pageIndex const pageEnd = pageStart + pageSize rows = rows.slice(pageStart, pageEnd) let paginatedRowModel: RowModel<TData> if (!table.options.paginateExpandedRows) { paginatedRowModel = expandRows({ rows, flatRows, rowsById, }) } else { paginatedRowModel = { rows, flatRows, rowsById, } } paginatedRowModel.flatRows = [] const handleRow = (row: Row<TData>) => { paginatedRowModel.flatRows.push(row) if (row.subRows.length) { row.subRows.forEach(handleRow) } } paginatedRowModel.rows.forEach(handleRow) return paginatedRowModel }, getMemoOptions(table.options, 'debugTable', 'getPaginationRowModel') ) }