@tanstack/react-table 8.0.0-alpha.7 → 8.0.0-alpha.70

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 (113) hide show
  1. package/build/cjs/react-table/src/index.js +133 -0
  2. package/build/cjs/react-table/src/index.js.map +1 -0
  3. package/build/cjs/table-core/build/esm/index.js +4033 -0
  4. package/build/cjs/table-core/build/esm/index.js.map +1 -0
  5. package/build/esm/index.js +3342 -4072
  6. package/build/esm/index.js.map +1 -1
  7. package/build/stats-html.html +1 -1
  8. package/build/stats-react.json +24 -783
  9. package/build/types/index.d.ts +16 -8
  10. package/build/umd/index.development.js +3372 -4072
  11. package/build/umd/index.development.js.map +1 -1
  12. package/build/umd/index.production.js +11 -1
  13. package/build/umd/index.production.js.map +1 -1
  14. package/package.json +5 -1
  15. package/src/index.tsx +113 -8
  16. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js +0 -112
  17. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js.map +0 -1
  18. package/build/cjs/aggregationTypes.js +0 -130
  19. package/build/cjs/aggregationTypes.js.map +0 -1
  20. package/build/cjs/core.js +0 -552
  21. package/build/cjs/core.js.map +0 -1
  22. package/build/cjs/createTable.js +0 -122
  23. package/build/cjs/createTable.js.map +0 -1
  24. package/build/cjs/features/ColumnSizing.js +0 -317
  25. package/build/cjs/features/ColumnSizing.js.map +0 -1
  26. package/build/cjs/features/Expanding.js +0 -251
  27. package/build/cjs/features/Expanding.js.map +0 -1
  28. package/build/cjs/features/Filters.js +0 -445
  29. package/build/cjs/features/Filters.js.map +0 -1
  30. package/build/cjs/features/Grouping.js +0 -249
  31. package/build/cjs/features/Grouping.js.map +0 -1
  32. package/build/cjs/features/Headers.js +0 -549
  33. package/build/cjs/features/Headers.js.map +0 -1
  34. package/build/cjs/features/Ordering.js +0 -86
  35. package/build/cjs/features/Ordering.js.map +0 -1
  36. package/build/cjs/features/Pagination.js +0 -198
  37. package/build/cjs/features/Pagination.js.map +0 -1
  38. package/build/cjs/features/Pinning.js +0 -149
  39. package/build/cjs/features/Pinning.js.map +0 -1
  40. package/build/cjs/features/RowSelection.js +0 -541
  41. package/build/cjs/features/RowSelection.js.map +0 -1
  42. package/build/cjs/features/Sorting.js +0 -327
  43. package/build/cjs/features/Sorting.js.map +0 -1
  44. package/build/cjs/features/Visibility.js +0 -166
  45. package/build/cjs/features/Visibility.js.map +0 -1
  46. package/build/cjs/filterTypes.js +0 -172
  47. package/build/cjs/filterTypes.js.map +0 -1
  48. package/build/cjs/index.js +0 -32
  49. package/build/cjs/index.js.map +0 -1
  50. package/build/cjs/sortTypes.js +0 -122
  51. package/build/cjs/sortTypes.js.map +0 -1
  52. package/build/cjs/utils/columnFilterRowsFn.js +0 -131
  53. package/build/cjs/utils/columnFilterRowsFn.js.map +0 -1
  54. package/build/cjs/utils/expandRowsFn.js +0 -38
  55. package/build/cjs/utils/expandRowsFn.js.map +0 -1
  56. package/build/cjs/utils/globalFilterRowsFn.js +0 -101
  57. package/build/cjs/utils/globalFilterRowsFn.js.map +0 -1
  58. package/build/cjs/utils/groupRowsFn.js +0 -155
  59. package/build/cjs/utils/groupRowsFn.js.map +0 -1
  60. package/build/cjs/utils/paginateRowsFn.js +0 -44
  61. package/build/cjs/utils/paginateRowsFn.js.map +0 -1
  62. package/build/cjs/utils/sortRowsFn.js +0 -94
  63. package/build/cjs/utils/sortRowsFn.js.map +0 -1
  64. package/build/cjs/utils.js +0 -141
  65. package/build/cjs/utils.js.map +0 -1
  66. package/build/types/aggregationTypes.d.ts +0 -22
  67. package/build/types/core.d.ts +0 -109
  68. package/build/types/createTable.d.ts +0 -52
  69. package/build/types/features/ColumnSizing.d.ts +0 -67
  70. package/build/types/features/Expanding.d.ts +0 -53
  71. package/build/types/features/Filters.d.ts +0 -98
  72. package/build/types/features/Grouping.d.ts +0 -82
  73. package/build/types/features/Headers.d.ts +0 -41
  74. package/build/types/features/Ordering.d.ts +0 -19
  75. package/build/types/features/Pagination.d.ts +0 -44
  76. package/build/types/features/Pinning.d.ts +0 -39
  77. package/build/types/features/RowSelection.d.ts +0 -66
  78. package/build/types/features/Sorting.d.ts +0 -78
  79. package/build/types/features/Visibility.d.ts +0 -47
  80. package/build/types/filterTypes.d.ts +0 -50
  81. package/build/types/sortTypes.d.ts +0 -18
  82. package/build/types/types.d.ts +0 -127
  83. package/build/types/utils/columnFilterRowsFn.d.ts +0 -2
  84. package/build/types/utils/expandRowsFn.d.ts +0 -2
  85. package/build/types/utils/globalFilterRowsFn.d.ts +0 -2
  86. package/build/types/utils/groupRowsFn.d.ts +0 -2
  87. package/build/types/utils/paginateRowsFn.d.ts +0 -2
  88. package/build/types/utils/sortRowsFn.d.ts +0 -2
  89. package/build/types/utils.d.ts +0 -24
  90. package/src/aggregationTypes.ts +0 -115
  91. package/src/core.tsx +0 -1091
  92. package/src/createTable.tsx +0 -264
  93. package/src/features/ColumnSizing.ts +0 -453
  94. package/src/features/Expanding.ts +0 -406
  95. package/src/features/Filters.ts +0 -762
  96. package/src/features/Grouping.ts +0 -466
  97. package/src/features/Headers.ts +0 -912
  98. package/src/features/Ordering.ts +0 -133
  99. package/src/features/Pagination.ts +0 -325
  100. package/src/features/Pinning.ts +0 -198
  101. package/src/features/RowSelection.ts +0 -831
  102. package/src/features/Sorting.ts +0 -547
  103. package/src/features/Visibility.ts +0 -279
  104. package/src/filterTypes.ts +0 -251
  105. package/src/sortTypes.ts +0 -159
  106. package/src/types.ts +0 -331
  107. package/src/utils/columnFilterRowsFn.ts +0 -155
  108. package/src/utils/expandRowsFn.ts +0 -50
  109. package/src/utils/globalFilterRowsFn.ts +0 -122
  110. package/src/utils/groupRowsFn.ts +0 -194
  111. package/src/utils/paginateRowsFn.ts +0 -34
  112. package/src/utils/sortRowsFn.ts +0 -115
  113. package/src/utils.tsx +0 -195
