diff --git a/packages/table-core/src/core/rows/constructRow.ts b/packages/table-core/src/core/rows/constructRow.ts index 663f346962..a950f00505 100644 --- a/packages/table-core/src/core/rows/constructRow.ts +++ b/packages/table-core/src/core/rows/constructRow.ts @@ -59,9 +59,9 @@ export const constructRow = < row.subRows = subRows ?? [] // Initialize instance-specific data (e.g., caches) for features that need it - const features = Object.values(table._features) - for (let i = 0; i < features.length; i++) { - features[i]!.initRowInstanceData?.(row) + const initFns = table._rowInstanceInitFns! + for (let i = 0; i < initFns.length; i++) { + initFns[i]!(row as Row) } return row as Row diff --git a/packages/table-core/src/core/table/constructTable.ts b/packages/table-core/src/core/table/constructTable.ts index 3a2f648966..2d706c8234 100644 --- a/packages/table-core/src/core/table/constructTable.ts +++ b/packages/table-core/src/core/table/constructTable.ts @@ -68,6 +68,16 @@ export function constructTable< const featuresList: Array = Object.values(table._features) + const rowInstanceInitFns: Array< + NonNullable + > = [] + for (const feature of featuresList) { + if (feature.initRowInstanceData) { + rowInstanceInitFns.push(feature.initRowInstanceData.bind(feature)) + } + } + table._rowInstanceInitFns = rowInstanceInitFns + const defaultOptions = featuresList.reduce((obj, feature) => { return Object.assign(obj, feature.getDefaultTableOptions?.(table)) }, {}) as TableOptions diff --git a/packages/table-core/src/core/table/coreTablesFeature.types.ts b/packages/table-core/src/core/table/coreTablesFeature.types.ts index 8570660430..80afe099e7 100644 --- a/packages/table-core/src/core/table/coreTablesFeature.types.ts +++ b/packages/table-core/src/core/table/coreTablesFeature.types.ts @@ -5,6 +5,7 @@ import type { RowModelFns } from '../../types/RowModelFns' import type { RowData, Updater } from '../../types/type-utils' import type { IsAny, + TableFeature, TableFeatures, ValidateFeatureSlots, } from '../../types/TableFeatures' @@ -188,6 +189,10 @@ export interface Table_CoreProperties< * Prototype cache for Row objects - shared by all rows in this table */ _rowPrototype?: object + /** + * Cache of the `initRowInstanceData` functions for features that define one. + */ + _rowInstanceInitFns?: Array> /** * The readonly derived atoms for each `TableState` slice. Each derives from * its corresponding `baseAtom` plus, optionally, a per-slice external atom or