@tanstack/table-core 8.0.0-alpha.65 → 8.0.0-alpha.69

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 (144) 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 -48
  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 +28 -34
  8. package/build/cjs/features/Cells.js.map +1 -1
  9. package/build/cjs/features/ColumnSizing.js +136 -225
  10. package/build/cjs/features/ColumnSizing.js.map +1 -1
  11. package/build/cjs/features/Columns.js +57 -84
  12. package/build/cjs/features/Columns.js.map +1 -1
  13. package/build/cjs/features/Expanding.js +79 -126
  14. package/build/cjs/features/Expanding.js.map +1 -1
  15. package/build/cjs/features/Filters.js +137 -288
  16. package/build/cjs/features/Filters.js.map +1 -1
  17. package/build/cjs/features/Grouping.js +71 -117
  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 +32 -44
  22. package/build/cjs/features/Ordering.js.map +1 -1
  23. package/build/cjs/features/Pagination.js +79 -82
  24. package/build/cjs/features/Pagination.js.map +1 -1
  25. package/build/cjs/features/Pinning.js +99 -178
  26. package/build/cjs/features/Pinning.js.map +1 -1
  27. package/build/cjs/features/RowSelection.js +133 -204
  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 +67 -136
  32. package/build/cjs/features/Sorting.js.map +1 -1
  33. package/build/cjs/features/Visibility.js +56 -118
  34. package/build/cjs/features/Visibility.js.map +1 -1
  35. package/build/cjs/filterFns.js +48 -72
  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 +49 -55
  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 -207
  61. package/build/cjs/utils.js.map +1 -1
  62. package/build/esm/index.js +2024 -2971
  63. package/build/esm/index.js.map +1 -1
  64. package/build/stats-html.html +1 -1
  65. package/build/stats-react.json +421 -481
  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 +4 -15
  69. package/build/types/features/Columns.d.ts +1 -1
  70. package/build/types/features/Expanding.d.ts +2 -7
  71. package/build/types/features/Filters.d.ts +24 -21
  72. package/build/types/features/Grouping.d.ts +5 -11
  73. package/build/types/features/Ordering.d.ts +1 -1
  74. package/build/types/features/Pagination.d.ts +3 -3
  75. package/build/types/features/Pinning.d.ts +1 -5
  76. package/build/types/features/RowSelection.d.ts +2 -8
  77. package/build/types/features/Rows.d.ts +4 -3
  78. package/build/types/features/Sorting.d.ts +5 -15
  79. package/build/types/features/Visibility.d.ts +1 -4
  80. package/build/types/index.d.ts +6 -4
  81. package/build/types/types.d.ts +3 -15
  82. package/build/types/utils/filterRowsUtils.d.ts +3 -3
  83. package/build/types/utils/getCoreRowModel.d.ts +2 -0
  84. package/build/types/utils/getFacetedMinMaxValues.d.ts +2 -0
  85. package/build/types/utils/getFacetedRowModel.d.ts +2 -0
  86. package/build/types/utils/getFacetedUniqueValues.d.ts +2 -0
  87. package/build/types/utils/{getCoreRowModelSync.d.ts → getFilteredRowModel.d.ts} +1 -1
  88. package/build/types/utils/getGroupedRowModel.d.ts +1 -1
  89. package/build/types/utils/getSortedRowModel.d.ts +2 -0
  90. package/build/types/utils.d.ts +1 -17
  91. package/build/umd/index.development.js +2053 -3002
  92. package/build/umd/index.development.js.map +1 -1
  93. package/build/umd/index.production.js +1 -1
  94. package/build/umd/index.production.js.map +1 -1
  95. package/package.json +1 -1
  96. package/src/core.ts +197 -47
  97. package/src/features/Cells.ts +7 -11
  98. package/src/features/ColumnSizing.ts +89 -139
  99. package/src/features/Columns.ts +10 -13
  100. package/src/features/Expanding.ts +62 -107
  101. package/src/features/Filters.ts +201 -308
  102. package/src/features/Grouping.ts +55 -81
  103. package/src/features/Headers.ts +18 -40
  104. package/src/features/Ordering.ts +6 -4
  105. package/src/features/Pagination.ts +31 -17
  106. package/src/features/Pinning.ts +79 -96
  107. package/src/features/RowSelection.ts +68 -118
  108. package/src/features/Rows.ts +21 -6
  109. package/src/features/Sorting.ts +47 -103
  110. package/src/features/Visibility.ts +24 -47
  111. package/src/filterFns.ts +9 -9
  112. package/src/index.ts +12 -4
  113. package/src/sortingFns.ts +11 -11
  114. package/src/types.ts +3 -18
  115. package/src/utils/filterRowsUtils.ts +47 -68
  116. package/src/utils/{getCoreRowModelSync.ts → getCoreRowModel.ts} +3 -9
  117. package/src/utils/getExpandedRowModel.ts +2 -2
  118. package/src/utils/getFacetedMinMaxValues.ts +37 -0
  119. package/src/utils/getFacetedRowModel.ts +50 -0
  120. package/src/utils/getFacetedUniqueValues.ts +37 -0
  121. package/src/utils/getFilteredRowModel.ts +150 -0
  122. package/src/utils/getGroupedRowModel.ts +53 -62
  123. package/src/utils/getPaginationRowModel.ts +1 -1
  124. package/src/utils/{getSortedRowModelSync.ts → getSortedRowModel.ts} +7 -7
  125. package/src/utils.ts +28 -236
  126. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js +0 -112
  127. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js.map +0 -1
  128. package/build/cjs/utils/getCoreRowModelAsync.js +0 -125
  129. package/build/cjs/utils/getCoreRowModelAsync.js.map +0 -1
  130. package/build/cjs/utils/getCoreRowModelSync.js +0 -102
  131. package/build/cjs/utils/getCoreRowModelSync.js.map +0 -1
  132. package/build/cjs/utils/getFilteredRowModelSync.js +0 -130
  133. package/build/cjs/utils/getFilteredRowModelSync.js.map +0 -1
  134. package/build/cjs/utils/getSortedRowModelSync.js +0 -118
  135. package/build/cjs/utils/getSortedRowModelSync.js.map +0 -1
  136. package/build/types/utils/getCoreRowModelAsync.d.ts +0 -4
  137. package/build/types/utils/getFilteredRowModelAsync.d.ts +0 -4
  138. package/build/types/utils/getFilteredRowModelSync.d.ts +0 -2
  139. package/build/types/utils/getSortedRowModelAsync.d.ts +0 -13
  140. package/build/types/utils/getSortedRowModelSync.d.ts +0 -2
  141. package/src/utils/getCoreRowModelAsync.ts +0 -104
  142. package/src/utils/getFilteredRowModelAsync.ts +0 -49
  143. package/src/utils/getFilteredRowModelSync.ts +0 -150
  144. package/src/utils/getSortedRowModelAsync.ts +0 -200
