UNPKG

@tanstack/table-core

Version:

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

160 lines (120 loc) 4.29 kB
--- name: table-features description: > Register TanStack Table v9 tableFeatures, feature plugins, create*RowModel factories, and function registries in prerequisite order. Load when an option, state slice, or instance API is missing, or when choosing explicit features versus stockFeatures. metadata: type: sub-skill library: '@tanstack/table-core' library_version: '9.0.0' requires: ['core'] sources: - 'TanStack/table:docs/guide/row-models.md' - 'TanStack/table:packages/table-core/src/types/TableFeatures.ts' - 'TanStack/table:packages/table-core/src/features/stockFeatures.ts' - 'TanStack/table:packages/table-core/src/core/table/constructTable.ts' --- This skill builds on `core`. Read it first for the headless model and stable inputs. ## Setup <!-- skill-snippet:check --> ```ts import { rowAggregationFeature, aggregationFn_sum, columnGroupingFeature, createFilteredRowModel, createSortedRowModel, columnFilteringFeature, filterFn_includesString, rowSortingFeature, sortFn_alphanumeric, tableFeatures, } from '@tanstack/table-core' export const features = tableFeatures({ columnFilteringFeature, filteredRowModel: createFilteredRowModel(), filterFns: { includesString: filterFn_includesString }, rowAggregationFeature, columnGroupingFeature, aggregationFns: { sum: aggregationFn_sum }, rowSortingFeature, sortedRowModel: createSortedRowModel(), sortFns: { alphanumeric: sortFn_alphanumeric }, }) ``` ## Core Patterns ### Register feature before its dependent slot ```ts const features = tableFeatures({ rowSortingFeature, sortedRowModel: createSortedRowModel(), }) ``` `tableFeatures` checks slot prerequisites and its inferred type gates APIs throughout the table. ### Register named function slots with their features ```ts const features = tableFeatures({ columnFilteringFeature, filterFns: { includesString: filterFn_includesString }, rowSortingFeature, sortFns: { alphanumeric: sortFn_alphanumeric }, rowAggregationFeature, columnGroupingFeature, aggregationFns: { sum: aggregationFn_sum }, }) ``` `filterFns`, `sortFns`, and `aggregationFns` are feature slots, not table options. They respectively require `columnFilteringFeature`, `rowSortingFeature`, and `rowAggregationFeature`. Import individual built-ins (`filterFn_*`, `sortFn_*`, `aggregationFn_*`) and register them under their conventional keys; the full registry objects (`filterFns`, `sortFns`, `aggregationFns` exports) still work but bundle every built-in. A registered key can be used as a typed string name, and `'auto'` resolves only registered functions; pass a function directly when no registry name is needed. ### Prefer explicit features ```ts const features = tableFeatures({ columnFilteringFeature }) ``` Use `stockFeatures` only for deliberate kitchen-sink or temporary migration behavior. ## Common Mistakes ### [CRITICAL] Calling an unregistered feature API Wrong: ```ts const features = tableFeatures({}) table.setSorting([{ id: 'name', desc: false }]) ``` Correct: ```ts const features = tableFeatures({ rowSortingFeature }) ``` Optional feature state and APIs are installed only when their feature is registered. Source: `packages/table-core/src/core/table/constructTable.ts` ### [HIGH] Omitting a slot prerequisite Wrong: ```ts const features = tableFeatures({ sortedRowModel: createSortedRowModel() }) ``` Correct: ```ts const features = tableFeatures({ rowSortingFeature, sortedRowModel: createSortedRowModel(), }) ``` The sorted model slot requires `rowSortingFeature`; the same rule applies to every mapped slot. Source: `packages/table-core/src/types/TableFeatures.ts#FeatureSlotPrereqs` ### [MEDIUM] Shipping all features by default Wrong: ```ts const features = stockFeatures ``` Correct: ```ts const features = tableFeatures({ rowSortingFeature, sortedRowModel: createSortedRowModel(), }) ``` `stockFeatures` registers every stock plugin and processing slot, defeating v9's normal tree-shaking strategy. Source: `packages/table-core/src/features/stockFeatures.ts` ## API Discovery Inspect `node_modules/@tanstack/table-core/dist/types/TableFeatures.d.ts` for current slots and `FeatureSlotPrereqs`, and `dist/features/stockFeatures.d.ts` for the stock inventory.