@tanstack/react-table 8.0.0-alpha.1 → 8.0.0-alpha.16

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