@tanstack/react-table 8.0.0-alpha.5 → 8.0.0-alpha.50

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