@tanstack/table-core 8.0.0-alpha.10

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 (112) hide show
  1. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js +112 -0
  2. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js.map +1 -0
  3. package/build/cjs/aggregationTypes.js +130 -0
  4. package/build/cjs/aggregationTypes.js.map +1 -0
  5. package/build/cjs/core.js +545 -0
  6. package/build/cjs/core.js.map +1 -0
  7. package/build/cjs/createTable.js +65 -0
  8. package/build/cjs/createTable.js.map +1 -0
  9. package/build/cjs/features/ColumnSizing.js +316 -0
  10. package/build/cjs/features/ColumnSizing.js.map +1 -0
  11. package/build/cjs/features/Expanding.js +238 -0
  12. package/build/cjs/features/Expanding.js.map +1 -0
  13. package/build/cjs/features/Filters.js +413 -0
  14. package/build/cjs/features/Filters.js.map +1 -0
  15. package/build/cjs/features/Grouping.js +227 -0
  16. package/build/cjs/features/Grouping.js.map +1 -0
  17. package/build/cjs/features/Headers.js +630 -0
  18. package/build/cjs/features/Headers.js.map +1 -0
  19. package/build/cjs/features/Ordering.js +86 -0
  20. package/build/cjs/features/Ordering.js.map +1 -0
  21. package/build/cjs/features/Pagination.js +193 -0
  22. package/build/cjs/features/Pagination.js.map +1 -0
  23. package/build/cjs/features/Pinning.js +148 -0
  24. package/build/cjs/features/Pinning.js.map +1 -0
  25. package/build/cjs/features/RowSelection.js +525 -0
  26. package/build/cjs/features/RowSelection.js.map +1 -0
  27. package/build/cjs/features/Sorting.js +313 -0
  28. package/build/cjs/features/Sorting.js.map +1 -0
  29. package/build/cjs/features/Visibility.js +172 -0
  30. package/build/cjs/features/Visibility.js.map +1 -0
  31. package/build/cjs/filterTypes.js +172 -0
  32. package/build/cjs/filterTypes.js.map +1 -0
  33. package/build/cjs/index.js +75 -0
  34. package/build/cjs/index.js.map +1 -0
  35. package/build/cjs/sortTypes.js +122 -0
  36. package/build/cjs/sortTypes.js.map +1 -0
  37. package/build/cjs/types.js +22 -0
  38. package/build/cjs/types.js.map +1 -0
  39. package/build/cjs/utils/columnFilterRowsFn.js +131 -0
  40. package/build/cjs/utils/columnFilterRowsFn.js.map +1 -0
  41. package/build/cjs/utils/expandRowsFn.js +38 -0
  42. package/build/cjs/utils/expandRowsFn.js.map +1 -0
  43. package/build/cjs/utils/globalFilterRowsFn.js +101 -0
  44. package/build/cjs/utils/globalFilterRowsFn.js.map +1 -0
  45. package/build/cjs/utils/groupRowsFn.js +155 -0
  46. package/build/cjs/utils/groupRowsFn.js.map +1 -0
  47. package/build/cjs/utils/paginateRowsFn.js +44 -0
  48. package/build/cjs/utils/paginateRowsFn.js.map +1 -0
  49. package/build/cjs/utils/sortRowsFn.js +94 -0
  50. package/build/cjs/utils/sortRowsFn.js.map +1 -0
  51. package/build/cjs/utils.js +167 -0
  52. package/build/cjs/utils.js.map +1 -0
  53. package/build/esm/index.js +4689 -0
  54. package/build/esm/index.js.map +1 -0
  55. package/build/stats-html.html +2689 -0
  56. package/build/stats-react.json +939 -0
  57. package/build/types/aggregationTypes.d.ts +22 -0
  58. package/build/types/core.d.ts +105 -0
  59. package/build/types/createTable.d.ts +42 -0
  60. package/build/types/features/ColumnSizing.d.ts +75 -0
  61. package/build/types/features/Expanding.d.ts +50 -0
  62. package/build/types/features/Filters.d.ts +92 -0
  63. package/build/types/features/Grouping.d.ts +85 -0
  64. package/build/types/features/Headers.d.ts +43 -0
  65. package/build/types/features/Ordering.d.ts +21 -0
  66. package/build/types/features/Pagination.d.ts +41 -0
  67. package/build/types/features/Pinning.d.ts +41 -0
  68. package/build/types/features/RowSelection.d.ts +60 -0
  69. package/build/types/features/Sorting.d.ts +81 -0
  70. package/build/types/features/Visibility.d.ts +49 -0
  71. package/build/types/filterTypes.d.ts +50 -0
  72. package/build/types/index.d.ts +23 -0
  73. package/build/types/sortTypes.d.ts +18 -0
  74. package/build/types/types.d.ts +138 -0
  75. package/build/types/utils/columnFilterRowsFn.d.ts +2 -0
  76. package/build/types/utils/expandRowsFn.d.ts +2 -0
  77. package/build/types/utils/globalFilterRowsFn.d.ts +2 -0
  78. package/build/types/utils/groupRowsFn.d.ts +2 -0
  79. package/build/types/utils/paginateRowsFn.d.ts +2 -0
  80. package/build/types/utils/sortRowsFn.d.ts +2 -0
  81. package/build/types/utils.d.ts +23 -0
  82. package/build/umd/index.development.js +4728 -0
  83. package/build/umd/index.development.js.map +1 -0
  84. package/build/umd/index.production.js +12 -0
  85. package/build/umd/index.production.js.map +1 -0
  86. package/package.json +40 -0
  87. package/src/.DS_Store +0 -0
  88. package/src/aggregationTypes.ts +115 -0
  89. package/src/core.tsx +763 -0
  90. package/src/createTable.tsx +137 -0
  91. package/src/features/ColumnSizing.ts +432 -0
  92. package/src/features/Expanding.ts +320 -0
  93. package/src/features/Filters.ts +567 -0
  94. package/src/features/Grouping.ts +363 -0
  95. package/src/features/Headers.ts +747 -0
  96. package/src/features/Ordering.ts +112 -0
  97. package/src/features/Pagination.ts +252 -0
  98. package/src/features/Pinning.ts +177 -0
  99. package/src/features/RowSelection.ts +655 -0
  100. package/src/features/Sorting.ts +460 -0
  101. package/src/features/Visibility.ts +242 -0
  102. package/src/filterTypes.ts +188 -0
  103. package/src/index.tsx +23 -0
  104. package/src/sortTypes.ts +147 -0
  105. package/src/types.ts +311 -0
  106. package/src/utils/columnFilterRowsFn.ts +113 -0
  107. package/src/utils/expandRowsFn.ts +30 -0
  108. package/src/utils/globalFilterRowsFn.ts +89 -0
  109. package/src/utils/groupRowsFn.ts +170 -0
  110. package/src/utils/paginateRowsFn.ts +28 -0
  111. package/src/utils/sortRowsFn.ts +95 -0
  112. package/src/utils.tsx +221 -0