@@ -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(instance.initialState?.columnFilters ?? [])
632
- },
633
-
634
- getColumnFilteredRowModel: memo(
635
- () => [
636
- instance.getState().columnFilters,
637
- instance.getCoreRowModel(),
638
- instance.options.columnFilterRowsFn,
639
- ],
640
- (columnFilters, rowModel, columnFiltersFn) => {
641
- const columnFilteredRowModel = (() => {
642
- if (!columnFilters?.length || !columnFiltersFn) {
643
- return rowModel
644
- }
645
-
646
- if (process.env.NODE_ENV !== 'production' && instance.options.debug)
647
- console.info('Column Filtering...')
648
-
649
- return columnFiltersFn(instance as any, rowModel)
650
- })()
651
-
652
- // Now that each filtered column has it's partially filtered rows,
653
- // lets assign the final filtered rows to all of the other columns
654
- const nonFilteredColumns = instance
655
- .getAllLeafColumns()
656
- .filter(
657
- column =>
658
- !instance.getState().columnFilters?.find(d => d.id === column.id)
659
- )
660
-
661
- // This essentially enables faceted filter options to be built easily
662
- // using every column's preFilteredRows value
663
-
664
- nonFilteredColumns.forEach(column => {
665
- column.getPreFilteredRows = () => columnFilteredRowModel.rows
666
- })
667
-
668
- return columnFilteredRowModel
669
- },
670
- { key: 'getColumnFilteredRowModel', debug: instance.options.debug }
671
- ),
672
-
673
- // These might be easier to remember than "column" filtered rows
674
- getPreFilteredRowModel: () => instance.getCoreRowModel(),
675
- getPreFilteredRows: () => instance.getCoreRowModel().rows,
676
- getPreFilteredFlatRows: () => instance.getCoreRowModel().flatRows,
677
- getPreFilteredRowsById: () => instance.getCoreRowModel().rowsById,
678
-
679
- // Pre Column Filter
680
- getPreColumnFilteredRows: () => instance.getCoreRowModel().rows,
681
- getPreColumnFilteredFlatRows: () => instance.getCoreRowModel().flatRows,
682
- getPreColumnFilteredRowsById: () => instance.getCoreRowModel().rowsById,
683
- getColumnFilteredRows: () => instance.getColumnFilteredRowModel().rows,
684
-
685
- getColumnFilteredFlatRows: () =>
686
- instance.getColumnFilteredRowModel().flatRows,
687
- getColumnFilteredRowsById: () =>
688
- instance.getColumnFilteredRowModel().rowsById,
689
- getGlobalFilteredRowModel: memo(
690
- () => [
691
- instance.getState().globalFilter,
692
- instance.getColumnFilteredRowModel(),
693
- instance.options.globalFilterRowsFn,
694
- ],
695
- (globalFilterValue, columnFilteredRowModel, globalFiltersFn) => {
696
- const globalFilteredRowModel = (() => {
697
- if (!globalFiltersFn || !globalFilterValue) {
698
- return columnFilteredRowModel
699
- }
700
-
701
- if (process.env.NODE_ENV !== 'production' && instance.options.debug)
702
- console.info('Global Filtering...')
703
-
704
- return globalFiltersFn(
705
- instance as ReactTable<any, any, any, any, any>,
706
- columnFilteredRowModel
707
- )
708
- })()
709
-
710
- // Now that each filtered column has it's partially filtered rows,
711
- // lets assign the final filtered rows to all of the other columns
712
- const nonFilteredColumns = instance
713
- .getAllLeafColumns()
714
- .filter(
715
- column =>
716
- !instance.getState().columnFilters?.find(d => d.id === column.id)
717
- )
718
-
719
- // This essentially enables faceted filter options to be built easily
720
- // using every column's preFilteredRows value
721
-
722
- nonFilteredColumns.forEach(column => {
723
- column.getPreFilteredRows = () => globalFilteredRowModel.rows
724
- })
725
-
726
- return globalFilteredRowModel
727
- },
728
- {
729
- key: 'getGlobalFilteredRowModel',
730
- debug: instance.options.debug,
731
- onChange: () => {
732
- instance._notifySortingReset()
733
- },
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
- }