@tanstack/table-core 8.0.0-alpha.64 → 8.0.0-alpha.68

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 (149) hide show
  1. package/build/cjs/aggregationFns.js +25 -37
  2. package/build/cjs/aggregationFns.js.map +1 -1
  3. package/build/cjs/core.js +167 -47
  4. package/build/cjs/core.js.map +1 -1
  5. package/build/cjs/createTable.js +24 -40
  6. package/build/cjs/createTable.js.map +1 -1
  7. package/build/cjs/features/Cells.js +29 -35
  8. package/build/cjs/features/Cells.js.map +1 -1
  9. package/build/cjs/features/ColumnSizing.js +126 -218
  10. package/build/cjs/features/ColumnSizing.js.map +1 -1
  11. package/build/cjs/features/Columns.js +59 -86
  12. package/build/cjs/features/Columns.js.map +1 -1
  13. package/build/cjs/features/Expanding.js +78 -125
  14. package/build/cjs/features/Expanding.js.map +1 -1
  15. package/build/cjs/features/Filters.js +143 -218
  16. package/build/cjs/features/Filters.js.map +1 -1
  17. package/build/cjs/features/Grouping.js +70 -116
  18. package/build/cjs/features/Grouping.js.map +1 -1
  19. package/build/cjs/features/Headers.js +125 -205
  20. package/build/cjs/features/Headers.js.map +1 -1
  21. package/build/cjs/features/Ordering.js +31 -43
  22. package/build/cjs/features/Ordering.js.map +1 -1
  23. package/build/cjs/features/Pagination.js +64 -72
  24. package/build/cjs/features/Pagination.js.map +1 -1
  25. package/build/cjs/features/Pinning.js +96 -177
  26. package/build/cjs/features/Pinning.js.map +1 -1
  27. package/build/cjs/features/RowSelection.js +134 -205
  28. package/build/cjs/features/RowSelection.js.map +1 -1
  29. package/build/cjs/features/Rows.js +32 -22
  30. package/build/cjs/features/Rows.js.map +1 -1
  31. package/build/cjs/features/Sorting.js +62 -131
  32. package/build/cjs/features/Sorting.js.map +1 -1
  33. package/build/cjs/features/Visibility.js +53 -120
  34. package/build/cjs/features/Visibility.js.map +1 -1
  35. package/build/cjs/filterFns.js +52 -133
  36. package/build/cjs/filterFns.js.map +1 -1
  37. package/build/cjs/index.js +13 -13
  38. package/build/cjs/sortingFns.js +21 -21
  39. package/build/cjs/sortingFns.js.map +1 -1
  40. package/build/cjs/utils/filterRowsUtils.js +56 -41
  41. package/build/cjs/utils/filterRowsUtils.js.map +1 -1
  42. package/build/cjs/utils/getCoreRowModel.js +98 -0
  43. package/build/cjs/utils/getCoreRowModel.js.map +1 -0
  44. package/build/cjs/utils/getExpandedRowModel.js +18 -22
  45. package/build/cjs/utils/getExpandedRowModel.js.map +1 -1
  46. package/build/cjs/utils/getFacetedMinMaxValues.js +48 -0
  47. package/build/cjs/utils/getFacetedMinMaxValues.js.map +1 -0
  48. package/build/cjs/utils/getFacetedRowModel.js +50 -0
  49. package/build/cjs/utils/getFacetedRowModel.js.map +1 -0
  50. package/build/cjs/utils/getFacetedUniqueValues.js +48 -0
  51. package/build/cjs/utils/getFacetedUniqueValues.js.map +1 -0
  52. package/build/cjs/utils/getFilteredRowModel.js +130 -0
  53. package/build/cjs/utils/getFilteredRowModel.js.map +1 -0
  54. package/build/cjs/utils/getGroupedRowModel.js +126 -136
  55. package/build/cjs/utils/getGroupedRowModel.js.map +1 -1
  56. package/build/cjs/utils/getPaginationRowModel.js +39 -39
  57. package/build/cjs/utils/getPaginationRowModel.js.map +1 -1
  58. package/build/cjs/utils/getSortedRowModel.js +112 -0
  59. package/build/cjs/utils/getSortedRowModel.js.map +1 -0
  60. package/build/cjs/utils.js +36 -211
  61. package/build/cjs/utils.js.map +1 -1
  62. package/build/esm/index.js +1970 -2956
  63. package/build/esm/index.js.map +1 -1
  64. package/build/stats-html.html +1 -1
  65. package/build/stats-react.json +390 -482
  66. package/build/types/core.d.ts +3 -5
  67. package/build/types/features/Cells.d.ts +1 -1
  68. package/build/types/features/ColumnSizing.d.ts +2 -13
  69. package/build/types/features/Columns.d.ts +1 -1
  70. package/build/types/features/Expanding.d.ts +1 -6
  71. package/build/types/features/Filters.d.ts +42 -30
  72. package/build/types/features/Grouping.d.ts +4 -10
  73. package/build/types/features/Pinning.d.ts +0 -4
  74. package/build/types/features/RowSelection.d.ts +1 -7
  75. package/build/types/features/Rows.d.ts +4 -3
  76. package/build/types/features/Sorting.d.ts +3 -14
  77. package/build/types/features/Visibility.d.ts +0 -4
  78. package/build/types/filterFns.d.ts +10 -52
  79. package/build/types/index.d.ts +6 -5
  80. package/build/types/types.d.ts +5 -17
  81. package/build/types/utils/filterRowsUtils.d.ts +3 -2
  82. package/build/types/utils/getCoreRowModel.d.ts +2 -0
  83. package/build/types/utils/getFacetedMinMaxValues.d.ts +2 -0
  84. package/build/types/utils/getFacetedRowModel.d.ts +2 -0
  85. package/build/types/utils/getFacetedUniqueValues.d.ts +2 -0
  86. package/build/types/utils/{getCoreRowModelSync.d.ts → getFilteredRowModel.d.ts} +1 -1
  87. package/build/types/utils/getGroupedRowModel.d.ts +1 -1
  88. package/build/types/utils/getSortedRowModel.d.ts +2 -0
  89. package/build/types/utils.d.ts +2 -18
  90. package/build/umd/index.development.js +1948 -2935
  91. package/build/umd/index.development.js.map +1 -1
  92. package/build/umd/index.production.js +1 -1
  93. package/build/umd/index.production.js.map +1 -1
  94. package/package.json +2 -1
  95. package/src/core.ts +197 -46
  96. package/src/features/Cells.ts +10 -12
  97. package/src/features/ColumnSizing.ts +72 -129
  98. package/src/features/Columns.ts +16 -15
  99. package/src/features/Expanding.ts +58 -105
  100. package/src/features/Filters.ts +223 -226
  101. package/src/features/Grouping.ts +51 -79
  102. package/src/features/Headers.ts +18 -40
  103. package/src/features/Ordering.ts +1 -1
  104. package/src/features/Pagination.ts +1 -1
  105. package/src/features/Pinning.ts +73 -92
  106. package/src/features/RowSelection.ts +71 -120
  107. package/src/features/Rows.ts +21 -6
  108. package/src/features/Sorting.ts +39 -99
  109. package/src/features/Visibility.ts +21 -50
  110. package/src/filterFns.ts +74 -147
  111. package/src/index.ts +12 -5
  112. package/src/sortingFns.ts +11 -11
  113. package/src/types.ts +5 -18
  114. package/src/utils/filterRowsUtils.ts +59 -56
  115. package/src/utils/{getCoreRowModelSync.ts → getCoreRowModel.ts} +3 -9
  116. package/src/utils/getExpandedRowModel.ts +2 -2
  117. package/src/utils/getFacetedMinMaxValues.ts +37 -0
  118. package/src/utils/getFacetedRowModel.ts +50 -0
  119. package/src/utils/getFacetedUniqueValues.ts +37 -0
  120. package/src/utils/getFilteredRowModel.ts +150 -0
  121. package/src/utils/getGroupedRowModel.ts +53 -62
  122. package/src/utils/getPaginationRowModel.ts +1 -1
  123. package/src/utils/{getSortedRowModelSync.ts → getSortedRowModel.ts} +7 -7
  124. package/src/utils.ts +29 -239
  125. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js +0 -112
  126. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js.map +0 -1
  127. package/build/cjs/utils/getColumnFilteredRowModelSync.js +0 -115
  128. package/build/cjs/utils/getColumnFilteredRowModelSync.js.map +0 -1
  129. package/build/cjs/utils/getCoreRowModelAsync.js +0 -125
  130. package/build/cjs/utils/getCoreRowModelAsync.js.map +0 -1
  131. package/build/cjs/utils/getCoreRowModelSync.js +0 -102
  132. package/build/cjs/utils/getCoreRowModelSync.js.map +0 -1
  133. package/build/cjs/utils/getGlobalFilteredRowModelSync.js +0 -91
  134. package/build/cjs/utils/getGlobalFilteredRowModelSync.js.map +0 -1
  135. package/build/cjs/utils/getSortedRowModelSync.js +0 -118
  136. package/build/cjs/utils/getSortedRowModelSync.js.map +0 -1
  137. package/build/types/utils/getColumnFilteredRowModelAsync.d.ts +0 -4
  138. package/build/types/utils/getColumnFilteredRowModelSync.d.ts +0 -2
  139. package/build/types/utils/getCoreRowModelAsync.d.ts +0 -4
  140. package/build/types/utils/getGlobalFilteredRowModelAsync.d.ts +0 -4
  141. package/build/types/utils/getGlobalFilteredRowModelSync.d.ts +0 -2
  142. package/build/types/utils/getSortedRowModelAsync.d.ts +0 -13
  143. package/build/types/utils/getSortedRowModelSync.d.ts +0 -2
  144. package/src/utils/getColumnFilteredRowModelAsync.ts +0 -118
  145. package/src/utils/getColumnFilteredRowModelSync.ts +0 -102
  146. package/src/utils/getCoreRowModelAsync.ts +0 -104
  147. package/src/utils/getGlobalFilteredRowModelAsync.ts +0 -96
  148. package/src/utils/getGlobalFilteredRowModelSync.ts +0 -79
  149. package/src/utils/getSortedRowModelAsync.ts +0 -200
