@tanstack/table-core 8.1.2 → 8.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/build/cjs/aggregationFns.js.map +1 -1
  2. package/build/cjs/core/cell.js.map +1 -1
  3. package/build/cjs/core/column.js.map +1 -1
  4. package/build/cjs/core/headers.js.map +1 -1
  5. package/build/cjs/core/row.js.map +1 -1
  6. package/build/cjs/core/table.js +2 -2
  7. package/build/cjs/core/table.js.map +1 -1
  8. package/build/cjs/features/ColumnSizing.js.map +1 -1
  9. package/build/cjs/features/Filters.js.map +1 -1
  10. package/build/cjs/features/Grouping.js.map +1 -1
  11. package/build/cjs/features/Ordering.js.map +1 -1
  12. package/build/cjs/features/Pinning.js.map +1 -1
  13. package/build/cjs/features/Sorting.js.map +1 -1
  14. package/build/cjs/features/Visibility.js.map +1 -1
  15. package/build/cjs/filterFns.js.map +1 -1
  16. package/build/cjs/utils/getCoreRowModel.js.map +1 -1
  17. package/build/cjs/utils/getFacetedMinMaxValues.js +1 -3
  18. package/build/cjs/utils/getFacetedMinMaxValues.js.map +1 -1
  19. package/build/cjs/utils/getGroupedRowModel.js +1 -1
  20. package/build/cjs/utils/getGroupedRowModel.js.map +1 -1
  21. package/build/cjs/utils.js +2 -2
  22. package/build/cjs/utils.js.map +1 -1
  23. package/build/esm/index.js +6 -8
  24. package/build/esm/index.js.map +1 -1
  25. package/build/stats-html.html +1 -1
  26. package/build/stats-react.json +308 -308
  27. package/build/types/index.d.ts +94 -91
  28. package/build/umd/index.development.js +6 -8
  29. package/build/umd/index.development.js.map +1 -1
  30. package/build/umd/index.production.js +1 -1
  31. package/build/umd/index.production.js.map +1 -1
  32. package/package.json +1 -1
  33. package/src/aggregationFns.ts +8 -11
  34. package/src/core/cell.ts +14 -14
  35. package/src/core/column.ts +58 -47
  36. package/src/core/headers.ts +32 -32
  37. package/src/core/row.ts +9 -9
  38. package/src/core/table.ts +11 -10
  39. package/src/features/ColumnSizing.ts +5 -5
  40. package/src/features/Filters.ts +9 -14
  41. package/src/features/Grouping.ts +15 -10
  42. package/src/features/Ordering.ts +4 -2
  43. package/src/features/Pinning.ts +10 -10
  44. package/src/features/Sorting.ts +2 -2
  45. package/src/features/Visibility.ts +11 -11
  46. package/src/filterFns.ts +13 -7
  47. package/src/types.ts +16 -12
  48. package/src/utils/getCoreRowModel.ts +1 -1
  49. package/src/utils/getFacetedMinMaxValues.ts +1 -1
  50. package/src/utils/getGroupedRowModel.ts +7 -1
  51. package/src/utils.ts +6 -3
@@ -9,14 +9,9 @@ import {
9
9
  Row,
10
10
  Updater,
11
11
  RowData,
12
+ FilterMeta,
12
13
  } from '../types'
13
- import {
14
- functionalUpdate,
15
- isFunction,
16
- makeStateUpdater,
17
- memo,
18
- Overwrite,
19
- } from '../utils'
14
+ import { functionalUpdate, isFunction, makeStateUpdater } from '../utils'
20
15
 