@@ -16,13 +16,12 @@ import {
16
16
  memo,
17
17
  Overwrite,
18
18
  } from '../utils'
19
- import { filterRows } from '../utils/filterRowsUtils'
20
19
 
21
20
  export type FiltersTableState = {
22
21
  columnFilters: ColumnFiltersState
23
22
  globalFilter: any
24
- columnFiltersProgress: number
25
- globalFilterProgress: number
23
+ // filtersProgress: number
24
+ // facetProgress: Record<string, number>
26
25
  }
27
26
 
28
27
  export type ColumnFiltersState = ColumnFilter[]
@@ -32,6 +31,12 @@ export type ColumnFilter = {
32
31
  value: unknown
33
32
  }
34
33
 
34
+ export type ResolvedColumnFilter<TGenerics extends TableGenerics> = {
35
+ id: string
36
+ resolvedValue: unknown
37
+ filterFn: FilterFn<TGenerics>
38
+ }
39
+
35
40
  export type FilterFn<TGenerics extends TableGenerics> = {
36
41
  (row: Row<TGenerics>, columnId: string, filterValue: any): boolean
37
42
  resolveFilterValue?: TransformFilterValueFn<TGenerics>
@@ -68,15 +73,20 @@ export type FiltersColumnDef<TGenerics extends TableGenerics> = {
68
73
 
69
74
  export type FiltersColumn<TGenerics extends TableGenerics> = {
70
75
  filterFn: FilterFnOption<Overwrite<TGenerics, { Value: any }>>
71
- getCanColumnFilter: () => boolean
76
+ getAutoFilterFn: () => FilterFn<TGenerics> | undefined
77
+ getFilterFn: () => FilterFn<TGenerics> | undefined
78
+ setFilterValue: (updater: Updater<any>) => void
79
+ getCanFilter: () => boolean
72
80
  getCanGlobalFilter: () => boolean
73
- getColumnFilterIndex: () => number
74
- getColumnIsFiltered: () => boolean
75
- getColumnFilterValue: () => unknown
76
- setColumnFilterValue: (updater: Updater<any>) => void
77
81
  getFacetedRowModel: () => RowModel<TGenerics>
82
+ _getFacetedRowModel?: () => RowModel<TGenerics>
83
+ getIsFiltered: () => boolean
84
+ getFilterValue: () => unknown
85
+ getFilterIndex: () => number
78
86
  getFacetedUniqueValues: () => Map<any, number>
87
+ _getFacetedUniqueValues?: () => Map<any, number>
79
88
  getFacetedMinMaxValues: () => [any, any]
89
+ _getFacetedMinMaxValues?: () => [any, any]
80
90
  }
81
91
 
82
92
  export type FiltersRow<TGenerics extends TableGenerics> = {
@@ -89,35 +99,39 @@ export type FiltersOptions<TGenerics extends TableGenerics> = {
89
99
  manualFiltering?: boolean
90
100
  filterFromLeafRows?: boolean
91
101
  filterFns?: TGenerics['FilterFns']
102
+ getFilteredRowModel?: (
103
+ instance: TableInstance<TGenerics>
104
+ ) => () => RowModel<TGenerics>
92
105
 
93
106
  // Column
94
107
  onColumnFiltersChange?: OnChangeFn<ColumnFiltersState>
95
108
  enableColumnFilters?: boolean
96
- getFilteredRowModel?: (
97
- instance: TableInstance<TGenerics>
98
- ) => () => RowModel<TGenerics>
99
109
 
100
110
  // Global
101
111
  globalFilterFn?: FilterFnOption<TGenerics>
102
112
  onGlobalFilterChange?: OnChangeFn<any>
103
113
  enableGlobalFilter?: boolean
104
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]
105
129
  }
106
130
 
107
131
  export type FiltersInstance<TGenerics extends TableGenerics> = {
108
- getColumnAutoFilterFn: (columnId: string) => FilterFn<TGenerics> | undefined
109
-
110
- getColumnFilterFn: (columnId: string) => FilterFn<TGenerics> | undefined
111
-
112
132
  setColumnFilters: (updater: Updater<ColumnFiltersState>) => void
113
- setColumnFilterValue: (columnId: string, updater: Updater<any>) => void
114
- resetColumnFilters: () => void
115
- getColumnCanColumnFilter: (columnId: string) => boolean
116
- getColumnFacetedRowModel: (columnId: string) => RowModel<TGenerics>
117
133
 
118
- getColumnIsFiltered: (columnId: string) => boolean
119
- getColumnFilterValue: (columnId: string) => unknown
120
- getColumnFilterIndex: (columnId: string) => number
134
+ resetColumnFilters: (defaultState?: boolean) => void
121
135
 
122
136
  // Column Filters
123
137
  getPreFilteredRowModel: () => RowModel<TGenerics>
@@ -126,13 +140,15 @@ export type FiltersInstance<TGenerics extends TableGenerics> = {
126
140
 
127
141
  // Global Filters
128
142
  setGlobalFilter: (updater: Updater<any>) => void
129
- resetGlobalFilter: () => void
143
+ resetGlobalFilter: (defaultState?: boolean) => void
130
144
  getGlobalAutoFilterFn: () => FilterFn<TGenerics> | undefined
131
145
  getGlobalFilterFn: () => FilterFn<TGenerics> | undefined
132
- getColumnCanGlobalFilter: (columnId: string) => boolean
133
146
  getGlobalFacetedRowModel: () => RowModel<TGenerics>
147
+ _getGlobalFacetedRowModel?: () => RowModel<TGenerics>
134
148
  getGlobalFacetedUniqueValues: () => Map<any, number>
149
+ _getGlobalFacetedUniqueValues?: () => Map<any, number>
135
150
  getGlobalFacetedMinMaxValues: () => [number, number]
151
+ _getGlobalFacetedMinMaxValues?: () => [number, number]
136
152
  }
137
153
 
138
154
  //
@@ -150,8 +166,8 @@ export const Filters: TableFeature = {
150
166
  return {
151
167
  columnFilters: [],
152
168
  globalFilter: undefined,
153
- columnFiltersProgress: 1,
154
- globalFilterProgress: 1,
169
+ // filtersProgress: 1,
170
+ // facetProgress: {},
155
171
  ...state,
156
172
  }
157
173
  },
@@ -162,12 +178,13 @@ export const Filters: TableFeature = {
162
178
  return {
163
179
  onColumnFiltersChange: makeStateUpdater('columnFilters', instance),
164
180
  onGlobalFilterChange: makeStateUpdater('globalFilter', instance),
165
- filterFromLeafRows: true,
181
+ filterFromLeafRows: false,
166
182
  globalFilterFn: 'auto',
167
183
  getColumnCanGlobalFilter: column => {
168
184
  const value = instance
169
185
  .getCoreRowModel()
170
- .flatRows[0]?.getAllCellsByColumnId()[column.id]?.value
186
+ .flatRows[0]?.getAllCellsByColumnId()
187
+ [column.id]?.getValue()
171
188
 
172
189
  return typeof value === 'string'
173
190
  },
@@ -180,86 +197,10 @@ export const Filters: TableFeature = {
180
197
  ): FiltersColumn<TGenerics> => {
181
198
  return {
182
199
  filterFn: column.filterFn,
183
- getCanColumnFilter: () => instance.getColumnCanColumnFilter(column.id),
184
- getCanGlobalFilter: () => instance.getColumnCanGlobalFilter(column.id),
185
- getColumnFilterIndex: () => instance.getColumnFilterIndex(column.id),
186
- getColumnIsFiltered: () => instance.getColumnIsFiltered(column.id),
187
- getColumnFilterValue: () => instance.getColumnFilterValue(column.id),
188
- setColumnFilterValue: val =>
189
- instance.setColumnFilterValue(column.id, val),
190
- getFacetedRowModel: memo(
191
- () => [
192
- instance.getPreFilteredRowModel(),
193
- instance.getState().columnFilters,
194
- instance.getState().globalFilter,
195
- // Include this to force the filtered facet info to be calculated
196
- instance.getFilteredRowModel(),
197
- ],
198
- (rowModel, columnFilters, globalFilter, _) => {
199
- if (!columnFilters?.length && !globalFilter) {
200
- return rowModel
201
- }
202
-
203
- return filterRows(
204
- rowModel.rows,
205
- [
206
- ...columnFilters.map(d => d.id).filter(d => d !== column.id),
207
- globalFilter ? '__global__' : undefined,
208
- ].filter(Boolean) as string[],
209
- instance
210
- )
211
- },
212
- {
213
- key:
214
- process.env.NODE_ENV === 'production' &&
215
- 'getFacetedRowModel_' + column.id,
216
- debug: () =>
217
- instance.options.debugAll ?? instance.options.debugColumns,
218
- }
219
- ),
220
- getFacetedUniqueValues: memo(
221
- () => [column.getFacetedRowModel()],
222
- facetedRowModel => getRowModelUniqueValues(facetedRowModel, column.id),
223
- {
224
- key:
225
- process.env.NODE_ENV === 'production' &&
226
- 'column.getFacetedUniqueValues',
227
- debug: () =>
228
- instance.options.debugAll ?? instance.options.debugColumns,
229
- }
230
- ),
231
- getFacetedMinMaxValues: memo(
232
- () => [column.getFacetedRowModel()],
233
- facetedRowModel => getRowModelMinMaxValues(facetedRowModel, column.id),
234
- {
235
- key:
236
- process.env.NODE_ENV === 'production' &&
237
- 'column.getFacetedMinMaxValues',
238
- debug: () =>
239
- instance.options.debugAll ?? instance.options.debugColumns,
240
- }
241
- ),
242
- }
243
- },
244
-
245
- createRow: <TGenerics extends TableGenerics>(
246
- row: Row<TGenerics>,
247
- instance: TableInstance<TGenerics>
248
- ): FiltersRow<TGenerics> => {
249
- return {
250
- columnFilterMap: {},
251
- subRowsByFacetId: {},
252
- }
253
- },
254
-
255
- createInstance: <TGenerics extends TableGenerics>(
256
- instance: TableInstance<TGenerics>
257
- ): FiltersInstance<TGenerics> => {
258
- return {
259
- getColumnAutoFilterFn: columnId => {
200
+ getAutoFilterFn: () => {
260
201
  const firstRow = instance.getCoreRowModel().flatRows[0]
261
202
 
262
- const value = firstRow?.values[columnId]
203
+ const value = firstRow?.getValue(column.id)
263
204
 
264
205
  if (typeof value === 'string') {
265
206
  return filterFns.includesString
@@ -279,30 +220,13 @@ export const Filters: TableFeature = {
279
220
 
280
221
  return filterFns.weakEquals
281
222
  },
282
- getColumnFacetedRowModel: columnId => {
283
- const column = instance.getColumn(columnId)
284
-
285
- if (!column) {
286
- throw new Error()
287
- }
288
-
289
- return column.getFacetedRowModel()
290
- },
291
- getGlobalAutoFilterFn: () => {
292
- return filterFns.includesString
293
- },
294
- getColumnFilterFn: columnId => {
295
- const column = instance.getColumn(columnId)
223
+ getFilterFn: () => {
296
224
  const userFilterFns = instance.options.filterFns
297
225
 
298
- if (!column) {
299
- throw new Error()
300
- }
301
-
302
226
  return isFunction(column.filterFn)
303
227
  ? column.filterFn
304
228
  : column.filterFn === 'auto'
305
- ? instance.getColumnAutoFilterFn(columnId)
229
+ ? column.getAutoFilterFn()
306
230
  : (userFilterFns as Record<string, any>)?.[
307
231
  column.filterFn as string
308
232
  ] ??
@@ -310,60 +234,7 @@ export const Filters: TableFeature = {
310
234
  column.filterFn as BuiltInFilterFn
311
235
  ] as FilterFn<TGenerics>)
312
236
  },
313
-
314
- getGlobalFilterFn: () => {
315
- const { filterFns: userFilterFns, globalFilterFn: globalFilterFn } =
316
- instance.options
317
-
318
- return isFunction(globalFilterFn)
319
- ? globalFilterFn
320
- : globalFilterFn === 'auto'
321
- ? instance.getGlobalAutoFilterFn()
322
- : (userFilterFns as Record<string, any>)?.[
323
- globalFilterFn as string
324
- ] ??
325
- (filterFns[
326
- globalFilterFn as BuiltInFilterFn
327
- ] as FilterFn<TGenerics>)
328
- },
329
-
330
- setColumnFilters: (updater: Updater<ColumnFiltersState>) => {
331
- const leafColumns = instance.getAllLeafColumns()
332
-
333
- const updateFn = (old: ColumnFiltersState) => {
334
- return functionalUpdate(updater, old)?.filter(filter => {
335
- const column = leafColumns.find(d => d.id === filter.id)
336
-
337
- if (column) {
338
- const filterFn = instance.getColumnFilterFn(column.id)
339
-
340
- if (shouldAutoRemoveFilter(filterFn, filter.value, column)) {
341
- return false
342
- }
343
- }
344
-
345
- return true
346
- })
347
- }
348
-
349
- instance.options.onColumnFiltersChange?.(updateFn)
350
- },
351
-
352
- setGlobalFilter: updater => {
353
- instance.options.onGlobalFilterChange?.(updater)
354
- },
355
-
356
- resetGlobalFilter: () => {
357
- instance.setGlobalFilter(instance.initialState.globalFilter)
358
- },
359
-
360
- getColumnCanColumnFilter: columnId => {
361
- const column = instance.getColumn(columnId)
362
-
363
- if (!column) {
364
- throw new Error()
365
- }
366
-
237
+ getCanFilter: () => {
367
238
  return (
368
239
  (column.enableColumnFilter ?? true) &&
369
240
  (instance.options.enableColumnFilters ?? true) &&
@@ -372,13 +243,7 @@ export const Filters: TableFeature = {
372
243
  )
373
244
  },
374
245
 
375
- getColumnCanGlobalFilter: columnId => {
376
- const column = instance.getColumn(columnId)
377
-
378
- if (!column) {
379
- throw new Error()
380
- }
381
-
246
+ getCanGlobalFilter: () => {
382
247
  return (
383
248
  (column.enableGlobalFilter ?? true) &&
384
249
  (instance.options.enableGlobalFilter ?? true) &&
@@ -388,33 +253,19 @@ export const Filters: TableFeature = {
388
253
  )
389
254
  },
390
255
 
391
- getColumnIsFiltered: columnId =>
392
- instance.getColumnFilterIndex(columnId) > -1,
256
+ getIsFiltered: () => column.getFilterIndex() > -1,
393
257
 
394
- getColumnFilterValue: columnId =>
395
- instance.getState().columnFilters?.find(d => d.id === columnId)?.value,
258
+ getFilterValue: () =>
259
+ instance.getState().columnFilters?.find(d => d.id === column.id)?.value,
396
260
 
397
- getColumnFilterIndex: columnId =>
398
- instance.getState().columnFilters?.findIndex(d => d.id === columnId) ??
261
+ getFilterIndex: () =>
262
+ instance.getState().columnFilters?.findIndex(d => d.id === column.id) ??
399
263
  -1,
400
264
 
401
- setColumnFilterValue: (columnId, value) => {
402
- if (!columnId) return
403
-
265
+ setFilterValue: value => {
404
266
  instance.setColumnFilters(old => {
405
- const column = instance.getColumn(columnId)
406
-
407
- if (!column) {
408
- if (process.env.NODE_ENV !== 'production') {
409
- console.warn(
410
- `Table: Could not find a column with id: ${columnId}`
411
- )
412
- }
413
- throw new Error()
414
- }
415
-
416
- const filterFn = instance.getColumnFilterFn(column.id)
417
- const previousfilter = old?.find(d => d.id === columnId)
267
+ const filterFn = column.getFilterFn()
268
+ const previousfilter = old?.find(d => d.id === column.id)
418
269
 
419
270
  const newFilter = functionalUpdate(
420
271
  value,
@@ -429,15 +280,15 @@ export const Filters: TableFeature = {
429
280
  column
430
281
  )
431
282
  ) {
432
- return old?.filter(d => d.id !== columnId) ?? []
283
+ return old?.filter(d => d.id !== column.id) ?? []
433
284
  }
434
285
 
435
- const newFilterObj = { id: columnId, value: newFilter }
286
+ const newFilterObj = { id: column.id, value: newFilter }
436
287
 
437
288
  if (previousfilter) {
438
289
  return (
439
290
  old?.map(d => {
440
- if (d.id === columnId) {
291
+ if (d.id === column.id) {
441
292
  return newFilterObj
442
293
  }
443
294
  return d
@@ -452,21 +303,118 @@ export const Filters: TableFeature = {
452
303
  return [newFilterObj]
453
304
  })
454
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
+ }
455
313
 
456
- resetColumnFilters: () => {
457
- instance.setColumnFilters(instance.initialState?.columnFilters ?? [])
314
+ return column._getFacetedRowModel()
458
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
+ }
459
323
 
460
- getPreFilteredRowModel: () => instance.getCoreRowModel(),
461
- getFilteredRowModel: () => {
462
- if (
463
- !instance._getFilteredRowModel &&
464
- instance.options.getFilteredRowModel
465
- ) {
466
- instance._getFilteredRowModel =
467
- instance.options.getFilteredRowModel(instance)
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
+ })
468
392
  }
469
393
 
394
+ instance.options.onColumnFiltersChange?.(updateFn)
395
+ },
396
+
397
+ setGlobalFilter: updater => {
398
+ instance.options.onGlobalFilterChange?.(updater)
399
+ },
400
+
401
+ resetGlobalFilter: defaultState => {
402
+ instance.setGlobalFilter(
403
+ defaultState ? undefined : instance.initialState.globalFilter
404
+ )
405
+ },
406
+
407
+ resetColumnFilters: defaultState => {
408
+ instance.setColumnFilters(
409
+ defaultState ? [] : instance.initialState?.columnFilters ?? []
410
+ )
411
+ },
412
+
413
+ getPreFilteredRowModel: () => instance.getCoreRowModel(),
414
+ _getFilteredRowModel:
415
+ instance.options.getFilteredRowModel &&
416
+ instance.options.getFilteredRowModel(instance),
417
+ getFilteredRowModel: () => {
470
418
  if (
471
419
  instance.options.manualFiltering ||
472
420
  !instance._getFilteredRowModel
@@ -477,56 +425,42 @@ export const Filters: TableFeature = {
477
425
  return instance._getFilteredRowModel()
478
426
  },
479
427
 
480
- getGlobalFacetedRowModel: memo(
481
- () => [
482
- instance.getPreFilteredRowModel(),
483
- instance.getState().columnFilters,
484
- instance.getState().globalFilter,
485
- // Include this to force the filtered facet info to be calculated
486
- instance.getFilteredRowModel(),
487
- ],
488
- (rowModel, columnFilters, globalFilter, _) => {
489
- if (!columnFilters?.length && !globalFilter) {
490
- return rowModel
491
- }
428
+ _getGlobalFacetedRowModel:
429
+ instance.options.getFacetedRowModel &&
430
+ instance.options.getFacetedRowModel(instance, '__global__'),
492
431
 
493
- return filterRows(
494
- rowModel.rows,
495
- columnFilters.map(d => d.id),
496
- instance
497
- )
498
- },
499
- {
500
- key:
501
- process.env.NODE_ENV === 'production' && 'getGlobalFacetedRowModel',
502
- debug: () =>
503
- instance.options.debugAll ?? instance.options.debugColumns,
432
+ getGlobalFacetedRowModel: () => {
433
+ if (
434
+ instance.options.manualFiltering ||
435
+ !instance._getGlobalFacetedRowModel
436
+ ) {
437
+ return instance.getPreFilteredRowModel()
504
438
  }
505
- ),
506
- getGlobalFacetedUniqueValues: memo(
507
- () => [instance.getGlobalFacetedRowModel()],
508
- facetedRowModel =>
509
- getRowModelUniqueValues(facetedRowModel, '__global__'),
510
- {
511
- key:
512
- process.env.NODE_ENV === 'production' &&
513
- 'getGlobalFacetedUniqueValues',
514
- debug: () =>
515
- instance.options.debugAll ?? instance.options.debugColumns,
439
+
440
+ return instance._getGlobalFacetedRowModel()
441
+ },
442
+
443
+ _getGlobalFacetedUniqueValues:
444
+ instance.options.getFacetedUniqueValues &&
445
+ instance.options.getFacetedUniqueValues(instance, '__global__'),
446
+ getGlobalFacetedUniqueValues: () => {
447
+ if (!instance._getGlobalFacetedUniqueValues) {
448
+ return new Map()
516
449
  }
517
- ),
518
- getGlobalFacetedMinMaxValues: memo(
519
- () => [instance.getGlobalFacetedRowModel()],
520
- facetedRowModel =>
521
- getRowModelMinMaxValues(facetedRowModel, '__global__'),
522
- {
523
- key:
524
- process.env.NODE_ENV === 'production' &&
525
- 'getGlobalFacetedMinMaxValues',
526
- debug: () =>
527
- instance.options.debugAll ?? instance.options.debugColumns,
450
+
451
+ return instance._getGlobalFacetedUniqueValues()
452
+ },
453
+
454
+ _getGlobalFacetedMinMaxValues:
455
+ instance.options.getFacetedMinMaxValues &&
456
+ instance.options.getFacetedMinMaxValues(instance, '__global__'),
457
+ getGlobalFacetedMinMaxValues: () => {
458
+ if (!instance._getGlobalFacetedMinMaxValues) {
459
+ return [NaN, NaN]
528
460
  }
529
- ),
461
+
462
+ return instance._getGlobalFacetedMinMaxValues()
463
+ },
530
464
  }
531
465
  },
532
466
  }
@@ -544,44 +478,3 @@ export function shouldAutoRemoveFilter<TGenerics extends TableGenerics>(
544
478
  (typeof value === 'string' && !value)
545
479
  )
546
480
  }
547
-
548
- export function getRowModelMinMaxValues<TGenerics extends TableGenerics>(
549
- rowModel: RowModel<TGenerics>,
550
- columnId: string
551
- ) {
552
- let facetedMinMaxValues: [any, any] = [
553
- rowModel.flatRows[0]?.values[columnId] ?? null,
554
- rowModel.flatRows[0]?.values[columnId] ?? null,
555
- ]
556
-
557
- for (let i = 0; i < rowModel.flatRows.length; i++) {
558
- const value = rowModel.flatRows[i]?.values[columnId]
559
-
560
- if (value < facetedMinMaxValues[0]) {
561
- facetedMinMaxValues[0] = value
562
- } else if (value > facetedMinMaxValues[1]) {
563
- facetedMinMaxValues[1] = value
564
- }
565
- }
566
-
567
- return facetedMinMaxValues
568
- }
569
-
570
- export function getRowModelUniqueValues<TGenerics extends TableGenerics>(
571
- rowModel: RowModel<TGenerics>,
572
- columnId: string
573
- ) {
574
- let facetedUniqueValues = new Map<any, number>()
575
-
576
- for (let i = 0; i < rowModel.flatRows.length; i++) {
577
- const value = rowModel.flatRows[i]?.values[columnId]
578
-
579
- if (facetedUniqueValues.has(value)) {
580
- facetedUniqueValues.set(value, (facetedUniqueValues.get(value) ?? 0) + 1)
581
- } else {
582
- facetedUniqueValues.set(value, 1)
583
- }
584
- }
585
-
586
- return facetedUniqueValues
587
- }