Skip to content

Commit ca10016

Browse files
committed
fix: inject data type to features
1 parent 495f0ed commit ca10016

File tree

9 files changed

+42
-51
lines changed

9 files changed

+42
-51
lines changed

Diff for: packages/angular-table/src/injectTable.ts

+6-3
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,9 @@ export function injectTable<
2121
TFeatures extends TableFeatures,
2222
TData extends RowData,
2323
>(
24-
options: () => TableOptions<TFeatures, TData>,
25-
): Table<TFeatures, TData> & Signal<Table<TFeatures, TData>> {
24+
options: () => TableOptions<TFeatures & { Data: TData }, TData>,
25+
): Table<TFeatures & { Data: TData }, TData> &
26+
Signal<Table<TFeatures & { Data: TData }, TData>> {
2627
return lazyInit(() => {
2728
const features = () => {
2829
return {
@@ -47,7 +48,9 @@ export function injectTable<
4748

4849
// Compose table options using computed.
4950
// This is to allow `tableSignal` to listen and set table option
50-
const updatedOptions = computed<TableOptions<TFeatures, TData>>(() => {
51+
const updatedOptions = computed<
52+
TableOptions<TFeatures & { Data: TData }, TData>
53+
>(() => {
5154
// listen to table state changed
5255
const tableState = state()
5356
// listen to input options changed

Diff for: packages/qwik-table/src/useTable.ts

+5-3
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,16 @@ import type {
1616
export function useTable<
1717
TFeatures extends TableFeatures,
1818
TData extends RowData,
19-
>(tableOptions: TableOptions<TFeatures, TData>): Table<TFeatures, TData> {
19+
>(
20+
tableOptions: TableOptions<TFeatures & { Data: TData }, TData>,
21+
): Table<TFeatures & { Data: TData }, TData> {
2022
const _features = { ...coreFeatures, ...tableOptions._features }
2123

2224
const state = useSignal(
2325
getInitialTableState(_features, tableOptions.initialState),
2426
)
2527

26-
const statefulOptions: TableOptions<TFeatures, TData> = {
28+
const statefulOptions: TableOptions<TFeatures & { Data: TData }, TData> = {
2729
...tableOptions,
2830
_features,
2931
state: {
@@ -37,7 +39,7 @@ export function useTable<
3739
}
3840

3941
const table = useStore<{
40-
instance: NoSerialize<Table<TFeatures, TData>>
42+
instance: NoSerialize<Table<TFeatures & { Data: TData }, TData>>
4143
}>({
4244
instance: noSerialize(constructTable(statefulOptions)),
4345
})

Diff for: packages/react-table/src/createTableHelper.ts

+2-3
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,9 @@ export function createTableHelper<
2828
tableHelperOptions: TableHelperOptions<TFeatures, TData>,
2929
): TableHelper<TFeatures, TData> {
3030
const tableHelper = constructTableHelper(useTable, tableHelperOptions)
31-
return {
32-
...tableHelper,
31+
return Object.assign(tableHelper, {
3332
useTable: tableHelper.tableCreator,
34-
} as unknown as TableHelper<TFeatures, TData>
33+
}) as unknown as TableHelper<TFeatures, TData>
3534
}
3635

3736
// test

Diff for: packages/table-core/src/core/table/constructTable.ts

+4-2
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,9 @@ export function getInitialTableState<TFeatures extends TableFeatures>(
2323
export function constructTable<
2424
TFeatures extends TableFeatures,
2525
TData extends RowData,
26-
>(options: TableOptions<TFeatures, TData>): Table<TFeatures, TData> {
26+
>(
27+
options: TableOptions<TFeatures, TData>,
28+
): Table<TFeatures & { Data: TData }, TData> {
2729
const { _features = {} as TFeatures } = options
2830

2931
const featuresList: Array<TableFeature<{}>> = Object.values(_features)
@@ -35,7 +37,7 @@ export function constructTable<
3537
)
3638
}
3739

38-
const table = {} as unknown as Table<TFeatures, TData>
40+
const table = {} as unknown as Table<TFeatures & { Data: TData }, TData>
3941

4042
const defaultOptions = featuresList.reduce((obj, feature) => {
4143
return Object.assign(obj, feature.getDefaultTableOptions?.(table as any))

Diff for: packages/table-core/src/features/column-filtering/columnFilteringFeature.types.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import type {
66
RowData,
77
Updater,
88
} from '../../types/type-utils'
9-
import type { TableFeatures } from '../../types/TableFeatures'
9+
import type { GetFeatureData, TableFeatures } from '../../types/TableFeatures'
1010
import type { RowModel } from '../../core/row-models/coreRowModelsFeature.types'
1111
import type { Row } from '../../types/Row'
1212
import type { Column } from '../../types/Column'
@@ -80,7 +80,7 @@ export type FilterFnOption<
8080

8181
export interface ColumnDef_ColumnFiltering<
8282
TFeatures extends TableFeatures,
83-
TData extends RowData,
83+
TData extends RowData = GetFeatureData<TFeatures>,
8484
> {
8585
/**
8686
* Enables/disables the **column** filter for this column.

Diff for: packages/table-core/src/features/column-grouping/columnGroupingFeature.types.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import type {
77
RowData,
88
Updater,
99
} from '../../types/type-utils'
10-
import type { TableFeatures } from '../../types/TableFeatures'
10+
import type { GetFeatureData, TableFeatures } from '../../types/TableFeatures'
1111
import type { Row } from '../../types/Row'
1212
import type { Cell } from '../../types/Cell'
1313
import type { ColumnDefTemplate } from '../../types/ColumnDef'
@@ -52,7 +52,7 @@ export type AggregationFnOption<
5252

5353
export interface ColumnDef_ColumnGrouping<
5454
TFeatures extends TableFeatures,
55-
TData extends RowData,
55+
TData extends RowData = GetFeatureData<TFeatures>,
5656
TValue extends CellData = CellData,
5757
> {
5858
/**

Diff for: packages/table-core/src/features/row-sorting/rowSortingFeature.types.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import type { RowModel } from '../../core/row-models/coreRowModelsFeature.types'
22
import type { Table } from '../../types/Table'
33
import type { BuiltInSortFn } from '../../fns/sortFns'
44
import type { OnChangeFn, RowData, Updater } from '../../types/type-utils'
5-
import type { TableFeatures } from '../../types/TableFeatures'
5+
import type { GetFeatureData, TableFeatures } from '../../types/TableFeatures'
66
import type { Row } from '../../types/Row'
77

88
export type SortDirection = 'asc' | 'desc'
@@ -50,7 +50,7 @@ export type SortFnOption<
5050

5151
export interface ColumnDef_RowSorting<
5252
TFeatures extends TableFeatures,
53-
TData extends RowData,
53+
TData extends RowData = GetFeatureData<TFeatures>,
5454
> {
5555
/**
5656
* Enables/Disables multi-sorting for this column.

Diff for: packages/table-core/src/types/ColumnDef.ts

-26
Original file line numberDiff line numberDiff line change
@@ -77,32 +77,6 @@ export type ColumnDefBase<
7777
TData extends RowData,
7878
TValue extends CellData = CellData,
7979
> = ColumnDefBase_Core<TFeatures, TData, TValue> &
80-
UnionToIntersection<
81-
| ('columnVisibilityFeature' extends keyof TFeatures
82-
? ColumnDef_ColumnVisibility
83-
: never)
84-
| ('columnPinningFeature' extends keyof TFeatures
85-
? ColumnDef_ColumnPinning
86-
: never)
87-
| ('columnFilteringFeature' extends keyof TFeatures
88-
? ColumnDef_ColumnFiltering<TFeatures, TData>
89-
: never)
90-
| ('globalFilteringFeature' extends keyof TFeatures
91-
? ColumnDef_GlobalFiltering
92-
: never)
93-
| ('rowSortingFeature' extends keyof TFeatures
94-
? ColumnDef_RowSorting<TFeatures, TData>
95-
: never)
96-
| ('columnGroupingFeature' extends keyof TFeatures
97-
? ColumnDef_ColumnGrouping<TFeatures, TData, TValue>
98-
: never)
99-
| ('columnSizingFeature' extends keyof TFeatures
100-
? ColumnDef_ColumnSizing
101-
: never)
102-
| ('columnResizingFeature' extends keyof TFeatures
103-
? ColumnDef_ColumnResizing
104-
: never)
105-
> &
10680
ExtractFeatureTypes<'ColumnDef', TFeatures> &
10781
ColumnDef_Plugins<TFeatures, TData, TValue>
10882

Diff for: packages/table-core/src/types/TableFeatures.ts

+19-8
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ export type ExtractFeatureTypes<
2626
>
2727

2828
interface FeatureConstructors {
29+
Data?: RowData
2930
CachedRowModel?: any
3031
Cell?: any
3132
Column?: any
@@ -45,11 +46,16 @@ export interface Plugins {}
4546
export interface TableFeatures
4647
extends Partial<CoreFeatures>,
4748
Partial<StockFeatures>,
48-
Partial<Plugins> {}
49+
Partial<Plugins> {
50+
Data?: RowData
51+
}
52+
53+
export type GetFeatureData<TFeatures extends TableFeatures> =
54+
TFeatures['Data'] extends undefined ? RowData : NonNullable<TFeatures['Data']>
4955

5056
export type ConstructCellAPIs<TConstructors extends FeatureConstructors> = <
5157
TFeatures extends TableFeatures,
52-
TData extends RowData,
58+
TData extends RowData = GetFeatureData<TableFeatures>,
5359
TValue extends CellData = CellData,
5460
>(
5561
cell: Cell<TFeatures, TData, TValue> &
@@ -65,7 +71,7 @@ export type ConstructCellAPIs<TConstructors extends FeatureConstructors> = <
6571

6672
export type ConstructColumnAPIs<TConstructors extends FeatureConstructors> = <
6773
TFeatures extends TableFeatures,
68-
TData extends RowData,
74+
TData extends RowData = GetFeatureData<TFeatures>,
6975
TValue extends CellData = CellData,
7076
>(
7177
column: Column<TFeatures, TData, TValue> &
@@ -77,7 +83,7 @@ export type ConstructColumnAPIs<TConstructors extends FeatureConstructors> = <
7783

7884
export type ConstructHeaderAPIs<TConstructors extends FeatureConstructors> = <
7985
TFeatures extends TableFeatures,
80-
TData extends RowData,
86+
TData extends RowData = GetFeatureData<TFeatures>,
8187
TValue extends CellData = CellData,
8288
>(
8389
header: Header<TFeatures, TData, TValue> &
@@ -92,14 +98,14 @@ export type ConstructHeaderAPIs<TConstructors extends FeatureConstructors> = <
9298

9399
export type ConstructRowAPIs<TConstructors extends FeatureConstructors> = <
94100
TFeatures extends TableFeatures,
95-
TData extends RowData,
101+
TData extends RowData = GetFeatureData<TFeatures>,
96102
>(
97103
row: Row<TFeatures, TData> & Partial<TConstructors['Row']>,
98104
) => void
99105

100106
export type ConstructTableAPIs<TConstructors extends FeatureConstructors> = <
101107
TFeatures extends TableFeatures,
102-
TData extends RowData,
108+
TData extends RowData = GetFeatureData<TFeatures>,
103109
>(
104110
table: Table_Internal<TFeatures, TData> &
105111
Partial<TConstructors['Table']> & {
@@ -109,13 +115,18 @@ export type ConstructTableAPIs<TConstructors extends FeatureConstructors> = <
109115

110116
export type GetDefaultColumnDef<TConstructors extends FeatureConstructors> = <
111117
TFeatures extends TableFeatures,
112-
TData extends RowData,
118+
TData extends RowData = GetFeatureData<TFeatures>,
113119
TValue extends CellData = CellData,
114120
>() => ColumnDefBase_All<TFeatures, TData, TValue> &
115121
Partial<TConstructors['ColumnDef']>
116122

117123
export type GetDefaultTableOptions<TConstructors extends FeatureConstructors> =
118-
<TFeatures extends TableFeatures, TData extends RowData>(
124+
<
125+
TFeatures extends TableFeatures,
126+
TData extends RowData = TConstructors['Data'] extends undefined
127+
? RowData
128+
: NonNullable<TConstructors['Data']>,
129+
>(
119130
table: Table_Internal<TFeatures, TData> & Partial<TConstructors['Table']>,
120131
) => Partial<TableOptions_All<TFeatures, TData>> &
121132
Partial<TConstructors['TableOptions']>

0 commit comments

Comments
 (0)