21
16
  export type FiltersTableState = {
22
17
  columnFilters: ColumnFiltersState
@@ -41,7 +36,7 @@ export type FilterFn<TData extends RowData> = {
41
36
  row: Row<TData>,
42
37
  columnId: string,
43
38
  filterValue: any,
44
- addMeta: (meta: any) => void
39
+ addMeta: (meta: FilterMeta) => void
45
40
  ): boolean
46
41
 
47
42
  resolveFilterValue?: TransformFilterValueFn<TData>
@@ -50,12 +45,12 @@ export type FilterFn<TData extends RowData> = {
50
45
 
51
46
  export type TransformFilterValueFn<TData extends RowData> = (
52
47
  value: any,
53
- column?: Column<TData>
48
+ column?: Column<TData, unknown>
54
49
  ) => unknown
55
50
 
56
51
  export type ColumnFilterAutoRemoveTestFn<TData extends RowData> = (
57
52
  value: any,
58
- column?: Column<TData>
53
+ column?: Column<TData, unknown>
59
54
  ) => boolean
60
55
 
61
56
  export type CustomFilterFns<TData extends RowData> = Record<
@@ -93,7 +88,7 @@ export type FiltersColumn<TData extends RowData> = {
93
88
 
94
89
  export type FiltersRow<TData extends RowData> = {
95
90
  columnFilters: Record<string, boolean>
96
- columnFiltersMeta: Record<string, any>
91
+ columnFiltersMeta: Record<string, FilterMeta>
97
92
  }
98
93
 
99
94
  export type FiltersOptions<TData extends RowData> = {
@@ -110,7 +105,7 @@ export type FiltersOptions<TData extends RowData> = {
110
105
  globalFilterFn?: FilterFnOption<TData>
111
106
  onGlobalFilterChange?: OnChangeFn<any>
112
107
  enableGlobalFilter?: boolean
113
- getColumnCanGlobalFilter?: (column: Column<TData>) => boolean
108
+ getColumnCanGlobalFilter?: (column: Column<TData, unknown>) => boolean
114
109
 
115
110
  // Faceting
116
111
  getFacetedRowModel?: (
@@ -189,7 +184,7 @@ export const Filters: TableFeature = {
189
184
  },
190
185
 
191
186
  createColumn: <TData extends RowData>(
192
- column: Column<TData>,
187
+ column: Column<TData, unknown>,
193
188
  table: Table<TData>
194
189
  ): FiltersColumn<TData> => {
195
190
  return {
@@ -451,7 +446,7 @@ export const Filters: TableFeature = {
451
446
  export function shouldAutoRemoveFilter<TData extends RowData>(
452
447
  filterFn?: FilterFn<TData>,
453
448
  value?: any,
454
- column?: Column<TData>
449
+ column?: Column<TData, unknown>
455
450
  ) {
456
451
  return (
457
452
  (filterFn && filterFn.autoRemove
@@ -33,9 +33,11 @@ export type AggregationFnOption<TData extends RowData> =
33
33
  | BuiltInAggregationFn
34
34
  | AggregationFn<TData>
35
35
 
36
- export type GroupingColumnDef<TData extends RowData> = {
36
+ export type GroupingColumnDef<TData extends RowData, TValue> = {
37
37
  aggregationFn?: AggregationFnOption<TData>
38
- aggregatedCell?: ColumnDefTemplate<ReturnType<Cell<TData>['getContext']>>
38
+ aggregatedCell?: ColumnDefTemplate<
39
+ ReturnType<Cell<TData, TValue>['getContext']>
40
+ >
39
41
  enableGrouping?: boolean
40
42
  }
41
43
 
@@ -51,7 +53,7 @@ export type GroupingColumn<TData extends RowData> = {
51
53
 
52
54
  export type GroupingRow = {
53
55
  groupingColumnId?: string
54
- groupingValue?: any
56
+ groupingValue?: unknown
55
57
  getIsGrouped: () => boolean
56
58
  _groupingValuesCache: Record<string, any>
57
59
  }
@@ -89,7 +91,10 @@ export type GroupingInstance<TData extends RowData> = {
89
91
  //
90
92
 
91
93
  export const Grouping: TableFeature = {
92
- getDefaultColumnDef: <TData extends RowData>(): GroupingColumnDef<TData> => {
94
+ getDefaultColumnDef: <TData extends RowData>(): GroupingColumnDef<
95
+ TData,
96
+ unknown
97
+ > => {
93
98
  return {
94
99
  aggregatedCell: props => (props.getValue() as any)?.toString?.() ?? null,
95
100
  aggregationFn: 'auto',
@@ -112,8 +117,8 @@ export const Grouping: TableFeature = {
112
117
  }
113
118
  },
114
119
 
115
- createColumn: <TData extends RowData>(
116
- column: Column<TData>,
120
+ createColumn: <TData extends RowData, TValue>(
121
+ column: Column<TData, TValue>,
117
122
  table: Table<TData>
118
123
  ): GroupingColumn<TData> => {
119
124
  return {
@@ -215,9 +220,9 @@ export const Grouping: TableFeature = {
215
220
  }
216
221
  },
217
222
 
218
- createCell: <TData extends RowData>(
219
- cell: Cell<TData>,
220
- column: Column<TData>,
223
+ createCell: <TData extends RowData, TValue>(
224
+ cell: Cell<TData, TValue>,
225
+ column: Column<TData, TValue>,
221
226
  row: Row<TData>,
222
227
  table: Table<TData>
223
228
  ): GroupingCell => {
@@ -237,7 +242,7 @@ export const Grouping: TableFeature = {
237
242
  }
238
243
 
239
244
  export function orderColumns<TData extends RowData>(
240
- leafColumns: Column<TData>[],
245
+ leafColumns: Column<TData, unknown>[],
241
246
  grouping: string[],
242
247
  groupedColumnMode?: GroupingColumnMode
243
248
  ) {
@@ -29,7 +29,9 @@ export type ColumnOrderDefaultOptions = {
29
29
  export type ColumnOrderInstance<TData extends RowData> = {
30
30
  setColumnOrder: (updater: Updater<ColumnOrderState>) => void
31
31
  resetColumnOrder: (defaultState?: boolean) => void
32
- _getOrderColumnsFn: () => (columns: Column<TData>[]) => Column<TData>[]
32
+ _getOrderColumnsFn: () => (
33
+ columns: Column<TData, unknown>[]
34
+ ) => Column<TData, unknown>[]
33
35
  }
34
36
 
35
37
  //
@@ -69,7 +71,7 @@ export const Ordering: TableFeature = {
69
71
  (columnOrder, grouping, groupedColumnMode) => columns => {
70
72
  // Sort grouped columns to the start of the column list
71
73
  // before the headers are built
72
- let orderedColumns: Column<TData>[] = []
74
+ let orderedColumns: Column<TData, unknown>[] = []
73
75
 
74
76
  // If there is no order, return the normal columns
75
77
  if (!columnOrder?.length) {
@@ -43,18 +43,18 @@ export type ColumnPinningColumn = {
43
43
  }
44
44
 
45
45
  export type ColumnPinningRow<TData extends RowData> = {
46
- getLeftVisibleCells: () => Cell<TData>[]
47
- getCenterVisibleCells: () => Cell<TData>[]
48
- getRightVisibleCells: () => Cell<TData>[]
46
+ getLeftVisibleCells: () => Cell<TData, unknown>[]
47
+ getCenterVisibleCells: () => Cell<TData, unknown>[]
48
+ getRightVisibleCells: () => Cell<TData, unknown>[]
49
49
  }
50
50
 
51
51
  export type ColumnPinningInstance<TData extends RowData> = {
52
52
  setColumnPinning: (updater: Updater<ColumnPinningState>) => void
53
53
  resetColumnPinning: (defaultState?: boolean) => void
54
54
  getIsSomeColumnsPinned: (position?: ColumnPinningPosition) => boolean
55
- getLeftLeafColumns: () => Column<TData>[]
56
- getRightLeafColumns: () => Column<TData>[]
57
- getCenterLeafColumns: () => Column<TData>[]
55
+ getLeftLeafColumns: () => Column<TData, unknown>[]
56
+ getRightLeafColumns: () => Column<TData, unknown>[]
57
+ getCenterLeafColumns: () => Column<TData, unknown>[]
58
58
  }
59
59
 
60
60
  //
@@ -80,8 +80,8 @@ export const Pinning: TableFeature = {
80
80
  }
81
81
  },
82
82
 
83
- createColumn: <TData extends RowData>(
84
- column: Column<TData>,
83
+ createColumn: <TData extends RowData, TValue>(
84
+ column: Column<TData, TValue>,
85
85
  table: Table<TData>
86
86
  ): ColumnPinningColumn => {
87
87
  return {
@@ -185,7 +185,7 @@ export const Pinning: TableFeature = {
185
185
  columnId => allCells.find(cell => cell.column.id === columnId)!
186
186
  )
187
187
  .filter(Boolean)
188
- .map(d => ({ ...d, position: 'left' } as Cell<TData>))
188
+ .map(d => ({ ...d, position: 'left' } as Cell<TData, unknown>))
189
189
 
190
190
  return cells
191
191
  },
@@ -203,7 +203,7 @@ export const Pinning: TableFeature = {
203
203
  columnId => allCells.find(cell => cell.column.id === columnId)!
204
204
  )
205
205
  .filter(Boolean)
206
- .map(d => ({ ...d, position: 'left' } as Cell<TData>))
206
+ .map(d => ({ ...d, position: 'left' } as Cell<TData, unknown>))
207
207
 
208
208
  return cells
209
209
  },
@@ -116,8 +116,8 @@ export const Sorting: TableFeature = {
116
116
  }
117
117
  },
118
118
 
119
- createColumn: <TData extends RowData>(
120
- column: Column<TData>,
119
+ createColumn: <TData extends RowData, TValue>(
120
+ column: Column<TData, TValue>,
121
121
  table: Table<TData>
122
122
  ): SortingColumn<TData> => {
123
123
  return {
@@ -27,11 +27,11 @@ export type VisibilityDefaultOptions = {
27
27
  }
28
28
 
29
29
  export type VisibilityInstance<TData extends RowData> = {
30
- getVisibleFlatColumns: () => Column<TData>[]
31
- getVisibleLeafColumns: () => Column<TData>[]
32
- getLeftVisibleLeafColumns: () => Column<TData>[]
33
- getRightVisibleLeafColumns: () => Column<TData>[]
34
- getCenterVisibleLeafColumns: () => Column<TData>[]
30
+ getVisibleFlatColumns: () => Column<TData, unknown>[]
31
+ getVisibleLeafColumns: () => Column<TData, unknown>[]
32
+ getLeftVisibleLeafColumns: () => Column<TData, unknown>[]
33
+ getRightVisibleLeafColumns: () => Column<TData, unknown>[]
34
+ getCenterVisibleLeafColumns: () => Column<TData, unknown>[]
35
35
  setColumnVisibility: (updater: Updater<VisibilityState>) => void
36
36
  resetColumnVisibility: (defaultState?: boolean) => void
37
37
  toggleAllColumnsVisible: (value?: boolean) => void
@@ -45,8 +45,8 @@ export type VisibilityColumnDef = {
45
45
  }
46
46
 
47
47
  export type VisibilityRow<TData extends RowData> = {
48
- _getAllVisibleCells: () => Cell<TData>[]
49
- getVisibleCells: () => Cell<TData>[]
48
+ _getAllVisibleCells: () => Cell<TData, unknown>[]
49
+ getVisibleCells: () => Cell<TData, unknown>[]
50
50
  }
51
51
 
52
52
  export type VisibilityColumn = {
@@ -74,8 +74,8 @@ export const Visibility: TableFeature = {
74
74
  }
75
75
  },
76
76
 
77
- createColumn: <TData extends RowData>(
78
- column: Column<TData>,
77
+ createColumn: <TData extends RowData, TValue>(
78
+ column: Column<TData, TValue>,
79
79
  table: Table<TData>
80
80
  ): VisibilityColumn => {
81
81
  return {
@@ -143,8 +143,8 @@ export const Visibility: TableFeature = {
143
143
  ): VisibilityInstance<TData> => {
144
144
  const makeVisibleColumnsMethod = (
145
145
  key: string,
146
- getColumns: () => Column<TData>[]
147
- ): (() => Column<TData>[]) => {
146
+ getColumns: () => Column<TData, unknown>[]
147
+ ): (() => Column<TData, unknown>[]) => {
148
148
  return memo(
149
149
  () => [
150
150
  getColumns(),
package/src/filterFns.ts CHANGED
@@ -6,7 +6,7 @@ const includesString: FilterFn<any> = (
6
6
  filterValue: string
7
7
  ) => {
8
8
  const search = filterValue.toLowerCase()
9
- return row.getValue(columnId)?.toLowerCase().includes(search)
9
+ return row.getValue<string>(columnId)?.toLowerCase().includes(search)
10
10
  }
11
11
 
12
12
  includesString.autoRemove = (val: any) => testFalsey(val)
@@ -16,7 +16,7 @@ const includesStringSensitive: FilterFn<any> = (
16
16
  columnId: string,
17
17
  filterValue: string
18
18
  ) => {
19
- return row.getValue(columnId)?.includes(filterValue)
19
+ return row.getValue<string>(columnId)?.includes(filterValue)
20
20
  }
21
21
 
22
22
  includesStringSensitive.autoRemove = (val: any) => testFalsey(val)
@@ -26,7 +26,9 @@ const equalsString: FilterFn<any> = (
26
26
  columnId: string,
27
27
  filterValue: string
28
28
  ) => {
29
- return row.getValue(columnId)?.toLowerCase() === filterValue.toLowerCase()
29
+ return (
30
+ row.getValue<string>(columnId)?.toLowerCase() === filterValue.toLowerCase()
31
+ )
30
32
  }
31
33
 
32
34
  equalsString.autoRemove = (val: any) => testFalsey(val)
@@ -36,7 +38,7 @@ const arrIncludes: FilterFn<any> = (
36
38
  columnId: string,
37
39
  filterValue: unknown
38
40
  ) => {
39
- return row.getValue(columnId)?.includes(filterValue)
41
+ return row.getValue<unknown[]>(columnId)?.includes(filterValue)
40
42
  }
41
43
 
42
44
  arrIncludes.autoRemove = (val: any) => testFalsey(val) || !val?.length
@@ -46,7 +48,9 @@ const arrIncludesAll: FilterFn<any> = (
46
48
  columnId: string,
47
49
  filterValue: unknown[]
48
50
  ) => {
49
- return !filterValue.some(val => !row.getValue(columnId)?.includes(val))
51
+ return !filterValue.some(
52
+ val => !row.getValue<unknown[]>(columnId)?.includes(val)
53
+ )
50
54
  }
51
55
 
52
56
  arrIncludesAll.autoRemove = (val: any) => testFalsey(val) || !val?.length
@@ -56,7 +60,9 @@ const arrIncludesSome: FilterFn<any> = (
56
60
  columnId: string,
57
61
  filterValue: unknown[]
58
62
  ) => {
59
- return filterValue.some(val => row.getValue(columnId)?.includes(val))
63
+ return filterValue.some(val =>
64
+ row.getValue<unknown[]>(columnId)?.includes(val)
65
+ )
60
66
  }
61
67
 
62
68
  arrIncludesSome.autoRemove = (val: any) => testFalsey(val) || !val?.length
@@ -84,7 +90,7 @@ const inNumberRange: FilterFn<any> = (
84
90
  ) => {
85
91
  let [min, max] = filterValue
86
92
 
87
- const rowValue = row.getValue(columnId)
93
+ const rowValue = row.getValue<number>(columnId)
88
94
  return rowValue >= min && rowValue <= max
89
95
  }
90
96
 
package/src/types.ts CHANGED
@@ -77,10 +77,14 @@ import { CoreRow } from './core/row'
77
77
  import { PartialKeys } from './utils'
78
78
  import { CoreCell } from './core/cell'
79
79
 
80
+ export interface TableMeta {}
81
+ export interface ColumnMeta {}
82
+ export interface FilterMeta {}
83
+
80
84
  export type Updater<T> = T | ((old: T) => T)
81
85
  export type OnChangeFn<T> = (updaterOrValue: Updater<T>) => void
82
86
 
83
- export type RowData = object | any[]
87
+ export type RowData = unknown | object | any[]
84
88
 
85
89
  export type TableGenerics = {
86
90
  Row?: any
@@ -155,34 +159,33 @@ export type Row<TData extends RowData> = CoreRow<TData> &
155
159
  RowSelectionRow &
156
160
  ExpandedRow
157
161
 
158
- export type RowValues = {
159
- [key: string]: any
160
- }
161
-
162
162
  export type RowModel<TData extends RowData> = {
163
163
  rows: Row<TData>[]
164
164
  flatRows: Row<TData>[]
165
165
  rowsById: Record<string, Row<TData>>
166
166
  }
167
167
 
168
- export type AccessorFn<TData extends RowData> = (
168
+ export type AccessorFn<TData extends RowData, TValue = unknown> = (
169
169
  originalRow: TData,
170
170
  index: number
171
- ) => any
171
+ ) => TValue
172
172
 
173
173
  export type ColumnDefTemplate<TProps extends object> =
174
174
  | string
175
175
  | ((props: TProps) => any)
176
176
 
177
- export type ColumnDef<TData extends RowData> = CoreColumnDef<TData> &
177
+ export type ColumnDef<
178
+ TData extends RowData,
179
+ TValue extends any = unknown
180
+ > = CoreColumnDef<TData, TValue> &
178
181
  VisibilityColumnDef &
179
182
  ColumnPinningColumnDef &
180
183
  FiltersColumnDef<TData> &
181
184
  SortingColumnDef<TData> &
182
- GroupingColumnDef<TData> &
185
+ GroupingColumnDef<TData, TValue> &
183
186
  ColumnSizingColumnDef
184
187
 
185
- export type Column<TData extends RowData> = CoreColumn<TData> &
188
+ export type Column<TData extends RowData, TValue> = CoreColumn<TData, TValue> &
186
189
  ColumnVisibilityColumn &
187
190
  ColumnPinningColumn &
188
191
  FiltersColumn<TData> &
@@ -190,9 +193,10 @@ export type Column<TData extends RowData> = CoreColumn<TData> &
190
193
  GroupingColumn<TData> &
191
194
  ColumnSizingColumn
192
195
 
193
- export type Cell<TData extends RowData> = CoreCell<TData> & GroupingCell
196
+ export type Cell<TData extends RowData, TValue> = CoreCell<TData, TValue> &
197
+ GroupingCell
194
198
 
195
- export type Header<TData extends RowData> = CoreHeader<TData> &
199
+ export type Header<TData extends RowData, TValue> = CoreHeader<TData, TValue> &
196
200
  ColumnSizingHeader
197
201
 
198
202
  export type HeaderGroup<TData extends RowData> = CoreHeaderGroup<TData>
@@ -40,7 +40,7 @@ export function getCoreRowModel<TData extends RowData>(): (
40
40
  const row = createRow(
41
41
  table,
42
42
  table._getRowId(originalRows[i]!, i, parent),
43
- originalRows[i],
43
+ originalRows[i]!,
44
44
  i,
45
45
  depth
46
46
  )
@@ -18,7 +18,7 @@ export function getFacetedMinMaxValues<TData extends RowData>(): (
18
18
  let facetedMinMaxValues: [any, any] = [firstValue, firstValue]
19
19
 
20
20
  for (let i = 0; i < facetedRowModel.flatRows.length; i++) {
21
- const value = facetedRowModel.flatRows[i]?.getValue(columnId)
21
+ const value = facetedRowModel.flatRows[i]!.getValue<number>(columnId)
22
22
 
23
23
  if (value < facetedMinMaxValues[0]) {
24
24
  facetedMinMaxValues[0] = value
@@ -55,7 +55,13 @@ export function getGroupedRowModel<TData extends RowData>(): (
55
55
  ? flattenBy(groupedRows, row => row.subRows)
56
56
  : groupedRows
57
57
 
58
- const row = createRow(table, id, undefined, index, depth)
58
+ const row = createRow(
59
+ table,
60
+ id,
61
+ leafRows[0]!.original,
62
+ index,
63
+ depth
64
+ )
59
65
 
60
66
  Object.assign(row, {
61
67
  groupingColumnId: columnId,
package/src/utils.ts CHANGED
@@ -27,9 +27,12 @@ export function noop() {
27
27
  //
28
28
  }
29
29
 
30
- export function makeStateUpdater(key: keyof TableState, table: unknown) {
31
- return (updater: Updater<any>) => {
32
- ;(table as any).setState(<TTableState>(old: TTableState) => {
30
+ export function makeStateUpdater<K extends keyof TableState>(
31
+ key: K,
32
+ instance: unknown
33
+ ) {
34
+ return (updater: Updater<TableState[K]>) => {
35
+ ;(instance as any).setState(<TTableState>(old: TTableState) => {
33
36
  return {
34
37
  ...old,
35
38
  [key]: functionalUpdate(updater, (old as any)[key]),