diff --git a/packages/angular-table/src/injectTable.ts b/packages/angular-table/src/injectTable.ts index 9a874a7ae8..993d649171 100644 --- a/packages/angular-table/src/injectTable.ts +++ b/packages/angular-table/src/injectTable.ts @@ -21,8 +21,9 @@ export function injectTable< TFeatures extends TableFeatures, TData extends RowData, >( - options: () => TableOptions, -): Table & Signal> { + options: () => TableOptions, +): Table & + Signal> { return lazyInit(() => { const features = () => { return { @@ -47,7 +48,9 @@ export function injectTable< // Compose table options using computed. // This is to allow `tableSignal` to listen and set table option - const updatedOptions = computed>(() => { + const updatedOptions = computed< + TableOptions + >(() => { // listen to table state changed const tableState = state() // listen to input options changed diff --git a/packages/qwik-table/src/useTable.ts b/packages/qwik-table/src/useTable.ts index d0d40f8d3f..f9f836d370 100644 --- a/packages/qwik-table/src/useTable.ts +++ b/packages/qwik-table/src/useTable.ts @@ -16,14 +16,16 @@ import type { export function useTable< TFeatures extends TableFeatures, TData extends RowData, ->(tableOptions: TableOptions): Table { +>( + tableOptions: TableOptions, +): Table { const _features = { ...coreFeatures, ...tableOptions._features } const state = useSignal( getInitialTableState(_features, tableOptions.initialState), ) - const statefulOptions: TableOptions = { + const statefulOptions: TableOptions = { ...tableOptions, _features, state: { @@ -37,7 +39,7 @@ export function useTable< } const table = useStore<{ - instance: NoSerialize> + instance: NoSerialize> }>({ instance: noSerialize(constructTable(statefulOptions)), }) diff --git a/packages/react-table/src/createTableHelper.ts b/packages/react-table/src/createTableHelper.ts index cb82307e7f..8caf89ee45 100644 --- a/packages/react-table/src/createTableHelper.ts +++ b/packages/react-table/src/createTableHelper.ts @@ -28,10 +28,9 @@ export function createTableHelper< tableHelperOptions: TableHelperOptions, ): TableHelper { const tableHelper = constructTableHelper(useTable, tableHelperOptions) - return { - ...tableHelper, + return Object.assign(tableHelper, { useTable: tableHelper.tableCreator, - } as unknown as TableHelper + }) as unknown as TableHelper } // test diff --git a/packages/table-core/src/core/table/constructTable.ts b/packages/table-core/src/core/table/constructTable.ts index 1e838a9d93..809954d647 100644 --- a/packages/table-core/src/core/table/constructTable.ts +++ b/packages/table-core/src/core/table/constructTable.ts @@ -23,7 +23,9 @@ export function getInitialTableState( export function constructTable< TFeatures extends TableFeatures, TData extends RowData, ->(options: TableOptions): Table { +>( + options: TableOptions, +): Table { const { _features = {} as TFeatures } = options const featuresList: Array> = Object.values(_features) @@ -35,7 +37,7 @@ export function constructTable< ) } - const table = {} as unknown as Table + const table = {} as unknown as Table const defaultOptions = featuresList.reduce((obj, feature) => { return Object.assign(obj, feature.getDefaultTableOptions?.(table as any)) diff --git a/packages/table-core/src/features/column-filtering/columnFilteringFeature.types.ts b/packages/table-core/src/features/column-filtering/columnFilteringFeature.types.ts index 9db4b93eec..b038eaee8f 100644 --- a/packages/table-core/src/features/column-filtering/columnFilteringFeature.types.ts +++ b/packages/table-core/src/features/column-filtering/columnFilteringFeature.types.ts @@ -6,7 +6,7 @@ import type { RowData, Updater, } from '../../types/type-utils' -import type { TableFeatures } from '../../types/TableFeatures' +import type { GetFeatureData, TableFeatures } from '../../types/TableFeatures' import type { RowModel } from '../../core/row-models/coreRowModelsFeature.types' import type { Row } from '../../types/Row' import type { Column } from '../../types/Column' @@ -80,7 +80,7 @@ export type FilterFnOption< export interface ColumnDef_ColumnFiltering< TFeatures extends TableFeatures, - TData extends RowData, + TData extends RowData = GetFeatureData, > { /** * Enables/disables the **column** filter for this column. diff --git a/packages/table-core/src/features/column-grouping/columnGroupingFeature.types.ts b/packages/table-core/src/features/column-grouping/columnGroupingFeature.types.ts index f86c962285..20a5fa18ad 100644 --- a/packages/table-core/src/features/column-grouping/columnGroupingFeature.types.ts +++ b/packages/table-core/src/features/column-grouping/columnGroupingFeature.types.ts @@ -7,7 +7,7 @@ import type { RowData, Updater, } from '../../types/type-utils' -import type { TableFeatures } from '../../types/TableFeatures' +import type { GetFeatureData, TableFeatures } from '../../types/TableFeatures' import type { Row } from '../../types/Row' import type { Cell } from '../../types/Cell' import type { ColumnDefTemplate } from '../../types/ColumnDef' @@ -52,7 +52,7 @@ export type AggregationFnOption< export interface ColumnDef_ColumnGrouping< TFeatures extends TableFeatures, - TData extends RowData, + TData extends RowData = GetFeatureData, TValue extends CellData = CellData, > { /** diff --git a/packages/table-core/src/features/row-sorting/rowSortingFeature.types.ts b/packages/table-core/src/features/row-sorting/rowSortingFeature.types.ts index f4c655e96a..4557fc3110 100644 --- a/packages/table-core/src/features/row-sorting/rowSortingFeature.types.ts +++ b/packages/table-core/src/features/row-sorting/rowSortingFeature.types.ts @@ -2,7 +2,7 @@ import type { RowModel } from '../../core/row-models/coreRowModelsFeature.types' import type { Table } from '../../types/Table' import type { BuiltInSortFn } from '../../fns/sortFns' import type { OnChangeFn, RowData, Updater } from '../../types/type-utils' -import type { TableFeatures } from '../../types/TableFeatures' +import type { GetFeatureData, TableFeatures } from '../../types/TableFeatures' import type { Row } from '../../types/Row' export type SortDirection = 'asc' | 'desc' @@ -50,7 +50,7 @@ export type SortFnOption< export interface ColumnDef_RowSorting< TFeatures extends TableFeatures, - TData extends RowData, + TData extends RowData = GetFeatureData, > { /** * Enables/Disables multi-sorting for this column. diff --git a/packages/table-core/src/types/ColumnDef.ts b/packages/table-core/src/types/ColumnDef.ts index 0a2ba4b16e..24d1ee697f 100644 --- a/packages/table-core/src/types/ColumnDef.ts +++ b/packages/table-core/src/types/ColumnDef.ts @@ -77,32 +77,6 @@ export type ColumnDefBase< TData extends RowData, TValue extends CellData = CellData, > = ColumnDefBase_Core & - UnionToIntersection< - | ('columnVisibilityFeature' extends keyof TFeatures - ? ColumnDef_ColumnVisibility - : never) - | ('columnPinningFeature' extends keyof TFeatures - ? ColumnDef_ColumnPinning - : never) - | ('columnFilteringFeature' extends keyof TFeatures - ? ColumnDef_ColumnFiltering - : never) - | ('globalFilteringFeature' extends keyof TFeatures - ? ColumnDef_GlobalFiltering - : never) - | ('rowSortingFeature' extends keyof TFeatures - ? ColumnDef_RowSorting - : never) - | ('columnGroupingFeature' extends keyof TFeatures - ? ColumnDef_ColumnGrouping - : never) - | ('columnSizingFeature' extends keyof TFeatures - ? ColumnDef_ColumnSizing - : never) - | ('columnResizingFeature' extends keyof TFeatures - ? ColumnDef_ColumnResizing - : never) - > & ExtractFeatureTypes<'ColumnDef', TFeatures> & ColumnDef_Plugins diff --git a/packages/table-core/src/types/TableFeatures.ts b/packages/table-core/src/types/TableFeatures.ts index 866a914d51..6068e66f37 100644 --- a/packages/table-core/src/types/TableFeatures.ts +++ b/packages/table-core/src/types/TableFeatures.ts @@ -26,6 +26,7 @@ export type ExtractFeatureTypes< > interface FeatureConstructors { + Data?: RowData CachedRowModel?: any Cell?: any Column?: any @@ -45,11 +46,16 @@ export interface Plugins {} export interface TableFeatures extends Partial, Partial, - Partial {} + Partial { + Data?: RowData +} + +export type GetFeatureData = + TFeatures['Data'] extends undefined ? RowData : NonNullable export type ConstructCellAPIs = < TFeatures extends TableFeatures, - TData extends RowData, + TData extends RowData = GetFeatureData, TValue extends CellData = CellData, >( cell: Cell & @@ -65,7 +71,7 @@ export type ConstructCellAPIs = < export type ConstructColumnAPIs = < TFeatures extends TableFeatures, - TData extends RowData, + TData extends RowData = GetFeatureData, TValue extends CellData = CellData, >( column: Column & @@ -77,7 +83,7 @@ export type ConstructColumnAPIs = < export type ConstructHeaderAPIs = < TFeatures extends TableFeatures, - TData extends RowData, + TData extends RowData = GetFeatureData, TValue extends CellData = CellData, >( header: Header & @@ -92,14 +98,14 @@ export type ConstructHeaderAPIs = < export type ConstructRowAPIs = < TFeatures extends TableFeatures, - TData extends RowData, + TData extends RowData = GetFeatureData, >( row: Row & Partial, ) => void export type ConstructTableAPIs = < TFeatures extends TableFeatures, - TData extends RowData, + TData extends RowData = GetFeatureData, >( table: Table_Internal & Partial & { @@ -109,13 +115,18 @@ export type ConstructTableAPIs = < export type GetDefaultColumnDef = < TFeatures extends TableFeatures, - TData extends RowData, + TData extends RowData = GetFeatureData, TValue extends CellData = CellData, >() => ColumnDefBase_All & Partial export type GetDefaultTableOptions = - ( + < + TFeatures extends TableFeatures, + TData extends RowData = TConstructors['Data'] extends undefined + ? RowData + : NonNullable, + >( table: Table_Internal & Partial, ) => Partial> & Partial