@@ -20,8 +20,8 @@ import {
20
20
  export type FiltersTableState = {
21
21
  columnFilters: ColumnFiltersState
22
22
  globalFilter: any
23
- columnFiltersProgress: number
24
- globalFilterProgress: number
23
+ // filtersProgress: number
24
+ // facetProgress: Record<string, number>
25
25
  }
26
26
 
27
27
  export type ColumnFiltersState = ColumnFilter[]
@@ -31,17 +31,25 @@ export type ColumnFilter = {
31
31
  value: unknown
32
32
  }
33
33
 
34
- /*
35
- A filter function is any function that takes an array of rows and returns an array of rows. Because filter functions can be used for both column and global filters, they are passed an array of columnIds to filter on.
36
- */
34
+ export type ResolvedColumnFilter<TGenerics extends TableGenerics> = {
35
+ id: string
36
+ resolvedValue: unknown
37
+ filterFn: FilterFn<TGenerics>
38
+ }
37
39
 
38
40
  export type FilterFn<TGenerics extends TableGenerics> = {
39
- (rows: Row<TGenerics>[], columnIds: string[], filterValue: any): any
41
+ (row: Row<TGenerics>, columnId: string, filterValue: any): boolean
42
+ resolveFilterValue?: TransformFilterValueFn<TGenerics>
40
43
  autoRemove?: ColumnFilterAutoRemoveTestFn<TGenerics>
41
44
  }
42
45
 
46
+ export type TransformFilterValueFn<TGenerics extends TableGenerics> = (
47
+ value: any,
48
+ column?: Column<TGenerics>
49
+ ) => unknown
50
+
43
51
  export type ColumnFilterAutoRemoveTestFn<TGenerics extends TableGenerics> = (
44
- value: unknown,
52
+ value: any,
45
53
  column?: Column<TGenerics>
46
54
  ) => boolean
47
55
 
@@ -60,72 +68,87 @@ export type FiltersColumnDef<TGenerics extends TableGenerics> = {
60
68
  filterFn?: FilterFnOption<Overwrite<TGenerics, { Value: any }>>
61
69
  enableColumnFilter?: boolean
62
70
  enableGlobalFilter?: boolean
71
+ enableFaceting?: boolean
63
72
  }
64
73
 
65
74
  export type FiltersColumn<TGenerics extends TableGenerics> = {
66
75
  filterFn: FilterFnOption<Overwrite<TGenerics, { Value: any }>>
67
- getCanColumnFilter: () => boolean
76
+ getAutoFilterFn: () => FilterFn<TGenerics> | undefined
77
+ getFilterFn: () => FilterFn<TGenerics> | undefined
78
+ setFilterValue: (updater: Updater<any>) => void
79
+ getCanFilter: () => boolean
68
80
  getCanGlobalFilter: () => boolean
69
- getColumnFilterIndex: () => number
70
- getColumnIsFiltered: () => boolean
71
- getColumnFilterValue: () => unknown
72
- setColumnFilterValue: (updater: Updater<any>) => void
73
- getPreFilteredRows: () => Row<TGenerics>[] | undefined
74
- getPreFilteredUniqueValues: () => Map<any, number>
75
- getPreFilteredMinMaxValues: () => [any, any]
81
+ getFacetedRowModel: () => RowModel<TGenerics>
82
+ _getFacetedRowModel?: () => RowModel<TGenerics>
83
+ getIsFiltered: () => boolean
84
+ getFilterValue: () => unknown
85
+ getFilterIndex: () => number
86
+ getFacetedUniqueValues: () => Map<any, number>
87
+ _getFacetedUniqueValues?: () => Map<any, number>
88
+ getFacetedMinMaxValues: () => [any, any]
89
+ _getFacetedMinMaxValues?: () => [any, any]
90
+ }
91
+
92
+ export type FiltersRow<TGenerics extends TableGenerics> = {
93
+ columnFilterMap: Record<string, boolean>
94
+ subRowsByFacetId: Record<string, Row<TGenerics>[]>
76
95
  }
77
96
 
78
97
  export type FiltersOptions<TGenerics extends TableGenerics> = {
98
+ enableFilters?: boolean
99
+ manualFiltering?: boolean
79
100
  filterFromLeafRows?: boolean
80
101
  filterFns?: TGenerics['FilterFns']
102
+ getFilteredRowModel?: (
103
+ instance: TableInstance<TGenerics>
104
+ ) => () => RowModel<TGenerics>
81
105
 
82
106
  // Column
83
- manualColumnFiltering?: boolean
84
107
  onColumnFiltersChange?: OnChangeFn<ColumnFiltersState>
85
108
  enableColumnFilters?: boolean
86
- getColumnFilteredRowModel?: (
87
- instance: TableInstance<TGenerics>
88
- ) => () => RowModel<TGenerics>
89
109
 
90
110
  // Global
91
- manualGlobalFiltering?: boolean
92
111
  globalFilterFn?: FilterFnOption<TGenerics>
93
112
  onGlobalFilterChange?: OnChangeFn<any>
94
113
  enableGlobalFilter?: boolean
95
- getGlobalFilteredRowModel?: (
96
- instance: TableInstance<TGenerics>
97
- ) => () => RowModel<TGenerics>
98
114
  getColumnCanGlobalFilter?: (column: Column<TGenerics>) => boolean
115
+
116
+ // Faceting
117
+ getFacetedRowModel?: (
118
+ instance: TableInstance<TGenerics>,
119
+ columnId: string
120
+ ) => () => RowModel<TGenerics>
121
+ getFacetedUniqueValues?: (
122
+ instance: TableInstance<TGenerics>,
123
+ columnId: string
124
+ ) => () => Map<any, number>
125
+ getFacetedMinMaxValues?: (
126
+ instance: TableInstance<TGenerics>,
127
+ columnId: string
128
+ ) => () => [number, number]
99
129
  }
100
130
 
101
131
  export type FiltersInstance<TGenerics extends TableGenerics> = {
102
- getColumnAutoFilterFn: (columnId: string) => FilterFn<TGenerics> | undefined
103
-
104
- getColumnFilterFn: (columnId: string) => FilterFn<TGenerics> | undefined
105
-
106
132
  setColumnFilters: (updater: Updater<ColumnFiltersState>) => void
107
- setColumnFilterValue: (columnId: string, updater: Updater<any>) => void
108
- resetColumnFilters: () => void
109
- getColumnCanColumnFilter: (columnId: string) => boolean
110
133
 
111
- getColumnIsFiltered: (columnId: string) => boolean
112
- getColumnFilterValue: (columnId: string) => unknown
113
- getColumnFilterIndex: (columnId: string) => number
134
+ resetColumnFilters: () => void
114
135
 
115
136
  // Column Filters
116
- getPreColumnFilteredRowModel: () => RowModel<TGenerics>
117
- getColumnFilteredRowModel: () => RowModel<TGenerics>
118
- _getColumnFilteredRowModel?: () => RowModel<TGenerics>
137
+ getPreFilteredRowModel: () => RowModel<TGenerics>
138
+ getFilteredRowModel: () => RowModel<TGenerics>
139
+ _getFilteredRowModel?: () => RowModel<TGenerics>
119
140
 
120
141
  // Global Filters
121
142
  setGlobalFilter: (updater: Updater<any>) => void
122
143
  resetGlobalFilter: () => void
123
144
  getGlobalAutoFilterFn: () => FilterFn<TGenerics> | undefined
124
145
  getGlobalFilterFn: () => FilterFn<TGenerics> | undefined
125
- getColumnCanGlobalFilter: (columnId: string) => boolean
126
- getPreGlobalFilteredRowModel: () => RowModel<TGenerics>
127
- getGlobalFilteredRowModel: () => RowModel<TGenerics>
128
- _getGlobalFilteredRowModel?: () => RowModel<TGenerics>
146
+ getGlobalFacetedRowModel: () => RowModel<TGenerics>
147
+ _getGlobalFacetedRowModel?: () => RowModel<TGenerics>
148
+ getGlobalFacetedUniqueValues: () => Map<any, number>
149
+ _getGlobalFacetedUniqueValues?: () => Map<any, number>
150
+ getGlobalFacetedMinMaxValues: () => [number, number]
151
+ _getGlobalFacetedMinMaxValues?: () => [number, number]
129
152
  }
130
153
 
131
154
  //
@@ -143,8 +166,8 @@ export const Filters: TableFeature = {
143
166
  return {
144
167
  columnFilters: [],
145
168
  globalFilter: undefined,
146
- columnFiltersProgress: 1,
147
- globalFilterProgress: 1,
169
+ // filtersProgress: 1,
170
+ // facetProgress: {},
148
171
  ...state,
149
172
  }
150
173
  },
@@ -155,12 +178,13 @@ export const Filters: TableFeature = {
155
178
  return {
156
179
  onColumnFiltersChange: makeStateUpdater('columnFilters', instance),
157
180
  onGlobalFilterChange: makeStateUpdater('globalFilter', instance),
158
- filterFromLeafRows: true,
181
+ filterFromLeafRows: false,
159
182
  globalFilterFn: 'auto',
160
183
  getColumnCanGlobalFilter: column => {
161
184
  const value = instance
162
185
  .getCoreRowModel()
163
- .flatRows[0]?.getAllCellsByColumnId()[column.id]?.value
186
+ .flatRows[0]?.getAllCellsByColumnId()
187
+ [column.id]?.getValue()
164
188
 
165
189
  return typeof value === 'string'
166
190
  },
@@ -171,76 +195,19 @@ export const Filters: TableFeature = {
171
195
  column: Column<TGenerics>,
172
196
  instance: TableInstance<TGenerics>
173
197
  ): FiltersColumn<TGenerics> => {
174
- const getFacetInfo = memo(
175
- () => [column.getPreFilteredRows()],
176
- (rows = []) => {
177
- let preFilteredUniqueValues = new Map<any, number>()
178
-
179
- let preFilteredMinMaxValues: [any, any] = [
180
- rows[0]?.values[column.id] ?? null,
181
- rows[0]?.values[column.id] ?? null,
182
- ]
183
-
184
- for (let i = 0; i < rows.length; i++) {
185
- const value = rows[i]?.values[column.id]
186
-
187
- if (preFilteredUniqueValues.has(value)) {
188
- preFilteredUniqueValues.set(
189
- value,
190
- (preFilteredUniqueValues.get(value) ?? 0) + 1
191
- )
192
- } else {
193
- preFilteredUniqueValues.set(value, 1)
194
- }
195
-
196
- if (value < preFilteredMinMaxValues[0]) {
197
- preFilteredMinMaxValues[0] = value
198
- } else if (value > preFilteredMinMaxValues[1]) {
199
- preFilteredMinMaxValues[1] = value
200
- }
201
- }
202
-
203
- return {
204
- preFilteredUniqueValues,
205
- preFilteredMinMaxValues,
206
- }
207
- },
208
- {
209
- key: 'column.getFacetInfo',
210
- debug: () => instance.options.debugAll ?? instance.options.debugColumns,
211
- }
212
- )
213
-
214
198
  return {
215
199
  filterFn: column.filterFn,
216
- getCanColumnFilter: () => instance.getColumnCanColumnFilter(column.id),
217
- getCanGlobalFilter: () => instance.getColumnCanGlobalFilter(column.id),
218
- getColumnFilterIndex: () => instance.getColumnFilterIndex(column.id),
219
- getColumnIsFiltered: () => instance.getColumnIsFiltered(column.id),
220
- getColumnFilterValue: () => instance.getColumnFilterValue(column.id),
221
- setColumnFilterValue: val =>
222
- instance.setColumnFilterValue(column.id, val),
223
- getPreFilteredUniqueValues: () => getFacetInfo().preFilteredUniqueValues,
224
- getPreFilteredMinMaxValues: () => getFacetInfo().preFilteredMinMaxValues,
225
- getPreFilteredRows: () => undefined,
226
- }
227
- },
228
-
229
- createInstance: <TGenerics extends TableGenerics>(
230
- instance: TableInstance<TGenerics>
231
- ): FiltersInstance<TGenerics> => {
232
- return {
233
- getColumnAutoFilterFn: columnId => {
200
+ getAutoFilterFn: () => {
234
201
  const firstRow = instance.getCoreRowModel().flatRows[0]
235
202
 
236
- const value = firstRow?.values[columnId]
203
+ const value = firstRow?.getValue(column.id)
237
204
 
238
205
  if (typeof value === 'string') {
239
206
  return filterFns.includesString
240
207
  }
241
208
 
242
209
  if (typeof value === 'number') {
243
- return filterFns.betweenNumberRange
210
+ return filterFns.inNumberRange
244
211
  }
245
212
 
246
213
  if (value !== null && typeof value === 'object') {
@@ -253,21 +220,13 @@ export const Filters: TableFeature = {
253
220
 
254
221
  return filterFns.weakEquals
255
222
  },
256
- getGlobalAutoFilterFn: () => {
257
- return filterFns.includesString
258
- },
259
- getColumnFilterFn: columnId => {
260
- const column = instance.getColumn(columnId)
223
+ getFilterFn: () => {
261
224
  const userFilterFns = instance.options.filterFns
262
225
 
263
- if (!column) {
264
- throw new Error()
265
- }
266
-
267
226
  return isFunction(column.filterFn)
268
227
  ? column.filterFn
269
228
  : column.filterFn === 'auto'
270
- ? instance.getColumnAutoFilterFn(columnId)
229
+ ? column.getAutoFilterFn()
271
230
  : (userFilterFns as Record<string, any>)?.[
272
231
  column.filterFn as string
273
232
  ] ??
@@ -275,111 +234,38 @@ export const Filters: TableFeature = {
275
234
  column.filterFn as BuiltInFilterFn
276
235
  ] as FilterFn<TGenerics>)
277
236
  },
278
-
279
- getGlobalFilterFn: () => {
280
- const { filterFns: userFilterFns, globalFilterFn: globalFilterFn } =
281
- instance.options
282
-
283
- debugger
284
-
285
- return isFunction(globalFilterFn)
286
- ? globalFilterFn
287
- : globalFilterFn === 'auto'
288
- ? instance.getGlobalAutoFilterFn()
289
- : (userFilterFns as Record<string, any>)?.[
290
- globalFilterFn as string
291
- ] ??
292
- (filterFns[
293
- globalFilterFn as BuiltInFilterFn
294
- ] as FilterFn<TGenerics>)
295
- },
296
-
297
- setColumnFilters: (updater: Updater<ColumnFiltersState>) => {
298
- const leafColumns = instance.getAllLeafColumns()
299
-
300
- const updateFn = (old: ColumnFiltersState) => {
301
- return functionalUpdate(updater, old)?.filter(filter => {
302
- const column = leafColumns.find(d => d.id === filter.id)
303
-
304
- if (column) {
305
- const filterFn = instance.getColumnFilterFn(column.id)
306
-
307
- if (shouldAutoRemoveFilter(filterFn, filter.value, column)) {
308
- return false
309
- }
310
- }
311
-
312
- return true
313
- })
314
- }
315
-
316
- instance.options.onColumnFiltersChange?.(updateFn)
317
- },
318
-
319
- setGlobalFilter: updater => {
320
- instance.options.onGlobalFilterChange?.(updater)
321
- },
322
-
323
- resetGlobalFilter: () => {
324
- instance.setGlobalFilter(instance.initialState.globalFilter)
325
- },
326
-
327
- getColumnCanColumnFilter: columnId => {
328
- const column = instance.getColumn(columnId)
329
-
330
- if (!column) {
331
- throw new Error()
332
- }
333
-
237
+ getCanFilter: () => {
334
238
  return (
335
239
  (column.enableColumnFilter ?? true) &&
336
240
  (instance.options.enableColumnFilters ?? true) &&
241
+ (instance.options.enableFilters ?? true) &&
337
242
  !!column.accessorFn
338
243
  )
339
244
  },
340
245
 
341
- getColumnCanGlobalFilter: columnId => {
342
- const column = instance.getColumn(columnId)
343
-
344
- if (!column) {
345
- throw new Error()
346
- }
347
-
246
+ getCanGlobalFilter: () => {
348
247
  return (
349
248
  (column.enableGlobalFilter ?? true) &&
350
249
  (instance.options.enableGlobalFilter ?? true) &&
250
+ (instance.options.enableFilters ?? true) &&
351
251
  (instance.options.getColumnCanGlobalFilter?.(column) ?? true) &&
352
252
  !!column.accessorFn
353
253
  )
354
254
  },
355
255
 
356
- getColumnIsFiltered: columnId =>
357
- instance.getColumnFilterIndex(columnId) > -1,
256
+ getIsFiltered: () => column.getFilterIndex() > -1,
358
257
 
359
- getColumnFilterValue: columnId =>
360
- instance.getState().columnFilters?.find(d => d.id === columnId)?.value,
258
+ getFilterValue: () =>
259
+ instance.getState().columnFilters?.find(d => d.id === column.id)?.value,
361
260
 
362
- getColumnFilterIndex: columnId =>
363
- instance.getState().columnFilters?.findIndex(d => d.id === columnId) ??
261
+ getFilterIndex: () =>
262
+ instance.getState().columnFilters?.findIndex(d => d.id === column.id) ??
364
263
  -1,
365
264
 
366
- setColumnFilterValue: (columnId, value) => {
367
- if (!columnId) return
368
-
265
+ setFilterValue: value => {
369
266
  instance.setColumnFilters(old => {
370
- const column = instance.getColumn(columnId)
371
-
372
- if (!column) {
373
- if (process.env.NODE_ENV !== 'production') {
374
- console.warn(
375
- `Table: Could not find a column with id: ${columnId}`
376
- )
377
- }
378
- throw new Error()
379
- }
380
-
381
- const filterFn = instance.getColumnFilterFn(column.id)
382
- const previousfilter = old?.find(d => d.id === columnId)
267
+ const filterFn = column.getFilterFn()
268
+ const previousfilter = old?.find(d => d.id === column.id)
383
269
 
384
270
  const newFilter = functionalUpdate(
385
271
  value,
@@ -394,15 +280,15 @@ export const Filters: TableFeature = {
394
280
  column
395
281
  )
396
282
  ) {
397
- return old?.filter(d => d.id !== columnId) ?? []
283
+ return old?.filter(d => d.id !== column.id) ?? []
398
284
  }
399
285
 
400
- const newFilterObj = { id: columnId, value: newFilter }
286
+ const newFilterObj = { id: column.id, value: newFilter }
401
287
 
402
288
  if (previousfilter) {
403
289
  return (
404
290
  old?.map(d => {
405
- if (d.id === columnId) {
291
+ if (d.id === column.id) {
406
292
  return newFilterObj
407
293
  }
408
294
  return d
@@ -417,48 +303,159 @@ export const Filters: TableFeature = {
417
303
  return [newFilterObj]
418
304
  })
419
305
  },
306
+ _getFacetedRowModel:
307
+ instance.options.getFacetedRowModel &&
308
+ instance.options.getFacetedRowModel(instance, column.id),
309
+ getFacetedRowModel: () => {
310
+ if (!column._getFacetedRowModel) {
311
+ return instance.getPreFilteredRowModel()
312
+ }
313
+
314
+ return column._getFacetedRowModel()
315
+ },
316
+ _getFacetedUniqueValues:
317
+ instance.options.getFacetedUniqueValues &&
318
+ instance.options.getFacetedUniqueValues(instance, column.id),
319
+ getFacetedUniqueValues: () => {
320
+ if (!column._getFacetedUniqueValues) {
321
+ return new Map()
322
+ }
323
+
324
+ return column._getFacetedUniqueValues()
325
+ },
326
+ _getFacetedMinMaxValues:
327
+ instance.options.getFacetedMinMaxValues &&
328
+ instance.options.getFacetedMinMaxValues(instance, column.id),
329
+ getFacetedMinMaxValues: () => {
330
+ if (!column._getFacetedMinMaxValues) {
331
+ return [NaN, NaN]
332
+ }
333
+
334
+ return column._getFacetedMinMaxValues()
335
+ },
336
+ // () => [column.getFacetedRowModel()],
337
+ // facetedRowModel => getRowModelMinMaxValues(facetedRowModel, column.id),
338
+ }
339
+ },
340
+
341
+ createRow: <TGenerics extends TableGenerics>(
342
+ row: Row<TGenerics>,
343
+ instance: TableInstance<TGenerics>
344
+ ): FiltersRow<TGenerics> => {
345
+ return {
346
+ columnFilterMap: {},
347
+ subRowsByFacetId: {},
348
+ }
349
+ },
350
+
351
+ createInstance: <TGenerics extends TableGenerics>(
352
+ instance: TableInstance<TGenerics>
353
+ ): FiltersInstance<TGenerics> => {
354
+ return {
355
+ getGlobalAutoFilterFn: () => {
356
+ return filterFns.includesString
357
+ },
358
+
359
+ getGlobalFilterFn: () => {
360
+ const { filterFns: userFilterFns, globalFilterFn: globalFilterFn } =
361
+ instance.options
362
+
363
+ return isFunction(globalFilterFn)
364
+ ? globalFilterFn
365
+ : globalFilterFn === 'auto'
366
+ ? instance.getGlobalAutoFilterFn()
367
+ : (userFilterFns as Record<string, any>)?.[
368
+ globalFilterFn as string
369
+ ] ??
370
+ (filterFns[
371
+ globalFilterFn as BuiltInFilterFn
372
+ ] as FilterFn<TGenerics>)
373
+ },
374
+
375
+ setColumnFilters: (updater: Updater<ColumnFiltersState>) => {
376
+ const leafColumns = instance.getAllLeafColumns()
377
+
378
+ const updateFn = (old: ColumnFiltersState) => {
379
+ return functionalUpdate(updater, old)?.filter(filter => {
380
+ const column = leafColumns.find(d => d.id === filter.id)
381
+
382
+ if (column) {
383
+ const filterFn = column.getFilterFn()
384
+
385
+ if (shouldAutoRemoveFilter(filterFn, filter.value, column)) {
386
+ return false
387
+ }
388
+ }
389
+
390
+ return true
391
+ })
392
+ }
393
+
394
+ instance.options.onColumnFiltersChange?.(updateFn)
395
+ },
396
+
397
+ setGlobalFilter: updater => {
398
+ instance.options.onGlobalFilterChange?.(updater)
399
+ },
400
+
401
+ resetGlobalFilter: () => {
402
+ instance.setGlobalFilter(instance.initialState.globalFilter)
403
+ },
420
404
 
421
405
  resetColumnFilters: () => {
422
406
  instance.setColumnFilters(instance.initialState?.columnFilters ?? [])
423
407
  },
424
408
 
425
- getPreColumnFilteredRowModel: () => instance.getCoreRowModel(),
426
- getColumnFilteredRowModel: () => {
409
+ getPreFilteredRowModel: () => instance.getCoreRowModel(),
410
+ _getFilteredRowModel:
411
+ instance.options.getFilteredRowModel &&
412
+ instance.options.getFilteredRowModel(instance),
413
+ getFilteredRowModel: () => {
427
414
  if (
428
- !instance._getColumnFilteredRowModel &&
429
- instance.options.getColumnFilteredRowModel
415
+ instance.options.manualFiltering ||
416
+ !instance._getFilteredRowModel
430
417
  ) {
431
- instance._getColumnFilteredRowModel =
432
- instance.options.getColumnFilteredRowModel(instance)
418
+ return instance.getPreFilteredRowModel()
433
419
  }
434
420
 
421
+ return instance._getFilteredRowModel()
422
+ },
423
+
424
+ _getGlobalFacetedRowModel:
425
+ instance.options.getFacetedRowModel &&
426
+ instance.options.getFacetedRowModel(instance, '__global__'),
427
+
428
+ getGlobalFacetedRowModel: () => {
435
429
  if (
436
- instance.options.manualColumnFiltering ||
437
- !instance._getColumnFilteredRowModel
430
+ instance.options.manualFiltering ||
431
+ !instance._getGlobalFacetedRowModel
438
432
  ) {
439
- return instance.getPreColumnFilteredRowModel()
433
+ return instance.getPreFilteredRowModel()
440
434
  }
441
435
 
442
- return instance._getColumnFilteredRowModel()
436
+ return instance._getGlobalFacetedRowModel()
443
437
  },
444
- getPreGlobalFilteredRowModel: () => instance.getColumnFilteredRowModel(),
445
- getGlobalFilteredRowModel: () => {
446
- if (
447
- !instance._getGlobalFilteredRowModel &&
448
- instance.options.getGlobalFilteredRowModel
449
- ) {
450
- instance._getGlobalFilteredRowModel =
451
- instance.options.getGlobalFilteredRowModel(instance)
438
+
439
+ _getGlobalFacetedUniqueValues:
440
+ instance.options.getFacetedUniqueValues &&
441
+ instance.options.getFacetedUniqueValues(instance, '__global__'),
442
+ getGlobalFacetedUniqueValues: () => {
443
+ if (!instance._getGlobalFacetedUniqueValues) {
444
+ return new Map()
452
445
  }
453
446
 
454
- if (
455
- instance.options.manualGlobalFiltering ||
456
- !instance._getGlobalFilteredRowModel
457
- ) {
458
- return instance.getPreGlobalFilteredRowModel()
447
+ return instance._getGlobalFacetedUniqueValues()
448
+ },
449
+
450
+ _getGlobalFacetedMinMaxValues:
451
+ instance.options.getFacetedMinMaxValues &&
452
+ instance.options.getFacetedMinMaxValues(instance, '__global__'),
453
+ getGlobalFacetedMinMaxValues: () => {
454
+ if (!instance._getGlobalFacetedMinMaxValues) {
455
+ return [NaN, NaN]
459
456
  }
460
457
 
461
- return instance._getGlobalFilteredRowModel()
458
+ return instance._getGlobalFacetedMinMaxValues()
462
459
  },
463
460
  }
464
461
  },