@tanstack/react-table 8.0.0-alpha.2 → 8.0.0-alpha.20

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 (99) 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 -3663
  6. package/build/esm/index.js.map +1 -1
  7. package/build/stats-html.html +1 -1
  8. package/build/stats-react.json +28 -676
  9. package/build/types/index.d.ts +13 -7
  10. package/build/umd/index.development.js +50 -3665
  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 +104 -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 -519
  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/ColumnSizing.js +0 -331
  23. package/build/cjs/features/ColumnSizing.js.map +0 -1
  24. package/build/cjs/features/Expanding.js +0 -234
  25. package/build/cjs/features/Expanding.js.map +0 -1
  26. package/build/cjs/features/Filters.js +0 -396
  27. package/build/cjs/features/Filters.js.map +0 -1
  28. package/build/cjs/features/Grouping.js +0 -228
  29. package/build/cjs/features/Grouping.js.map +0 -1
  30. package/build/cjs/features/Headers.js +0 -486
  31. package/build/cjs/features/Headers.js.map +0 -1
  32. package/build/cjs/features/Ordering.js +0 -83
  33. package/build/cjs/features/Ordering.js.map +0 -1
  34. package/build/cjs/features/Pinning.js +0 -163
  35. package/build/cjs/features/Pinning.js.map +0 -1
  36. package/build/cjs/features/Sorting.js +0 -269
  37. package/build/cjs/features/Sorting.js.map +0 -1
  38. package/build/cjs/features/Visibility.js +0 -160
  39. package/build/cjs/features/Visibility.js.map +0 -1
  40. package/build/cjs/filterTypes.js +0 -172
  41. package/build/cjs/filterTypes.js.map +0 -1
  42. package/build/cjs/sortTypes.js +0 -121
  43. package/build/cjs/sortTypes.js.map +0 -1
  44. package/build/cjs/utils/columnFilterRowsFn.js +0 -130
  45. package/build/cjs/utils/columnFilterRowsFn.js.map +0 -1
  46. package/build/cjs/utils/expandRowsFn.js +0 -38
  47. package/build/cjs/utils/expandRowsFn.js.map +0 -1
  48. package/build/cjs/utils/globalFilterRowsFn.js +0 -100
  49. package/build/cjs/utils/globalFilterRowsFn.js.map +0 -1
  50. package/build/cjs/utils/groupRowsFn.js +0 -154
  51. package/build/cjs/utils/groupRowsFn.js.map +0 -1
  52. package/build/cjs/utils/sortRowsFn.js +0 -93
  53. package/build/cjs/utils/sortRowsFn.js.map +0 -1
  54. package/build/cjs/utils.js +0 -143
  55. package/build/cjs/utils.js.map +0 -1
  56. package/build/types/aggregationTypes.d.ts +0 -22
  57. package/build/types/core.d.ts +0 -126
  58. package/build/types/createTable.d.ts +0 -35
  59. package/build/types/features/ColumnSizing.d.ts +0 -73
  60. package/build/types/features/Expanding.d.ts +0 -52
  61. package/build/types/features/Filters.d.ts +0 -93
  62. package/build/types/features/Grouping.d.ts +0 -82
  63. package/build/types/features/Headers.d.ts +0 -41
  64. package/build/types/features/Ordering.d.ts +0 -19
  65. package/build/types/features/Pinning.d.ts +0 -39
  66. package/build/types/features/Sorting.d.ts +0 -75
  67. package/build/types/features/Visibility.d.ts +0 -47
  68. package/build/types/filterTypes.d.ts +0 -50
  69. package/build/types/sortTypes.d.ts +0 -17
  70. package/build/types/types.d.ts +0 -124
  71. package/build/types/utils/columnFilterRowsFn.d.ts +0 -2
  72. package/build/types/utils/expandRowsFn.d.ts +0 -2
  73. package/build/types/utils/globalFilterRowsFn.d.ts +0 -2
  74. package/build/types/utils/groupRowsFn.d.ts +0 -2
  75. package/build/types/utils/sortRowsFn.d.ts +0 -2
  76. package/build/types/utils.d.ts +0 -24
  77. package/src/aggregationTypes.ts +0 -115
  78. package/src/core.tsx +0 -1232
  79. package/src/createTable.tsx +0 -181
  80. package/src/features/ColumnSizing.ts +0 -482
  81. package/src/features/Expanding.ts +0 -388
  82. package/src/features/Filters.ts +0 -707
  83. package/src/features/Grouping.ts +0 -451
  84. package/src/features/Headers.ts +0 -944
  85. package/src/features/Ordering.ts +0 -134
  86. package/src/features/Pinning.ts +0 -213
  87. package/src/features/Sorting.ts +0 -487
  88. package/src/features/Visibility.ts +0 -281
  89. package/src/features/withPagination.oldts +0 -208
  90. package/src/features/withRowSelection.oldts +0 -467
  91. package/src/filterTypes.ts +0 -251
  92. package/src/sortTypes.ts +0 -159
  93. package/src/types.ts +0 -314
  94. package/src/utils/columnFilterRowsFn.ts +0 -162
  95. package/src/utils/expandRowsFn.ts +0 -53
  96. package/src/utils/globalFilterRowsFn.ts +0 -129
  97. package/src/utils/groupRowsFn.ts +0 -196
  98. package/src/utils/sortRowsFn.ts +0 -115
  99. package/src/utils.tsx +0 -249
@@ -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
- }