@@ -0,0 +1,567 @@
1
+ import { RowModel } from '..'
2
+ import { BuiltInFilterType, filterTypes } from '../filterTypes'
3
+ import {
4
+ Column,
5
+ OnChangeFn,
6
+ PartialGenerics,
7
+ TableInstance,
8
+ Row,
9
+ Updater,
10
+ } from '../types'
11
+ import {
12
+ functionalUpdate,
13
+ isFunction,
14
+ makeStateUpdater,
15
+ memo,
16
+ Overwrite,
17
+ } from '../utils'
18
+
19
+ export type ColumnFilter = {
20
+ id: string
21
+ value: unknown
22
+ }
23
+
24
+ export type ColumnFiltersState = ColumnFilter[]
25
+
26
+ export type FilterFn<TGenerics extends PartialGenerics> = {
27
+ (rows: Row<TGenerics>[], columnIds: string[], filterValue: any): any
28
+ autoRemove?: ColumnFilterAutoRemoveTestFn<TGenerics>
29
+ }
30
+
31
+ export type ColumnFilterAutoRemoveTestFn<TGenerics extends PartialGenerics> = (
32
+ value: unknown,
33
+ column?: Column<TGenerics>
34
+ ) => boolean
35
+
36
+ export type CustomFilterTypes<TGenerics extends PartialGenerics> = Record<
37
+ string,
38
+ FilterFn<TGenerics>
39
+ >
40
+
41
+ export type FiltersTableState = {
42
+ columnFilters: ColumnFiltersState
43
+ globalFilter: any
44
+ }
45
+
46
+ export type FilterType<TGenerics extends PartialGenerics> =
47
+ | 'auto'
48
+ | BuiltInFilterType
49
+ | TGenerics['FilterFns']
50
+ | FilterFn<TGenerics>
51
+
52
+ export type FiltersColumnDef<TGenerics extends PartialGenerics> = {
53
+ filterType?: FilterType<Overwrite<TGenerics, { Value: any }>>
54
+ enableAllFilters?: boolean
55
+ enableColumnFilter?: boolean
56
+ enableGlobalFilter?: boolean
57
+ defaultCanFilter?: boolean
58
+ defaultCanColumnFilter?: boolean
59
+ defaultCanGlobalFilter?: boolean
60
+ }
61
+
62
+ export type FiltersColumn<TGenerics extends PartialGenerics> = {
63
+ filterType: FilterType<Overwrite<TGenerics, { Value: any }>>
64
+ getCanColumnFilter: () => boolean
65
+ getCanGlobalFilter: () => boolean
66
+ getColumnFilterIndex: () => number
67
+ getIsColumnFiltered: () => boolean
68
+ getColumnFilterValue: () => unknown
69
+ setColumnFilterValue: (value: any) => void
70
+ getPreFilteredRows: () => Row<TGenerics>[] | undefined
71
+ getPreFilteredUniqueValues: () => Map<any, number>
72
+ getPreFilteredMinMaxValues: () => [any, any]
73
+ }
74
+
75
+ export type FiltersOptions<TGenerics extends PartialGenerics> = {
76
+ filterFromChildrenUp?: boolean
77
+ filterTypes?: TGenerics['FilterFns']
78
+ enableFilters?: boolean
79
+ // Column
80
+ onColumnFiltersChange?: OnChangeFn<ColumnFiltersState>
81
+ autoResetColumnFilters?: boolean
82
+ enableColumnFilters?: boolean
83
+ columnFilterRowsFn?: (
84
+ instance: TableInstance<TGenerics>,
85
+ coreRowModel: RowModel<TGenerics>
86
+ ) => RowModel<TGenerics>
87
+ // Global
88
+ globalFilterType?: FilterType<TGenerics>
89
+ onGlobalFilterChange?: OnChangeFn<any>
90
+ enableGlobalFilters?: boolean
91
+ autoResetGlobalFilter?: boolean
92
+ enableGlobalFilter?: boolean
93
+ globalFilterRowsFn?: (
94
+ instance: TableInstance<TGenerics>,
95
+ rowModel: RowModel<TGenerics>
96
+ ) => RowModel<TGenerics>
97
+ getColumnCanGlobalFilterFn?: (column: Column<TGenerics>) => boolean
98
+ }
99
+
100
+ export type FiltersInstance<TGenerics extends PartialGenerics> = {
101
+ _notifyFiltersReset: () => void
102
+ getColumnAutoFilterFn: (columnId: string) => FilterFn<TGenerics> | undefined
103
+
104
+ getColumnFilterFn: (columnId: string) => FilterFn<TGenerics> | undefined
105
+
106
+ setColumnFilters: (updater: Updater<ColumnFiltersState>) => void
107
+ setColumnFilterValue: (columnId: string, value: any) => void
108
+ resetColumnFilters: () => void
109
+ getColumnCanColumnFilter: (columnId: string) => boolean
110
+ getColumnCanGlobalFilterFn?: (column: Column<TGenerics>) => boolean
111
+
112
+ getColumnIsFiltered: (columnId: string) => boolean
113
+ getColumnFilterValue: (columnId: string) => unknown
114
+ getColumnFilterIndex: (columnId: string) => number
115
+
116
+ // All
117
+ getPreFilteredRowModel: () => RowModel<TGenerics>
118
+
119
+ // Column Filters
120
+ getPreColumnFilteredRowModel: () => RowModel<TGenerics>
121
+ getColumnFilteredRowModel: () => RowModel<TGenerics>
122
+
123
+ // Global Filters
124
+ setGlobalFilter: (updater: Updater<any>) => void
125
+ resetGlobalFilter: () => void
126
+ getGlobalAutoFilterFn: () => FilterFn<TGenerics> | undefined
127
+ getGlobalFilterFn: () => FilterFn<TGenerics> | undefined
128
+ getColumnCanGlobalFilter: (columnId: string) => boolean
129
+ getPreGlobalFilteredRowModel: () => RowModel<TGenerics>
130
+ getGlobalFilteredRowModel: () => RowModel<TGenerics>
131
+ }
132
+
133
+ //
134
+
135
+ export function getDefaultColumn<
136
+ TGenerics extends PartialGenerics
137
+ >(): FiltersColumnDef<TGenerics> {
138
+ return {
139
+ filterType: 'auto',
140
+ }
141
+ }
142
+
143
+ export const Filters = {
144
+ getInitialState: (): FiltersTableState => {
145
+ return {
146
+ columnFilters: [],
147
+ globalFilter: undefined,
148
+ }
149
+ },
150
+
151
+ getDefaultOptions: <TGenerics extends PartialGenerics>(
152
+ instance: TableInstance<TGenerics>
153
+ ): FiltersOptions<TGenerics> => {
154
+ return {
155
+ onColumnFiltersChange: makeStateUpdater('columnFilters', instance),
156
+ onGlobalFilterChange: makeStateUpdater('globalFilter', instance),
157
+ autoResetColumnFilters: true,
158
+ filterFromChildrenUp: true,
159
+ autoResetGlobalFilter: true,
160
+ globalFilterType: 'auto',
161
+ getColumnCanGlobalFilterFn: column => {
162
+ const value = instance
163
+ .getCoreRowModel()
164
+ .flatRows[0]?.getAllCellsByColumnId()[column.id]?.value
165
+
166
+ return typeof value === 'string'
167
+ },
168
+ }
169
+ },
170
+
171
+ createColumn: <TGenerics extends PartialGenerics>(
172
+ column: Column<TGenerics>,
173
+ instance: TableInstance<TGenerics>
174
+ ): FiltersColumn<TGenerics> => {
175
+ const getFacetInfo = memo(
176
+ () => [column.getPreFilteredRows()],
177
+ (rows = []) => {
178
+ let preFilteredUniqueValues = new Map<any, number>()
179
+
180
+ let preFilteredMinMaxValues: [any, any] = [
181
+ rows[0]?.values[column.id] ?? null,
182
+ rows[0]?.values[column.id] ?? null,
183
+ ]
184
+
185
+ for (let i = 0; i < rows.length; i++) {
186
+ const value = rows[i]?.values[column.id]
187
+
188
+ if (preFilteredUniqueValues.has(value)) {
189
+ preFilteredUniqueValues.set(
190
+ value,
191
+ (preFilteredUniqueValues.get(value) ?? 0) + 1
192
+ )
193
+ } else {
194
+ preFilteredUniqueValues.set(value, 1)
195
+ }
196
+
197
+ if (value < preFilteredMinMaxValues[0]) {
198
+ preFilteredMinMaxValues[0] = value
199
+ } else if (value > preFilteredMinMaxValues[1]) {
200
+ preFilteredMinMaxValues[1] = value
201
+ }
202
+ }
203
+
204
+ return {
205
+ preFilteredUniqueValues,
206
+ preFilteredMinMaxValues,
207
+ }
208
+ },
209
+ {
210
+ key: 'column.getFacetInfo',
211
+ debug: () => instance.options.debugAll ?? instance.options.debugColumns,
212
+ }
213
+ )
214
+
215
+ return {
216
+ filterType: column.filterType,
217
+ getCanColumnFilter: () => instance.getColumnCanColumnFilter(column.id),
218
+ getCanGlobalFilter: () => instance.getColumnCanGlobalFilter(column.id),
219
+ getColumnFilterIndex: () => instance.getColumnFilterIndex(column.id),
220
+ getIsColumnFiltered: () => instance.getColumnIsFiltered(column.id),
221
+ getColumnFilterValue: () => instance.getColumnFilterValue(column.id),
222
+ setColumnFilterValue: val =>
223
+ instance.setColumnFilterValue(column.id, val),
224
+ getPreFilteredUniqueValues: () => getFacetInfo().preFilteredUniqueValues,
225
+ getPreFilteredMinMaxValues: () => getFacetInfo().preFilteredMinMaxValues,
226
+ getPreFilteredRows: () => undefined,
227
+ }
228
+ },
229
+
230
+ getInstance: <TGenerics extends PartialGenerics>(
231
+ instance: TableInstance<TGenerics>
232
+ ): FiltersInstance<TGenerics> => {
233
+ let registered = false
234
+
235
+ return {
236
+ _notifyFiltersReset: () => {
237
+ if (!registered) {
238
+ registered = true
239
+ return
240
+ }
241
+
242
+ if (instance.options.autoResetAll === false) {
243
+ return
244
+ }
245
+
246
+ if (instance.options.autoResetAll === true) {
247
+ instance.resetSorting()
248
+ } else {
249
+ if (instance.options.autoResetColumnFilters) {
250
+ instance.resetColumnFilters()
251
+ }
252
+ if (instance.options.autoResetGlobalFilter) {
253
+ instance.resetGlobalFilter()
254
+ }
255
+ }
256
+ },
257
+ getColumnAutoFilterFn: columnId => {
258
+ const firstRow = instance.getCoreRowModel().flatRows[0]
259
+
260
+ const value = firstRow?.values[columnId]
261
+
262
+ if (typeof value === 'string') {
263
+ return filterTypes.includesString
264
+ }
265
+
266
+ if (typeof value === 'number') {
267
+ return filterTypes.betweenNumberRange
268
+ }
269
+
270
+ if (value !== null && typeof value === 'object') {
271
+ return filterTypes.equals
272
+ }
273
+
274
+ if (Array.isArray(value)) {
275
+ return filterTypes.arrIncludes
276
+ }
277
+
278
+ return filterTypes.weakEquals
279
+ },
280
+ getGlobalAutoFilterFn: () => {
281
+ return filterTypes.includesString
282
+ },
283
+ getColumnFilterFn: columnId => {
284
+ const column = instance.getColumn(columnId)
285
+ const userFilterTypes = instance.options.filterTypes
286
+
287
+ if (!column) {
288
+ throw new Error()
289
+ }
290
+
291
+ return isFunction(column.filterType)
292
+ ? column.filterType
293
+ : column.filterType === 'auto'
294
+ ? instance.getColumnAutoFilterFn(columnId)
295
+ : (userFilterTypes as Record<string, any>)?.[
296
+ column.filterType as string
297
+ ] ??
298
+ (filterTypes[
299
+ column.filterType as BuiltInFilterType
300
+ ] as FilterFn<TGenerics>)
301
+ },
302
+
303
+ getGlobalFilterFn: () => {
304
+ const { filterTypes: userFilterTypes, globalFilterType } =
305
+ instance.options
306
+
307
+ return isFunction(globalFilterType)
308
+ ? globalFilterType
309
+ : globalFilterType === 'auto'
310
+ ? instance.getGlobalAutoFilterFn()
311
+ : (userFilterTypes as Record<string, any>)?.[
312
+ globalFilterType as string
313
+ ] ??
314
+ (filterTypes[
315
+ globalFilterType as BuiltInFilterType
316
+ ] as FilterFn<TGenerics>)
317
+ },
318
+
319
+ setColumnFilters: (updater: Updater<ColumnFiltersState>) => {
320
+ const leafColumns = instance.getAllLeafColumns()
321
+
322
+ const updateFn = (old: ColumnFiltersState) => {
323
+ return functionalUpdate(updater, old)?.filter(filter => {
324
+ const column = leafColumns.find(d => d.id === filter.id)
325
+
326
+ if (column) {
327
+ const filterFn = instance.getColumnFilterFn(column.id)
328
+
329
+ if (shouldAutoRemoveFilter(filterFn, filter.value, column)) {
330
+ return false
331
+ }
332
+ }
333
+
334
+ return true
335
+ })
336
+ }
337
+
338
+ instance.options.onColumnFiltersChange?.(
339
+ updateFn,
340
+ updateFn(instance.getState().columnFilters)
341
+ )
342
+ },
343
+
344
+ setGlobalFilter: updater => {
345
+ instance.options.onGlobalFilterChange?.(
346
+ updater,
347
+ functionalUpdate(updater, instance.getState().globalFilter)
348
+ )
349
+ },
350
+
351
+ resetGlobalFilter: () => {
352
+ instance.setGlobalFilter(undefined)
353
+ },
354
+
355
+ getColumnCanColumnFilter: columnId => {
356
+ const column = instance.getColumn(columnId)
357
+
358
+ if (!column) {
359
+ throw new Error()
360
+ }
361
+
362
+ return (
363
+ column.enableAllFilters ??
364
+ column.enableColumnFilter ??
365
+ instance.options.enableFilters ??
366
+ instance.options.enableColumnFilters ??
367
+ column.defaultCanFilter ??
368
+ column.defaultCanColumnFilter ??
369
+ !!column.accessorFn
370
+ )
371
+ },
372
+
373
+ getColumnCanGlobalFilter: columnId => {
374
+ const column = instance.getColumn(columnId)
375
+
376
+ if (!column) {
377
+ throw new Error()
378
+ }
379
+
380
+ return (
381
+ ((instance.options.enableFilters ??
382
+ instance.options.enableGlobalFilter ??
383
+ column.enableAllFilters ??
384
+ column.enableGlobalFilter ??
385
+ column.defaultCanFilter ??
386
+ column.defaultCanGlobalFilter ??
387
+ !!column.accessorFn) &&
388
+ instance.options.getColumnCanGlobalFilterFn?.(column)) ??
389
+ true
390
+ )
391
+ },
392
+
393
+ getColumnIsFiltered: columnId =>
394
+ instance.getColumnFilterIndex(columnId) > -1,
395
+
396
+ getColumnFilterValue: columnId =>
397
+ instance.getState().columnFilters?.find(d => d.id === columnId)?.value,
398
+
399
+ getColumnFilterIndex: columnId =>
400
+ instance.getState().columnFilters?.findIndex(d => d.id === columnId) ??
401
+ -1,
402
+
403
+ setColumnFilterValue: (columnId, value) => {
404
+ if (!columnId) return
405
+
406
+ instance.setColumnFilters(old => {
407
+ const column = instance.getColumn(columnId)
408
+
409
+ if (!column) {
410
+ if (process.env.NODE_ENV !== 'production') {
411
+ console.warn(
412
+ `React-Table: Could not find a column with id: ${columnId}`
413
+ )
414
+ }
415
+ throw new Error()
416
+ }
417
+
418
+ const filterFn = instance.getColumnFilterFn(column.id)
419
+ const previousfilter = old?.find(d => d.id === columnId)
420
+
421
+ const newFilter = functionalUpdate(
422
+ value,
423
+ previousfilter ? previousfilter.value : undefined
424
+ )
425
+
426
+ //
427
+ if (
428
+ shouldAutoRemoveFilter(
429
+ filterFn as FilterFn<TGenerics>,
430
+ newFilter,
431
+ column
432
+ )
433
+ ) {
434
+ return old?.filter(d => d.id !== columnId) ?? []
435
+ }
436
+
437
+ const newFilterObj = { id: columnId, value: newFilter }
438
+
439
+ if (previousfilter) {
440
+ return (
441
+ old?.map(d => {
442
+ if (d.id === columnId) {
443
+ return newFilterObj
444
+ }
445
+ return d
446
+ }) ?? []
447
+ )
448
+ }
449
+
450
+ if (old?.length) {
451
+ return [...old, newFilterObj]
452
+ }
453
+
454
+ return [newFilterObj]
455
+ })
456
+ },
457
+
458
+ resetColumnFilters: () => {
459
+ instance.setColumnFilters(instance.initialState?.columnFilters ?? [])
460
+ },
461
+
462
+ getPreFilteredRowModel: () => instance.getCoreRowModel(),
463
+ getPreColumnFilteredRowModel: () => instance.getCoreRowModel(),
464
+ getColumnFilteredRowModel: memo(
465
+ () => [
466
+ instance.getState().columnFilters,
467
+ instance.getCoreRowModel(),
468
+ instance.options.columnFilterRowsFn,
469
+ ],
470
+ (columnFilters, rowModel, columnFiltersFn) => {
471
+ const columnFilteredRowModel = (() => {
472
+ if (!columnFilters?.length || !columnFiltersFn) {
473
+ return rowModel
474
+ }
475
+
476
+ return columnFiltersFn(instance as any, rowModel)
477
+ })()
478
+
479
+ // Now that each filtered column has it's partially filtered rows,
480
+ // lets assign the final filtered rows to all of the other columns
481
+ const nonFilteredColumns = instance
482
+ .getAllLeafColumns()
483
+ .filter(
484
+ column =>
485
+ !instance
486
+ .getState()
487
+ .columnFilters?.find(d => d.id === column.id)
488
+ )
489
+
490
+ // This essentially enables faceted filter options to be built easily
491
+ // using every column's preFilteredRows value
492
+
493
+ nonFilteredColumns.forEach(column => {
494
+ column.getPreFilteredRows = () => columnFilteredRowModel.rows
495
+ })
496
+
497
+ return columnFilteredRowModel
498
+ },
499
+ {
500
+ key: 'getColumnFilteredRowModel',
501
+ debug: () => instance.options.debugAll ?? instance.options.debugTable,
502
+ }
503
+ ),
504
+ getPreGlobalFilteredRowModel: () => instance.getColumnFilteredRowModel(),
505
+ getGlobalFilteredRowModel: memo(
506
+ () => [
507
+ instance.getState().globalFilter,
508
+ instance.getColumnFilteredRowModel(),
509
+ instance.options.globalFilterRowsFn,
510
+ ],
511
+ (globalFilterValue, columnFilteredRowModel, globalFiltersFn) => {
512
+ const globalFilteredRowModel = (() => {
513
+ if (!globalFiltersFn || !globalFilterValue) {
514
+ return columnFilteredRowModel
515
+ }
516
+
517
+ return globalFiltersFn(
518
+ instance as TableInstance<TGenerics>,
519
+ columnFilteredRowModel
520
+ )
521
+ })()
522
+
523
+ // Now that each filtered column has it's partially filtered rows,
524
+ // lets assign the final filtered rows to all of the other columns
525
+ const nonFilteredColumns = instance
526
+ .getAllLeafColumns()
527
+ .filter(
528
+ column =>
529
+ !instance
530
+ .getState()
531
+ .columnFilters?.find(d => d.id === column.id)
532
+ )
533
+
534
+ // This essentially enables faceted filter options to be built easily
535
+ // using every column's preFilteredRows value
536
+
537
+ nonFilteredColumns.forEach(column => {
538
+ column.getPreFilteredRows = () => globalFilteredRowModel.rows
539
+ })
540
+
541
+ return globalFilteredRowModel
542
+ },
543
+ {
544
+ key: 'getGlobalFilteredRowModel',
545
+ debug: () => instance.options.debugAll ?? instance.options.debugTable,
546
+ onChange: () => {
547
+ instance._notifySortingReset()
548
+ },
549
+ }
550
+ ),
551
+ }
552
+ },
553
+ }
554
+
555
+ export function shouldAutoRemoveFilter<TGenerics extends PartialGenerics>(
556
+ filterFn?: FilterFn<TGenerics>,
557
+ value?: any,
558
+ column?: Column<TGenerics>
559
+ ) {
560
+ return (
561
+ (filterFn && filterFn.autoRemove
562
+ ? filterFn.autoRemove(value, column)
563
+ : false) ||
564
+ typeof value === 'undefined' ||
565
+ (typeof value === 'string' && !value)
566
+ )
567
+ }