From db4232ca029085f10d16e2310323df76a3a2bbb6 Mon Sep 17 00:00:00 2001 From: Kevin Van Cott Date: Sat, 11 Jan 2025 18:00:00 -0600 Subject: [PATCH] tried passing in TData better during feature type extraction --- .../src/angularReactivityFeature.ts | 17 +++- .../src/core/cells/coreCellsFeature.ts | 6 +- .../src/core/columns/coreColumnsFeature.ts | 6 +- .../src/core/headers/coreHeadersFeature.ts | 6 +- .../core/row-models/coreRowModelsFeature.ts | 6 +- .../src/core/rows/coreRowsFeature.ts | 6 +- .../src/core/table/constructTable.ts | 3 +- .../src/core/table/coreTablesFeature.ts | 6 +- .../column-faceting/columnFacetingFeature.ts | 2 +- .../columnFilteringFeature.ts | 2 +- .../column-grouping/columnGroupingFeature.ts | 2 +- .../column-ordering/columnOrderingFeature.ts | 2 +- .../column-pinning/columnPinningFeature.ts | 2 +- .../column-resizing/columnResizingFeature.ts | 2 +- .../column-sizing/columnSizingFeature.ts | 2 +- .../columnVisibilityFeature.ts | 5 +- .../globalFilteringFeature.ts | 2 +- .../row-expanding/rowExpandingFeature.ts | 2 +- .../row-pagination/rowPaginationFeature.ts | 2 +- .../features/row-pinning/rowPinningFeature.ts | 2 +- .../row-selection/rowSelectionFeature.ts | 2 +- .../features/row-sorting/rowSortingFeature.ts | 21 ++-- packages/table-core/src/types/Cell.ts | 2 +- packages/table-core/src/types/Column.ts | 2 +- packages/table-core/src/types/ColumnDef.ts | 2 +- packages/table-core/src/types/Header.ts | 2 +- packages/table-core/src/types/HeaderGroup.ts | 2 +- packages/table-core/src/types/Row.ts | 2 +- packages/table-core/src/types/RowModel.ts | 4 +- packages/table-core/src/types/RowModelFns.ts | 2 +- packages/table-core/src/types/Table.ts | 2 +- .../table-core/src/types/TableFeatures.ts | 96 ++++++++++++------- packages/table-core/src/types/TableOptions.ts | 2 +- 33 files changed, 141 insertions(+), 83 deletions(-) diff --git a/packages/angular-table/src/angularReactivityFeature.ts b/packages/angular-table/src/angularReactivityFeature.ts index 87d749ca26..490298e33b 100644 --- a/packages/angular-table/src/angularReactivityFeature.ts +++ b/packages/angular-table/src/angularReactivityFeature.ts @@ -43,7 +43,11 @@ interface AngularReactivityFeatureConstructors< export function constructAngularReactivityFeature< TFeatures extends TableFeatures, TData extends RowData, ->(): TableFeature> { +>(): TableFeature< + AngularReactivityFeatureConstructors, + TFeatures, + TData +> { return { getDefaultTableOptions(table) { return { enableExperimentalReactivity: false } @@ -56,13 +60,13 @@ export function constructAngularReactivityFeature< table._rootNotifier = computed(() => rootNotifier()?.(), { equal: () => false, - }) as any + }) table._setRootNotifier = (notifier) => { rootNotifier.set(notifier) } - setReactiveProps(table._rootNotifier!, table, { + setReactiveProps(table._rootNotifier, table, { skipProperty: skipBaseProperties, }) }, @@ -123,8 +127,11 @@ function skipBaseProperties(property: string): boolean { return property.endsWith('Handler') || !property.startsWith('get') } -export function setReactiveProps( - notifier: Signal>, +export function setReactiveProps< + TFeatures extends TableFeatures, + TData extends RowData, +>( + notifier: Signal>, obj: { [key: string]: any }, options: { skipProperty: (property: string) => boolean diff --git a/packages/table-core/src/core/cells/coreCellsFeature.ts b/packages/table-core/src/core/cells/coreCellsFeature.ts index a7e15cac04..0cdfbf9058 100644 --- a/packages/table-core/src/core/cells/coreCellsFeature.ts +++ b/packages/table-core/src/core/cells/coreCellsFeature.ts @@ -19,7 +19,11 @@ interface CoreCellsFeatureConstructors< export function constructCoreCellsFeature< TFeatures extends TableFeatures, TData extends RowData, ->(): TableFeature> { +>(): TableFeature< + CoreCellsFeatureConstructors, + TFeatures, + TData +> { return { constructCellAPIs: (cell) => { assignAPIs('coreCellsFeature', cell, [ diff --git a/packages/table-core/src/core/columns/coreColumnsFeature.ts b/packages/table-core/src/core/columns/coreColumnsFeature.ts index 90fbe721b6..566bad301f 100644 --- a/packages/table-core/src/core/columns/coreColumnsFeature.ts +++ b/packages/table-core/src/core/columns/coreColumnsFeature.ts @@ -29,7 +29,11 @@ interface CoreColumnsFeatureConstructors< export function constructCoreColumnsFeature< TFeatures extends TableFeatures, TData extends RowData, ->(): TableFeature> { +>(): TableFeature< + CoreColumnsFeatureConstructors, + TFeatures, + TData +> { return { constructColumnAPIs: (column) => { const { _table: table } = column diff --git a/packages/table-core/src/core/headers/coreHeadersFeature.ts b/packages/table-core/src/core/headers/coreHeadersFeature.ts index 1403bb38dd..9877e4d157 100644 --- a/packages/table-core/src/core/headers/coreHeadersFeature.ts +++ b/packages/table-core/src/core/headers/coreHeadersFeature.ts @@ -27,7 +27,11 @@ interface CoreHeadersFeatureConstructors< export function constructCoreHeadersFeature< TFeatures extends TableFeatures, TData extends RowData, ->(): TableFeature> { +>(): TableFeature< + CoreHeadersFeatureConstructors, + TFeatures, + TData +> { return { constructHeaderAPIs: (header) => { assignAPIs('coreHeadersFeature', header, [ diff --git a/packages/table-core/src/core/row-models/coreRowModelsFeature.ts b/packages/table-core/src/core/row-models/coreRowModelsFeature.ts index da5a27d400..ea4b925e6c 100644 --- a/packages/table-core/src/core/row-models/coreRowModelsFeature.ts +++ b/packages/table-core/src/core/row-models/coreRowModelsFeature.ts @@ -27,7 +27,11 @@ interface CoreRowModelsFeatureConstructors< export function constructCoreRowModelsFeature< TFeatures extends TableFeatures, TData extends RowData, ->(): TableFeature> { +>(): TableFeature< + CoreRowModelsFeatureConstructors, + TFeatures, + TData +> { return { constructTableAPIs: (table) => { assignAPIs('coreRowModelsFeature', table, [ diff --git a/packages/table-core/src/core/rows/coreRowsFeature.ts b/packages/table-core/src/core/rows/coreRowsFeature.ts index 1ab9b8fa96..e098222b24 100644 --- a/packages/table-core/src/core/rows/coreRowsFeature.ts +++ b/packages/table-core/src/core/rows/coreRowsFeature.ts @@ -31,7 +31,11 @@ interface CoreRowsFeatureConstructors< export function constructCoreRowsFeature< TFeatures extends TableFeatures, TData extends RowData, ->(): TableFeature> { +>(): TableFeature< + CoreRowsFeatureConstructors, + TFeatures, + TData +> { return { constructRowAPIs: (row) => { assignAPIs('coreRowsFeature', row, [ diff --git a/packages/table-core/src/core/table/constructTable.ts b/packages/table-core/src/core/table/constructTable.ts index 1e838a9d93..e16352c2a2 100644 --- a/packages/table-core/src/core/table/constructTable.ts +++ b/packages/table-core/src/core/table/constructTable.ts @@ -26,7 +26,8 @@ export function constructTable< >(options: TableOptions): Table { const { _features = {} as TFeatures } = options - const featuresList: Array> = Object.values(_features) + const featuresList: Array> = + Object.values(_features) if (isDev && (options.debugAll || options.debugTable)) { console.info( diff --git a/packages/table-core/src/core/table/coreTablesFeature.ts b/packages/table-core/src/core/table/coreTablesFeature.ts index 2a381105b1..9af39ab0da 100644 --- a/packages/table-core/src/core/table/coreTablesFeature.ts +++ b/packages/table-core/src/core/table/coreTablesFeature.ts @@ -20,7 +20,11 @@ interface CoreTablesFeatureConstructors< export function constructCoreTablesFeature< TFeatures extends TableFeatures, TData extends RowData, ->(): TableFeature> { +>(): TableFeature< + CoreTablesFeatureConstructors, + TFeatures, + TData +> { return { constructTableAPIs: (table) => { assignAPIs('coreTablesFeature', table, [ diff --git a/packages/table-core/src/features/column-faceting/columnFacetingFeature.ts b/packages/table-core/src/features/column-faceting/columnFacetingFeature.ts index 0fea420410..2ad727f90b 100644 --- a/packages/table-core/src/features/column-faceting/columnFacetingFeature.ts +++ b/packages/table-core/src/features/column-faceting/columnFacetingFeature.ts @@ -27,7 +27,7 @@ interface ColumnFacetingFeatureConstructors< export function constructColumnFacetingFeature< TFeatures extends TableFeatures, TData extends RowData, ->(): TableFeature> { +>(): TableFeature, TData> { return { constructColumnAPIs: (column) => { assignAPIs('columnFacetingFeature', column, [ diff --git a/packages/table-core/src/features/column-filtering/columnFilteringFeature.ts b/packages/table-core/src/features/column-filtering/columnFilteringFeature.ts index 9fdd82e756..c4ed602342 100644 --- a/packages/table-core/src/features/column-filtering/columnFilteringFeature.ts +++ b/packages/table-core/src/features/column-filtering/columnFilteringFeature.ts @@ -43,7 +43,7 @@ interface ColumnFilteringFeatureConstructors< export function constructColumnFilteringFeature< TFeatures extends TableFeatures, TData extends RowData, ->(): TableFeature> { +>(): TableFeature, TData> { return { getInitialState: (initialState) => { return { diff --git a/packages/table-core/src/features/column-grouping/columnGroupingFeature.ts b/packages/table-core/src/features/column-grouping/columnGroupingFeature.ts index 1d5ae3fd5d..55724ca92c 100644 --- a/packages/table-core/src/features/column-grouping/columnGroupingFeature.ts +++ b/packages/table-core/src/features/column-grouping/columnGroupingFeature.ts @@ -50,7 +50,7 @@ interface ColumnGroupingFeatureConstructors< export function constructColumnGroupingFeature< TFeatures extends TableFeatures, TData extends RowData, ->(): TableFeature> { +>(): TableFeature, TData> { return { getInitialState: (initialState) => { return { diff --git a/packages/table-core/src/features/column-ordering/columnOrderingFeature.ts b/packages/table-core/src/features/column-ordering/columnOrderingFeature.ts index be45385ff0..1b36afa314 100644 --- a/packages/table-core/src/features/column-ordering/columnOrderingFeature.ts +++ b/packages/table-core/src/features/column-ordering/columnOrderingFeature.ts @@ -30,7 +30,7 @@ interface ColumnOrderingFeatureConstructors< export function constructColumnOrderingFeature< TFeatures extends TableFeatures, TData extends RowData, ->(): TableFeature> { +>(): TableFeature, TData> { return { getInitialState: (initialState) => { return { diff --git a/packages/table-core/src/features/column-pinning/columnPinningFeature.ts b/packages/table-core/src/features/column-pinning/columnPinningFeature.ts index 1f7073b387..b70a6796b7 100644 --- a/packages/table-core/src/features/column-pinning/columnPinningFeature.ts +++ b/packages/table-core/src/features/column-pinning/columnPinningFeature.ts @@ -57,7 +57,7 @@ interface ColumnPinningFeatureConstructors< export function constructColumnPinningFeature< TFeatures extends TableFeatures, TData extends RowData, ->(): TableFeature> { +>(): TableFeature, TData> { return { getInitialState: (initialState) => { return { diff --git a/packages/table-core/src/features/column-resizing/columnResizingFeature.ts b/packages/table-core/src/features/column-resizing/columnResizingFeature.ts index 2b813d32f3..f7d9a6e489 100644 --- a/packages/table-core/src/features/column-resizing/columnResizingFeature.ts +++ b/packages/table-core/src/features/column-resizing/columnResizingFeature.ts @@ -31,7 +31,7 @@ interface ColumnResizingFeatureConstructors< export function constructColumnResizingFeature< TFeatures extends TableFeatures, TData extends RowData, ->(): TableFeature> { +>(): TableFeature, TData> { return { getInitialState: (initialState) => { return { diff --git a/packages/table-core/src/features/column-sizing/columnSizingFeature.ts b/packages/table-core/src/features/column-sizing/columnSizingFeature.ts index 9db5a3b074..2889dd1d0c 100644 --- a/packages/table-core/src/features/column-sizing/columnSizingFeature.ts +++ b/packages/table-core/src/features/column-sizing/columnSizingFeature.ts @@ -42,7 +42,7 @@ interface ColumnSizingFeatureConstructors< export function constructColumnSizingFeature< TFeatures extends TableFeatures, TData extends RowData, ->(): TableFeature> { +>(): TableFeature, TData> { return { getInitialState: (initialState) => { return { diff --git a/packages/table-core/src/features/column-visibility/columnVisibilityFeature.ts b/packages/table-core/src/features/column-visibility/columnVisibilityFeature.ts index 3369b678c7..783618ca5c 100644 --- a/packages/table-core/src/features/column-visibility/columnVisibilityFeature.ts +++ b/packages/table-core/src/features/column-visibility/columnVisibilityFeature.ts @@ -47,7 +47,10 @@ interface ColumnVisibilityFeatureConstructors< export function constructColumnVisibilityFeature< TFeatures extends TableFeatures, TData extends RowData, ->(): TableFeature> { +>(): TableFeature< + ColumnVisibilityFeatureConstructors, + TData +> { return { getInitialState: (initialState) => { return { diff --git a/packages/table-core/src/features/global-filtering/globalFilteringFeature.ts b/packages/table-core/src/features/global-filtering/globalFilteringFeature.ts index c522c81c0d..4b39667b80 100644 --- a/packages/table-core/src/features/global-filtering/globalFilteringFeature.ts +++ b/packages/table-core/src/features/global-filtering/globalFilteringFeature.ts @@ -30,7 +30,7 @@ interface GlobalFilteringFeatureConstructors< export function constructGlobalFilteringFeature< TFeatures extends TableFeatures, TData extends RowData, ->(): TableFeature> { +>(): TableFeature, TData> { return { getInitialState: (initialState) => { return { diff --git a/packages/table-core/src/features/row-expanding/rowExpandingFeature.ts b/packages/table-core/src/features/row-expanding/rowExpandingFeature.ts index f965770d71..b911375fd6 100644 --- a/packages/table-core/src/features/row-expanding/rowExpandingFeature.ts +++ b/packages/table-core/src/features/row-expanding/rowExpandingFeature.ts @@ -42,7 +42,7 @@ interface RowExpandingFeatureConstructors< export function constructRowExpandingFeature< TFeatures extends TableFeatures, TData extends RowData, ->(): TableFeature> { +>(): TableFeature, TData> { return { getInitialState: (initialState) => { return { diff --git a/packages/table-core/src/features/row-pagination/rowPaginationFeature.ts b/packages/table-core/src/features/row-pagination/rowPaginationFeature.ts index babf483e7c..2546c057a0 100644 --- a/packages/table-core/src/features/row-pagination/rowPaginationFeature.ts +++ b/packages/table-core/src/features/row-pagination/rowPaginationFeature.ts @@ -42,7 +42,7 @@ interface RowPaginationFeatureConstructors< export function constructRowPaginationFeature< TFeatures extends TableFeatures, TData extends RowData, ->(): TableFeature> { +>(): TableFeature, TData> { return { getInitialState: (initialState) => { return { diff --git a/packages/table-core/src/features/row-pinning/rowPinningFeature.ts b/packages/table-core/src/features/row-pinning/rowPinningFeature.ts index d2e37b265b..54420945b9 100644 --- a/packages/table-core/src/features/row-pinning/rowPinningFeature.ts +++ b/packages/table-core/src/features/row-pinning/rowPinningFeature.ts @@ -34,7 +34,7 @@ interface RowPinningFeatureConstructors< export function constructRowPinningFeature< TFeatures extends TableFeatures, TData extends RowData, ->(): TableFeature> { +>(): TableFeature, TData> { return { getInitialState: (initialState) => { return { diff --git a/packages/table-core/src/features/row-selection/rowSelectionFeature.ts b/packages/table-core/src/features/row-selection/rowSelectionFeature.ts index 07801d6683..93e1d75520 100644 --- a/packages/table-core/src/features/row-selection/rowSelectionFeature.ts +++ b/packages/table-core/src/features/row-selection/rowSelectionFeature.ts @@ -46,7 +46,7 @@ interface RowSelectionFeatureConstructors< export function constructRowSelectionFeature< TFeatures extends TableFeatures, TData extends RowData, ->(): TableFeature> { +>(): TableFeature, TData> { return { getInitialState: (initialState) => { return { diff --git a/packages/table-core/src/features/row-sorting/rowSortingFeature.ts b/packages/table-core/src/features/row-sorting/rowSortingFeature.ts index d157ed6345..07a420920e 100644 --- a/packages/table-core/src/features/row-sorting/rowSortingFeature.ts +++ b/packages/table-core/src/features/row-sorting/rowSortingFeature.ts @@ -18,16 +18,15 @@ import { } from './rowSortingFeature.utils' import type { RowData } from '../../types/type-utils' import type { TableFeature, TableFeatures } from '../../types/TableFeatures' -// import type { -// CachedRowModel_Sorted, -// ColumnDef_RowSorting, -// Column_RowSorting, -// CreateRowModel_Sorted, -// RowModelFns_RowSorting, -// TableOptions_RowSorting, -// TableState_RowSorting, -// Table_RowSorting, -// } from './rowSortingFeature.types' +import type {} from // CachedRowModel_Sorted, +// ColumnDef_RowSorting, +// Column_RowSorting, +// CreateRowModel_Sorted, +// RowModelFns_RowSorting, +// TableOptions_RowSorting, +// TableState_RowSorting, +// Table_RowSorting, +'./rowSortingFeature.types' interface RowSortingFeatureConstructors< TFeatures extends TableFeatures, @@ -46,7 +45,7 @@ interface RowSortingFeatureConstructors< export function constructRowSortingFeature< TFeatures extends TableFeatures, TData extends RowData, ->(): TableFeature> { +>(): TableFeature, TData> { return { getInitialState(initialState) { return { diff --git a/packages/table-core/src/types/Cell.ts b/packages/table-core/src/types/Cell.ts index 0f9480f954..116fa8229e 100644 --- a/packages/table-core/src/types/Cell.ts +++ b/packages/table-core/src/types/Cell.ts @@ -29,7 +29,7 @@ export type Cell< ? Cell_ColumnGrouping : never > & - ExtractFeatureTypes<'Cell', TFeatures> & + ExtractFeatureTypes<'Cell', TFeatures, TData, TValue> & Cell_Plugins // export type Cell< diff --git a/packages/table-core/src/types/Column.ts b/packages/table-core/src/types/Column.ts index a9553e8231..7a32c19c8e 100644 --- a/packages/table-core/src/types/Column.ts +++ b/packages/table-core/src/types/Column.ts @@ -66,7 +66,7 @@ export type Column< ? Column_RowSorting : never) > & - ExtractFeatureTypes<'Column', TFeatures> & + ExtractFeatureTypes<'Column', TFeatures, TData, TValue> & Column_Plugins // export type Column< diff --git a/packages/table-core/src/types/ColumnDef.ts b/packages/table-core/src/types/ColumnDef.ts index 0a2ba4b16e..fa241502f0 100644 --- a/packages/table-core/src/types/ColumnDef.ts +++ b/packages/table-core/src/types/ColumnDef.ts @@ -103,7 +103,7 @@ export type ColumnDefBase< ? ColumnDef_ColumnResizing : never) > & - ExtractFeatureTypes<'ColumnDef', TFeatures> & + ExtractFeatureTypes<'ColumnDef', TFeatures, TData, TValue> & ColumnDef_Plugins // export type ColumnDefBase< diff --git a/packages/table-core/src/types/Header.ts b/packages/table-core/src/types/Header.ts index d11e7a8e7f..aeeb18b3a7 100644 --- a/packages/table-core/src/types/Header.ts +++ b/packages/table-core/src/types/Header.ts @@ -33,7 +33,7 @@ export type Header< ? Header_ColumnResizing : never) > & - ExtractFeatureTypes<'Header', TFeatures> & + ExtractFeatureTypes<'Header', TFeatures, TData, TValue> & Header_Plugins // export type Header< diff --git a/packages/table-core/src/types/HeaderGroup.ts b/packages/table-core/src/types/HeaderGroup.ts index 4290be490e..108c73a0d9 100644 --- a/packages/table-core/src/types/HeaderGroup.ts +++ b/packages/table-core/src/types/HeaderGroup.ts @@ -20,5 +20,5 @@ export type HeaderGroup< TFeatures extends TableFeatures, TData extends RowData, > = HeaderGroup_Core & - ExtractFeatureTypes<'HeaderGroup', TFeatures> & + ExtractFeatureTypes<'HeaderGroup', TFeatures, TData> & HeaderGroup_Plugins diff --git a/packages/table-core/src/types/Row.ts b/packages/table-core/src/types/Row.ts index 7ce3e0c127..80548e6ba4 100644 --- a/packages/table-core/src/types/Row.ts +++ b/packages/table-core/src/types/Row.ts @@ -44,7 +44,7 @@ export type Row< | ('rowPinningFeature' extends keyof TFeatures ? Row_RowPinning : never) | ('rowSelectionFeature' extends keyof TFeatures ? Row_RowSelection : never) > & - ExtractFeatureTypes<'Row', TFeatures> & + ExtractFeatureTypes<'Row', TFeatures, TData> & Row_Plugins // export type Row< diff --git a/packages/table-core/src/types/RowModel.ts b/packages/table-core/src/types/RowModel.ts index bb5797be5c..a1ff5cd116 100644 --- a/packages/table-core/src/types/RowModel.ts +++ b/packages/table-core/src/types/RowModel.ts @@ -63,7 +63,7 @@ export type CreateRowModels< ? CreateRowModel_Sorted : never) > & - ExtractFeatureTypes<'CreateRowModels', TFeatures> & + ExtractFeatureTypes<'CreateRowModels', TFeatures, TData> & CreateRowModels_Plugins // export type CreateRowModels< @@ -114,7 +114,7 @@ export type CachedRowModels< ? CachedRowModel_Sorted : never) > & - ExtractFeatureTypes<'CachedRowModel', TFeatures> & + ExtractFeatureTypes<'CachedRowModel', TFeatures, TData> & CachedRowModels_Plugins // export type CachedRowModels< diff --git a/packages/table-core/src/types/RowModelFns.ts b/packages/table-core/src/types/RowModelFns.ts index aefcfd86df..a2f6e420f6 100644 --- a/packages/table-core/src/types/RowModelFns.ts +++ b/packages/table-core/src/types/RowModelFns.ts @@ -30,7 +30,7 @@ export type RowModelFns< ? RowModelFns_RowSorting : never) > & - ExtractFeatureTypes<'RowModelFns', TFeatures> & + ExtractFeatureTypes<'RowModelFns', TFeatures, TData> & RowModelFns_Plugins > diff --git a/packages/table-core/src/types/Table.ts b/packages/table-core/src/types/Table.ts index 8be14008fb..c259b7109d 100644 --- a/packages/table-core/src/types/Table.ts +++ b/packages/table-core/src/types/Table.ts @@ -97,7 +97,7 @@ export type Table< ? Table_RowSorting : never) > & - ExtractFeatureTypes<'Table', TFeatures> & + ExtractFeatureTypes<'Table', TFeatures, TData> & Table_Plugins // export type Table< diff --git a/packages/table-core/src/types/TableFeatures.ts b/packages/table-core/src/types/TableFeatures.ts index 866a914d51..7fbd77e787 100644 --- a/packages/table-core/src/types/TableFeatures.ts +++ b/packages/table-core/src/types/TableFeatures.ts @@ -11,12 +11,16 @@ import type { TableState_All } from './TableState' import type { StockFeatures } from '../features/stockFeatures' export type ExtractFeatureTypes< - TKey extends keyof FeatureConstructors, + TKey extends keyof FeatureConstructors, TFeatures extends TableFeatures, + TData extends RowData = RowData, + TValue extends CellData = CellData, > = UnionToIntersection< { [K in keyof TFeatures]: TFeatures[K] extends TableFeature< - infer FeatureConstructorOptions + infer FeatureConstructorOptions, + TData, + TValue > ? TKey extends keyof FeatureConstructorOptions ? FeatureConstructorOptions[TKey] @@ -25,7 +29,10 @@ export type ExtractFeatureTypes< }[keyof TFeatures] > -interface FeatureConstructors { +export interface FeatureConstructors< + TData extends RowData, + TValue extends CellData = CellData, +> { CachedRowModel?: any Cell?: any Column?: any @@ -47,11 +54,11 @@ export interface TableFeatures Partial, Partial {} -export type ConstructCellAPIs = < - TFeatures extends TableFeatures, +export type ConstructCellAPIs< + TConstructors extends FeatureConstructors, TData extends RowData, TValue extends CellData = CellData, ->( +> = ( cell: Cell & Partial & { row: Row & Partial @@ -63,11 +70,11 @@ export type ConstructCellAPIs = < }, ) => void -export type ConstructColumnAPIs = < - TFeatures extends TableFeatures, +export type ConstructColumnAPIs< + TConstructors extends FeatureConstructors, TData extends RowData, TValue extends CellData = CellData, ->( +> = ( column: Column & Partial & { columnDef: ColumnDef & @@ -75,11 +82,11 @@ export type ConstructColumnAPIs = < }, ) => void -export type ConstructHeaderAPIs = < - TFeatures extends TableFeatures, +export type ConstructHeaderAPIs< + TConstructors extends FeatureConstructors, TData extends RowData, TValue extends CellData = CellData, ->( +> = ( header: Header & Partial & { column: Column & @@ -90,47 +97,64 @@ export type ConstructHeaderAPIs = < }, ) => void -export type ConstructRowAPIs = < - TFeatures extends TableFeatures, +export type ConstructRowAPIs< + TConstructors extends FeatureConstructors, TData extends RowData, ->( + TValue extends CellData = CellData, +> = ( row: Row & Partial, ) => void -export type ConstructTableAPIs = < - TFeatures extends TableFeatures, +export type ConstructTableAPIs< + TConstructors extends FeatureConstructors, TData extends RowData, ->( + TValue extends CellData = CellData, +> = ( table: Table_Internal & Partial & { options: Partial }, ) => void -export type GetDefaultColumnDef = < - TFeatures extends TableFeatures, +export type GetDefaultColumnDef< + TConstructors extends FeatureConstructors, TData extends RowData, TValue extends CellData = CellData, ->() => ColumnDefBase_All & +> = () => ColumnDefBase_All< + TFeatures, + TData, + TValue +> & Partial -export type GetDefaultTableOptions = - ( - table: Table_Internal & Partial, - ) => Partial> & - Partial +export type GetDefaultTableOptions< + TConstructors extends FeatureConstructors, + TData extends RowData, + TValue extends CellData = CellData, +> = ( + table: Table_Internal & Partial, +) => Partial> & + Partial -export type GetInitialState = ( +export type GetInitialState< + TConstructors extends FeatureConstructors, + TData extends RowData, + TValue extends CellData = CellData, +> = ( initialState: Partial & Partial, ) => TableState_All & Partial -export interface TableFeature { - constructCellAPIs?: ConstructCellAPIs - constructColumnAPIs?: ConstructColumnAPIs - constructHeaderAPIs?: ConstructHeaderAPIs - constructRowAPIs?: ConstructRowAPIs - constructTableAPIs?: ConstructTableAPIs - getDefaultColumnDef?: GetDefaultColumnDef - getDefaultTableOptions?: GetDefaultTableOptions - getInitialState?: GetInitialState +export interface TableFeature< + TConstructors extends FeatureConstructors, + TData extends RowData, + TValue extends CellData = CellData, +> { + constructCellAPIs?: ConstructCellAPIs + constructColumnAPIs?: ConstructColumnAPIs + constructHeaderAPIs?: ConstructHeaderAPIs + constructRowAPIs?: ConstructRowAPIs + constructTableAPIs?: ConstructTableAPIs + getDefaultColumnDef?: GetDefaultColumnDef + getDefaultTableOptions?: GetDefaultTableOptions + getInitialState?: GetInitialState } diff --git a/packages/table-core/src/types/TableOptions.ts b/packages/table-core/src/types/TableOptions.ts index bb3bf1d8ab..0e3fcccb19 100644 --- a/packages/table-core/src/types/TableOptions.ts +++ b/packages/table-core/src/types/TableOptions.ts @@ -91,7 +91,7 @@ export type TableOptions< ? TableOptions_RowSorting : never) > & - ExtractFeatureTypes<'TableOptions', TFeatures> & + ExtractFeatureTypes<'TableOptions', TFeatures, TData> & TableOptions_Plugins & DebugOptions