UNPKG

@tanstack/table-core

Version:

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

46 lines (44 loc) 2.08 kB
import { callMemoOrStaticFn, tableMemo } from "../../utils.js"; import { column_getFacetedRowModel, table_getGlobalFacetedRowModel } from "./columnFacetingFeature.utils.js"; import { column_getCanGlobalFilter } from "../global-filtering/globalFilteringFeature.utils.js"; //#region src/features/column-faceting/createFacetedMinMaxValues.ts /** * Creates a memoized faceted min max values helper for faceted filtering. * * The returned function derives facet data from the table row model and relevant filter state so filter UIs can display available values. */ function createFacetedMinMaxValues() { return (_table, columnId) => { const table = _table; return tableMemo({ feature: "columnFacetingFeature", fn: (flatRows) => _createFacetedMinMaxValues(table, columnId, flatRows), fnName: "table.getFacetedMinMaxValues", memoDeps: () => { if (columnId === "__global__") return [callMemoOrStaticFn(table, "getGlobalFacetedRowModel", table_getGlobalFacetedRowModel).flatRows]; const column = table.getColumn(columnId); if (!column) return [table.getPreFilteredRowModel().flatRows]; return [callMemoOrStaticFn(column, "getFacetedRowModel", column_getFacetedRowModel, table).flatRows]; }, table }); }; } function _createFacetedMinMaxValues(table, columnId, flatRows) { if (!flatRows.length) return void 0; const columnIds = columnId === "__global__" ? table.getAllLeafColumns().filter((column) => column_getCanGlobalFilter(column)).map((column) => column.id) : [columnId]; let facetedMinValue = Number.POSITIVE_INFINITY; let facetedMaxValue = Number.NEGATIVE_INFINITY; let foundAny = false; for (let i = 0; i < flatRows.length; i++) for (let c = 0; c < columnIds.length; c++) { const value = Number(flatRows[i].getValue(columnIds[c])); if (Number.isNaN(value)) continue; foundAny = true; if (value < facetedMinValue) facetedMinValue = value; if (value > facetedMaxValue) facetedMaxValue = value; } if (!foundAny) return void 0; return [facetedMinValue, facetedMaxValue]; } //#endregion export { createFacetedMinMaxValues };