@tanstack/table-core 8.0.0-alpha.67 → 8.0.0-alpha.68
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.
- package/build/cjs/aggregationFns.js +25 -37
- package/build/cjs/aggregationFns.js.map +1 -1
- package/build/cjs/core.js +167 -46
- package/build/cjs/core.js.map +1 -1
- package/build/cjs/createTable.js +24 -40
- package/build/cjs/createTable.js.map +1 -1
- package/build/cjs/features/Cells.js +28 -34
- package/build/cjs/features/Cells.js.map +1 -1
- package/build/cjs/features/ColumnSizing.js +90 -107
- package/build/cjs/features/ColumnSizing.js.map +1 -1
- package/build/cjs/features/Columns.js +52 -79
- package/build/cjs/features/Columns.js.map +1 -1
- package/build/cjs/features/Expanding.js +48 -57
- package/build/cjs/features/Expanding.js.map +1 -1
- package/build/cjs/features/Filters.js +96 -191
- package/build/cjs/features/Filters.js.map +1 -1
- package/build/cjs/features/Grouping.js +52 -70
- package/build/cjs/features/Grouping.js.map +1 -1
- package/build/cjs/features/Headers.js +109 -165
- package/build/cjs/features/Headers.js.map +1 -1
- package/build/cjs/features/Ordering.js +30 -42
- package/build/cjs/features/Ordering.js.map +1 -1
- package/build/cjs/features/Pagination.js +63 -71
- package/build/cjs/features/Pagination.js.map +1 -1
- package/build/cjs/features/Pinning.js +65 -121
- package/build/cjs/features/Pinning.js.map +1 -1
- package/build/cjs/features/RowSelection.js +92 -111
- package/build/cjs/features/RowSelection.js.map +1 -1
- package/build/cjs/features/Rows.js +32 -22
- package/build/cjs/features/Rows.js.map +1 -1
- package/build/cjs/features/Sorting.js +49 -68
- package/build/cjs/features/Sorting.js.map +1 -1
- package/build/cjs/features/Visibility.js +43 -87
- package/build/cjs/features/Visibility.js.map +1 -1
- package/build/cjs/filterFns.js +48 -72
- package/build/cjs/filterFns.js.map +1 -1
- package/build/cjs/index.js +13 -13
- package/build/cjs/sortingFns.js +21 -21
- package/build/cjs/sortingFns.js.map +1 -1
- package/build/cjs/utils/filterRowsUtils.js +49 -55
- package/build/cjs/utils/filterRowsUtils.js.map +1 -1
- package/build/cjs/utils/getCoreRowModel.js +98 -0
- package/build/cjs/utils/getCoreRowModel.js.map +1 -0
- package/build/cjs/utils/getExpandedRowModel.js +17 -21
- package/build/cjs/utils/getExpandedRowModel.js.map +1 -1
- package/build/cjs/utils/getFacetedMinMaxValues.js +48 -0
- package/build/cjs/utils/getFacetedMinMaxValues.js.map +1 -0
- package/build/cjs/utils/getFacetedRowModel.js +50 -0
- package/build/cjs/utils/getFacetedRowModel.js.map +1 -0
- package/build/cjs/utils/getFacetedUniqueValues.js +48 -0
- package/build/cjs/utils/getFacetedUniqueValues.js.map +1 -0
- package/build/cjs/utils/getFilteredRowModel.js +130 -0
- package/build/cjs/utils/getFilteredRowModel.js.map +1 -0
- package/build/cjs/utils/getGroupedRowModel.js +126 -136
- package/build/cjs/utils/getGroupedRowModel.js.map +1 -1
- package/build/cjs/utils/getPaginationRowModel.js +39 -39
- package/build/cjs/utils/getPaginationRowModel.js.map +1 -1
- package/build/cjs/utils/getSortedRowModel.js +112 -0
- package/build/cjs/utils/getSortedRowModel.js.map +1 -0
- package/build/cjs/utils.js +36 -207
- package/build/cjs/utils.js.map +1 -1
- package/build/esm/index.js +1729 -2313
- package/build/esm/index.js.map +1 -1
- package/build/stats-html.html +1 -1
- package/build/stats-react.json +421 -481
- package/build/types/core.d.ts +3 -5
- package/build/types/features/Cells.d.ts +1 -1
- package/build/types/features/Columns.d.ts +1 -1
- package/build/types/features/Filters.d.ts +10 -5
- package/build/types/features/Grouping.d.ts +4 -3
- package/build/types/features/Rows.d.ts +4 -3
- package/build/types/index.d.ts +6 -4
- package/build/types/types.d.ts +3 -13
- package/build/types/utils/filterRowsUtils.d.ts +3 -3
- package/build/types/utils/getCoreRowModel.d.ts +2 -0
- package/build/types/utils/getFacetedMinMaxValues.d.ts +2 -0
- package/build/types/utils/getFacetedRowModel.d.ts +2 -0
- package/build/types/utils/getFacetedUniqueValues.d.ts +2 -0
- package/build/types/utils/{getCoreRowModelSync.d.ts → getFilteredRowModel.d.ts} +1 -1
- package/build/types/utils/getGroupedRowModel.d.ts +1 -1
- package/build/types/utils/getSortedRowModel.d.ts +2 -0
- package/build/types/utils.d.ts +1 -17
- package/build/umd/index.development.js +1730 -2316
- package/build/umd/index.development.js.map +1 -1
- package/build/umd/index.production.js +1 -1
- package/build/umd/index.production.js.map +1 -1
- package/package.json +1 -1
- package/src/core.ts +197 -45
- package/src/features/Cells.ts +7 -11
- package/src/features/ColumnSizing.ts +6 -5
- package/src/features/Columns.ts +4 -8
- package/src/features/Filters.ts +95 -156
- package/src/features/Grouping.ts +16 -20
- package/src/features/Rows.ts +21 -6
- package/src/features/Sorting.ts +2 -2
- package/src/filterFns.ts +9 -9
- package/src/index.ts +12 -4
- package/src/sortingFns.ts +11 -11
- package/src/types.ts +3 -16
- package/src/utils/filterRowsUtils.ts +47 -68
- package/src/utils/{getCoreRowModelSync.ts → getCoreRowModel.ts} +2 -8
- package/src/utils/getFacetedMinMaxValues.ts +37 -0
- package/src/utils/getFacetedRowModel.ts +50 -0
- package/src/utils/getFacetedUniqueValues.ts +37 -0
- package/src/utils/{getFilteredRowModelSync.ts → getFilteredRowModel.ts} +29 -20
- package/src/utils/getGroupedRowModel.ts +52 -61
- package/src/utils/{getSortedRowModelSync.ts → getSortedRowModel.ts} +3 -3
- package/src/utils.ts +28 -236
- package/build/cjs/_virtual/_rollupPluginBabelHelpers.js +0 -112
- package/build/cjs/_virtual/_rollupPluginBabelHelpers.js.map +0 -1
- package/build/cjs/utils/getCoreRowModelAsync.js +0 -125
- package/build/cjs/utils/getCoreRowModelAsync.js.map +0 -1
- package/build/cjs/utils/getCoreRowModelSync.js +0 -102
- package/build/cjs/utils/getCoreRowModelSync.js.map +0 -1
- package/build/cjs/utils/getFilteredRowModelSync.js +0 -125
- package/build/cjs/utils/getFilteredRowModelSync.js.map +0 -1
- package/build/cjs/utils/getSortedRowModelSync.js +0 -118
- package/build/cjs/utils/getSortedRowModelSync.js.map +0 -1
- package/build/types/utils/getCoreRowModelAsync.d.ts +0 -4
- package/build/types/utils/getFilteredRowModelAsync.d.ts +0 -4
- package/build/types/utils/getFilteredRowModelSync.d.ts +0 -2
- package/build/types/utils/getSortedRowModelAsync.d.ts +0 -13
- package/build/types/utils/getSortedRowModelSync.d.ts +0 -2
- package/src/utils/getCoreRowModelAsync.ts +0 -104
- package/src/utils/getFilteredRowModelAsync.ts +0 -157
- package/src/utils/getSortedRowModelAsync.ts +0 -200
package/src/features/Filters.ts
CHANGED
|
@@ -16,13 +16,12 @@ import {
|
|
|
16
16
|
memo,
|
|
17
17
|
Overwrite,
|
|
18
18
|
} from '../utils'
|
|
19
|
-
import { filterRows } from '../utils/filterRowsUtils'
|
|
20
19
|
|
|
21
20
|
export type FiltersTableState = {
|
|
22
21
|
columnFilters: ColumnFiltersState
|
|
23
22
|
globalFilter: any
|
|
24
|
-
|
|
25
|
-
|
|
23
|
+
// filtersProgress: number
|
|
24
|
+
// facetProgress: Record<string, number>
|
|
26
25
|
}
|
|
27
26
|
|
|
28
27
|
export type ColumnFiltersState = ColumnFilter[]
|
|
@@ -80,11 +79,14 @@ export type FiltersColumn<TGenerics extends TableGenerics> = {
|
|
|
80
79
|
getCanFilter: () => boolean
|
|
81
80
|
getCanGlobalFilter: () => boolean
|
|
82
81
|
getFacetedRowModel: () => RowModel<TGenerics>
|
|
82
|
+
_getFacetedRowModel?: () => RowModel<TGenerics>
|
|
83
83
|
getIsFiltered: () => boolean
|
|
84
84
|
getFilterValue: () => unknown
|
|
85
85
|
getFilterIndex: () => number
|
|
86
86
|
getFacetedUniqueValues: () => Map<any, number>
|
|
87
|
+
_getFacetedUniqueValues?: () => Map<any, number>
|
|
87
88
|
getFacetedMinMaxValues: () => [any, any]
|
|
89
|
+
_getFacetedMinMaxValues?: () => [any, any]
|
|
88
90
|
}
|
|
89
91
|
|
|
90
92
|
export type FiltersRow<TGenerics extends TableGenerics> = {
|
|
@@ -97,19 +99,33 @@ export type FiltersOptions<TGenerics extends TableGenerics> = {
|
|
|
97
99
|
manualFiltering?: boolean
|
|
98
100
|
filterFromLeafRows?: boolean
|
|
99
101
|
filterFns?: TGenerics['FilterFns']
|
|
102
|
+
getFilteredRowModel?: (
|
|
103
|
+
instance: TableInstance<TGenerics>
|
|
104
|
+
) => () => RowModel<TGenerics>
|
|
100
105
|
|
|
101
106
|
// Column
|
|
102
107
|
onColumnFiltersChange?: OnChangeFn<ColumnFiltersState>
|
|
103
108
|
enableColumnFilters?: boolean
|
|
104
|
-
getFilteredRowModel?: (
|
|
105
|
-
instance: TableInstance<TGenerics>
|
|
106
|
-
) => () => RowModel<TGenerics>
|
|
107
109
|
|
|
108
110
|
// Global
|
|
109
111
|
globalFilterFn?: FilterFnOption<TGenerics>
|
|
110
112
|
onGlobalFilterChange?: OnChangeFn<any>
|
|
111
113
|
enableGlobalFilter?: boolean
|
|
112
114
|
getColumnCanGlobalFilter?: (column: Column<TGenerics>) => boolean
|
|
115
|
+
|
|
116
|
+
// Faceting
|
|
117
|
+
getFacetedRowModel?: (
|
|
118
|
+
instance: TableInstance<TGenerics>,
|
|
119
|
+
columnId: string
|
|
120
|
+
) => () => RowModel<TGenerics>
|
|
121
|
+
getFacetedUniqueValues?: (
|
|
122
|
+
instance: TableInstance<TGenerics>,
|
|
123
|
+
columnId: string
|
|
124
|
+
) => () => Map<any, number>
|
|
125
|
+
getFacetedMinMaxValues?: (
|
|
126
|
+
instance: TableInstance<TGenerics>,
|
|
127
|
+
columnId: string
|
|
128
|
+
) => () => [number, number]
|
|
113
129
|
}
|
|
114
130
|
|
|
115
131
|
export type FiltersInstance<TGenerics extends TableGenerics> = {
|
|
@@ -127,10 +143,12 @@ export type FiltersInstance<TGenerics extends TableGenerics> = {
|
|
|
127
143
|
resetGlobalFilter: () => void
|
|
128
144
|
getGlobalAutoFilterFn: () => FilterFn<TGenerics> | undefined
|
|
129
145
|
getGlobalFilterFn: () => FilterFn<TGenerics> | undefined
|
|
130
|
-
|
|
131
146
|
getGlobalFacetedRowModel: () => RowModel<TGenerics>
|
|
147
|
+
_getGlobalFacetedRowModel?: () => RowModel<TGenerics>
|
|
132
148
|
getGlobalFacetedUniqueValues: () => Map<any, number>
|
|
149
|
+
_getGlobalFacetedUniqueValues?: () => Map<any, number>
|
|
133
150
|
getGlobalFacetedMinMaxValues: () => [number, number]
|
|
151
|
+
_getGlobalFacetedMinMaxValues?: () => [number, number]
|
|
134
152
|
}
|
|
135
153
|
|
|
136
154
|
//
|
|
@@ -148,8 +166,8 @@ export const Filters: TableFeature = {
|
|
|
148
166
|
return {
|
|
149
167
|
columnFilters: [],
|
|
150
168
|
globalFilter: undefined,
|
|
151
|
-
|
|
152
|
-
|
|
169
|
+
// filtersProgress: 1,
|
|
170
|
+
// facetProgress: {},
|
|
153
171
|
...state,
|
|
154
172
|
}
|
|
155
173
|
},
|
|
@@ -160,12 +178,13 @@ export const Filters: TableFeature = {
|
|
|
160
178
|
return {
|
|
161
179
|
onColumnFiltersChange: makeStateUpdater('columnFilters', instance),
|
|
162
180
|
onGlobalFilterChange: makeStateUpdater('globalFilter', instance),
|
|
163
|
-
filterFromLeafRows:
|
|
181
|
+
filterFromLeafRows: false,
|
|
164
182
|
globalFilterFn: 'auto',
|
|
165
183
|
getColumnCanGlobalFilter: column => {
|
|
166
184
|
const value = instance
|
|
167
185
|
.getCoreRowModel()
|
|
168
|
-
.flatRows[0]?.getAllCellsByColumnId()
|
|
186
|
+
.flatRows[0]?.getAllCellsByColumnId()
|
|
187
|
+
[column.id]?.getValue()
|
|
169
188
|
|
|
170
189
|
return typeof value === 'string'
|
|
171
190
|
},
|
|
@@ -181,7 +200,7 @@ export const Filters: TableFeature = {
|
|
|
181
200
|
getAutoFilterFn: () => {
|
|
182
201
|
const firstRow = instance.getCoreRowModel().flatRows[0]
|
|
183
202
|
|
|
184
|
-
const value = firstRow?.
|
|
203
|
+
const value = firstRow?.getValue(column.id)
|
|
185
204
|
|
|
186
205
|
if (typeof value === 'string') {
|
|
187
206
|
return filterFns.includesString
|
|
@@ -284,58 +303,38 @@ export const Filters: TableFeature = {
|
|
|
284
303
|
return [newFilterObj]
|
|
285
304
|
})
|
|
286
305
|
},
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
instance.getFilteredRowModel(),
|
|
294
|
-
],
|
|
295
|
-
(rowModel, columnFilters, globalFilter, _) => {
|
|
296
|
-
if (!columnFilters?.length && !globalFilter) {
|
|
297
|
-
return rowModel
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
return filterRows(
|
|
301
|
-
rowModel.rows,
|
|
302
|
-
[
|
|
303
|
-
...columnFilters.map(d => d.id).filter(d => d !== column.id),
|
|
304
|
-
globalFilter ? '__global__' : undefined,
|
|
305
|
-
].filter(Boolean) as string[],
|
|
306
|
-
instance
|
|
307
|
-
)
|
|
308
|
-
},
|
|
309
|
-
{
|
|
310
|
-
key:
|
|
311
|
-
process.env.NODE_ENV === 'production' &&
|
|
312
|
-
'getFacetedRowModel_' + column.id,
|
|
313
|
-
debug: () =>
|
|
314
|
-
instance.options.debugAll ?? instance.options.debugColumns,
|
|
306
|
+
_getFacetedRowModel:
|
|
307
|
+
instance.options.getFacetedRowModel &&
|
|
308
|
+
instance.options.getFacetedRowModel(instance, column.id),
|
|
309
|
+
getFacetedRowModel: () => {
|
|
310
|
+
if (!column._getFacetedRowModel) {
|
|
311
|
+
return instance.getPreFilteredRowModel()
|
|
315
312
|
}
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
instance.options.debugAll ?? instance.options.debugColumns,
|
|
313
|
+
|
|
314
|
+
return column._getFacetedRowModel()
|
|
315
|
+
},
|
|
316
|
+
_getFacetedUniqueValues:
|
|
317
|
+
instance.options.getFacetedUniqueValues &&
|
|
318
|
+
instance.options.getFacetedUniqueValues(instance, column.id),
|
|
319
|
+
getFacetedUniqueValues: () => {
|
|
320
|
+
if (!column._getFacetedUniqueValues) {
|
|
321
|
+
return new Map()
|
|
326
322
|
}
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
instance.options.debugAll ?? instance.options.debugColumns,
|
|
323
|
+
|
|
324
|
+
return column._getFacetedUniqueValues()
|
|
325
|
+
},
|
|
326
|
+
_getFacetedMinMaxValues:
|
|
327
|
+
instance.options.getFacetedMinMaxValues &&
|
|
328
|
+
instance.options.getFacetedMinMaxValues(instance, column.id),
|
|
329
|
+
getFacetedMinMaxValues: () => {
|
|
330
|
+
if (!column._getFacetedMinMaxValues) {
|
|
331
|
+
return [NaN, NaN]
|
|
337
332
|
}
|
|
338
|
-
|
|
333
|
+
|
|
334
|
+
return column._getFacetedMinMaxValues()
|
|
335
|
+
},
|
|
336
|
+
// () => [column.getFacetedRowModel()],
|
|
337
|
+
// facetedRowModel => getRowModelMinMaxValues(facetedRowModel, column.id),
|
|
339
338
|
}
|
|
340
339
|
},
|
|
341
340
|
|
|
@@ -408,15 +407,10 @@ export const Filters: TableFeature = {
|
|
|
408
407
|
},
|
|
409
408
|
|
|
410
409
|
getPreFilteredRowModel: () => instance.getCoreRowModel(),
|
|
410
|
+
_getFilteredRowModel:
|
|
411
|
+
instance.options.getFilteredRowModel &&
|
|
412
|
+
instance.options.getFilteredRowModel(instance),
|
|
411
413
|
getFilteredRowModel: () => {
|
|
412
|
-
if (
|
|
413
|
-
!instance._getFilteredRowModel &&
|
|
414
|
-
instance.options.getFilteredRowModel
|
|
415
|
-
) {
|
|
416
|
-
instance._getFilteredRowModel =
|
|
417
|
-
instance.options.getFilteredRowModel(instance)
|
|
418
|
-
}
|
|
419
|
-
|
|
420
414
|
if (
|
|
421
415
|
instance.options.manualFiltering ||
|
|
422
416
|
!instance._getFilteredRowModel
|
|
@@ -427,56 +421,42 @@ export const Filters: TableFeature = {
|
|
|
427
421
|
return instance._getFilteredRowModel()
|
|
428
422
|
},
|
|
429
423
|
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
instance.getState().columnFilters,
|
|
434
|
-
instance.getState().globalFilter,
|
|
435
|
-
// Include this to force the filtered facet info to be calculated
|
|
436
|
-
instance.getFilteredRowModel(),
|
|
437
|
-
],
|
|
438
|
-
(rowModel, columnFilters, globalFilter, _) => {
|
|
439
|
-
if (!columnFilters?.length && !globalFilter) {
|
|
440
|
-
return rowModel
|
|
441
|
-
}
|
|
424
|
+
_getGlobalFacetedRowModel:
|
|
425
|
+
instance.options.getFacetedRowModel &&
|
|
426
|
+
instance.options.getFacetedRowModel(instance, '__global__'),
|
|
442
427
|
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
{
|
|
450
|
-
key:
|
|
451
|
-
process.env.NODE_ENV === 'production' && 'getGlobalFacetedRowModel',
|
|
452
|
-
debug: () =>
|
|
453
|
-
instance.options.debugAll ?? instance.options.debugColumns,
|
|
428
|
+
getGlobalFacetedRowModel: () => {
|
|
429
|
+
if (
|
|
430
|
+
instance.options.manualFiltering ||
|
|
431
|
+
!instance._getGlobalFacetedRowModel
|
|
432
|
+
) {
|
|
433
|
+
return instance.getPreFilteredRowModel()
|
|
454
434
|
}
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
instance.options.debugAll ?? instance.options.debugColumns,
|
|
435
|
+
|
|
436
|
+
return instance._getGlobalFacetedRowModel()
|
|
437
|
+
},
|
|
438
|
+
|
|
439
|
+
_getGlobalFacetedUniqueValues:
|
|
440
|
+
instance.options.getFacetedUniqueValues &&
|
|
441
|
+
instance.options.getFacetedUniqueValues(instance, '__global__'),
|
|
442
|
+
getGlobalFacetedUniqueValues: () => {
|
|
443
|
+
if (!instance._getGlobalFacetedUniqueValues) {
|
|
444
|
+
return new Map()
|
|
466
445
|
}
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
instance.options.debugAll ?? instance.options.debugColumns,
|
|
446
|
+
|
|
447
|
+
return instance._getGlobalFacetedUniqueValues()
|
|
448
|
+
},
|
|
449
|
+
|
|
450
|
+
_getGlobalFacetedMinMaxValues:
|
|
451
|
+
instance.options.getFacetedMinMaxValues &&
|
|
452
|
+
instance.options.getFacetedMinMaxValues(instance, '__global__'),
|
|
453
|
+
getGlobalFacetedMinMaxValues: () => {
|
|
454
|
+
if (!instance._getGlobalFacetedMinMaxValues) {
|
|
455
|
+
return [NaN, NaN]
|
|
478
456
|
}
|
|
479
|
-
|
|
457
|
+
|
|
458
|
+
return instance._getGlobalFacetedMinMaxValues()
|
|
459
|
+
},
|
|
480
460
|
}
|
|
481
461
|
},
|
|
482
462
|
}
|
|
@@ -494,44 +474,3 @@ export function shouldAutoRemoveFilter<TGenerics extends TableGenerics>(
|
|
|
494
474
|
(typeof value === 'string' && !value)
|
|
495
475
|
)
|
|
496
476
|
}
|
|
497
|
-
|
|
498
|
-
export function getRowModelMinMaxValues<TGenerics extends TableGenerics>(
|
|
499
|
-
rowModel: RowModel<TGenerics>,
|
|
500
|
-
columnId: string
|
|
501
|
-
) {
|
|
502
|
-
let facetedMinMaxValues: [any, any] = [
|
|
503
|
-
rowModel.flatRows[0]?.values[columnId] ?? null,
|
|
504
|
-
rowModel.flatRows[0]?.values[columnId] ?? null,
|
|
505
|
-
]
|
|
506
|
-
|
|
507
|
-
for (let i = 0; i < rowModel.flatRows.length; i++) {
|
|
508
|
-
const value = rowModel.flatRows[i]?.values[columnId]
|
|
509
|
-
|
|
510
|
-
if (value < facetedMinMaxValues[0]) {
|
|
511
|
-
facetedMinMaxValues[0] = value
|
|
512
|
-
} else if (value > facetedMinMaxValues[1]) {
|
|
513
|
-
facetedMinMaxValues[1] = value
|
|
514
|
-
}
|
|
515
|
-
}
|
|
516
|
-
|
|
517
|
-
return facetedMinMaxValues
|
|
518
|
-
}
|
|
519
|
-
|
|
520
|
-
export function getRowModelUniqueValues<TGenerics extends TableGenerics>(
|
|
521
|
-
rowModel: RowModel<TGenerics>,
|
|
522
|
-
columnId: string
|
|
523
|
-
) {
|
|
524
|
-
let facetedUniqueValues = new Map<any, number>()
|
|
525
|
-
|
|
526
|
-
for (let i = 0; i < rowModel.flatRows.length; i++) {
|
|
527
|
-
const value = rowModel.flatRows[i]?.values[columnId]
|
|
528
|
-
|
|
529
|
-
if (facetedUniqueValues.has(value)) {
|
|
530
|
-
facetedUniqueValues.set(value, (facetedUniqueValues.get(value) ?? 0) + 1)
|
|
531
|
-
} else {
|
|
532
|
-
facetedUniqueValues.set(value, 1)
|
|
533
|
-
}
|
|
534
|
-
}
|
|
535
|
-
|
|
536
|
-
return facetedUniqueValues
|
|
537
|
-
}
|
package/src/features/Grouping.ts
CHANGED
|
@@ -45,7 +45,7 @@ export type GroupingColumnDef<TGenerics extends TableGenerics> = {
|
|
|
45
45
|
row: Row<TGenerics>
|
|
46
46
|
column: Column<TGenerics>
|
|
47
47
|
cell: Cell<TGenerics>
|
|
48
|
-
|
|
48
|
+
getValue: () => TGenerics['Value']
|
|
49
49
|
}
|
|
50
50
|
>
|
|
51
51
|
enableGrouping?: boolean
|
|
@@ -58,12 +58,15 @@ export type GroupingColumn<TGenerics extends TableGenerics> = {
|
|
|
58
58
|
getGroupedIndex: () => number
|
|
59
59
|
toggleGrouping: () => void
|
|
60
60
|
getToggleGroupingHandler: () => () => void
|
|
61
|
+
getColumnAutoAggregationFn: () => AggregationFn<TGenerics> | undefined
|
|
62
|
+
getColumnAggregationFn: () => AggregationFn<TGenerics> | undefined
|
|
61
63
|
}
|
|
62
64
|
|
|
63
65
|
export type GroupingRow = {
|
|
64
66
|
groupingColumnId?: string
|
|
65
67
|
groupingValue?: any
|
|
66
68
|
getIsGrouped: () => boolean
|
|
69
|
+
groupingValuesCache: Record<string, any>
|
|
67
70
|
}
|
|
68
71
|
|
|
69
72
|
export type GroupingCell<TGenerics extends TableGenerics> = {
|
|
@@ -95,12 +98,6 @@ export type GroupingOptions<TGenerics extends TableGenerics> = {
|
|
|
95
98
|
export type GroupingColumnMode = false | 'reorder' | 'remove'
|
|
96
99
|
|
|
97
100
|
export type GroupingInstance<TGenerics extends TableGenerics> = {
|
|
98
|
-
getColumnAutoAggregationFn: (
|
|
99
|
-
columnId: string
|
|
100
|
-
) => AggregationFn<TGenerics> | undefined
|
|
101
|
-
getColumnAggregationFn: (
|
|
102
|
-
columnId: string
|
|
103
|
-
) => AggregationFn<TGenerics> | undefined
|
|
104
101
|
setGrouping: (updater: Updater<GroupingState>) => void
|
|
105
102
|
resetGrouping: () => void
|
|
106
103
|
getPreGroupedRowModel: () => RowModel<TGenerics>
|
|
@@ -175,17 +172,10 @@ export const Grouping: TableFeature = {
|
|
|
175
172
|
column.toggleGrouping()
|
|
176
173
|
}
|
|
177
174
|
},
|
|
178
|
-
|
|
179
|
-
},
|
|
180
|
-
|
|
181
|
-
createInstance: <TGenerics extends TableGenerics>(
|
|
182
|
-
instance: TableInstance<TGenerics>
|
|
183
|
-
): GroupingInstance<TGenerics> => {
|
|
184
|
-
return {
|
|
185
|
-
getColumnAutoAggregationFn: columnId => {
|
|
175
|
+
getColumnAutoAggregationFn: () => {
|
|
186
176
|
const firstRow = instance.getCoreRowModel().flatRows[0]
|
|
187
177
|
|
|
188
|
-
const value = firstRow?.
|
|
178
|
+
const value = firstRow?.getValue(column.id)
|
|
189
179
|
|
|
190
180
|
if (typeof value === 'number') {
|
|
191
181
|
return aggregationFns.sum
|
|
@@ -197,8 +187,7 @@ export const Grouping: TableFeature = {
|
|
|
197
187
|
|
|
198
188
|
return aggregationFns.count
|
|
199
189
|
},
|
|
200
|
-
getColumnAggregationFn:
|
|
201
|
-
const column = instance.getColumn(columnId)
|
|
190
|
+
getColumnAggregationFn: () => {
|
|
202
191
|
const userAggregationFns = instance.options.aggregationFns
|
|
203
192
|
|
|
204
193
|
if (!column) {
|
|
@@ -208,7 +197,7 @@ export const Grouping: TableFeature = {
|
|
|
208
197
|
return isFunction(column.aggregationFn)
|
|
209
198
|
? column.aggregationFn
|
|
210
199
|
: column.aggregationFn === 'auto'
|
|
211
|
-
?
|
|
200
|
+
? column.getColumnAutoAggregationFn()
|
|
212
201
|
: (userAggregationFns as Record<string, any>)?.[
|
|
213
202
|
column.aggregationFn as string
|
|
214
203
|
] ??
|
|
@@ -216,7 +205,13 @@ export const Grouping: TableFeature = {
|
|
|
216
205
|
column.aggregationFn as BuiltInAggregationFn
|
|
217
206
|
] as AggregationFn<TGenerics>)
|
|
218
207
|
},
|
|
208
|
+
}
|
|
209
|
+
},
|
|
219
210
|
|
|
211
|
+
createInstance: <TGenerics extends TableGenerics>(
|
|
212
|
+
instance: TableInstance<TGenerics>
|
|
213
|
+
): GroupingInstance<TGenerics> => {
|
|
214
|
+
return {
|
|
220
215
|
setGrouping: updater => instance.options.onGroupingChange?.(updater),
|
|
221
216
|
|
|
222
217
|
resetGrouping: () => {
|
|
@@ -248,6 +243,7 @@ export const Grouping: TableFeature = {
|
|
|
248
243
|
): GroupingRow => {
|
|
249
244
|
return {
|
|
250
245
|
getIsGrouped: () => !!row.groupingColumnId,
|
|
246
|
+
groupingValuesCache: {},
|
|
251
247
|
}
|
|
252
248
|
},
|
|
253
249
|
|
|
@@ -274,7 +270,7 @@ export const Grouping: TableFeature = {
|
|
|
274
270
|
column,
|
|
275
271
|
row,
|
|
276
272
|
cell,
|
|
277
|
-
|
|
273
|
+
getValue: cell.getValue,
|
|
278
274
|
})
|
|
279
275
|
: null
|
|
280
276
|
},
|
package/src/features/Rows.ts
CHANGED
|
@@ -12,7 +12,8 @@ export type CoreRow<TGenerics extends TableGenerics> = {
|
|
|
12
12
|
index: number
|
|
13
13
|
original?: TGenerics['Row']
|
|
14
14
|
depth: number
|
|
15
|
-
|
|
15
|
+
valuesCache: Record<string, any>
|
|
16
|
+
getValue: (columnId: string) => any
|
|
16
17
|
subRows: Row<TGenerics>[]
|
|
17
18
|
getLeafRows: () => Row<TGenerics>[]
|
|
18
19
|
originalSubRows?: TGenerics['Row'][]
|
|
@@ -44,7 +45,7 @@ export type RowsInstance<TGenerics extends TableGenerics> = {
|
|
|
44
45
|
original: TGenerics['Row'] | undefined,
|
|
45
46
|
rowIndex: number,
|
|
46
47
|
depth: number,
|
|
47
|
-
|
|
48
|
+
subRows?: Row<TGenerics>[]
|
|
48
49
|
) => Row<TGenerics>
|
|
49
50
|
getCoreRowModel: () => RowModel<TGenerics>
|
|
50
51
|
_getCoreRowModel?: () => RowModel<TGenerics>
|
|
@@ -73,20 +74,34 @@ export const Rows = {
|
|
|
73
74
|
) =>
|
|
74
75
|
instance.options.getRowId?.(row, index, parent) ??
|
|
75
76
|
`${parent ? [parent.id, index].join('.') : index}`,
|
|
76
|
-
createRow: (id, original, rowIndex, depth,
|
|
77
|
+
createRow: (id, original, rowIndex, depth, subRows) => {
|
|
77
78
|
let row: CoreRow<TGenerics> = {
|
|
78
79
|
id,
|
|
79
80
|
index: rowIndex,
|
|
80
81
|
original,
|
|
81
82
|
depth,
|
|
82
|
-
|
|
83
|
-
|
|
83
|
+
valuesCache: {},
|
|
84
|
+
getValue: columnId => {
|
|
85
|
+
if (row.valuesCache.hasOwnProperty(columnId)) {
|
|
86
|
+
return row.valuesCache[columnId]
|
|
87
|
+
}
|
|
88
|
+
const column = instance.getColumn(columnId)
|
|
89
|
+
if (!column.accessorFn) {
|
|
90
|
+
throw new Error()
|
|
91
|
+
}
|
|
92
|
+
row.valuesCache[columnId] = column.accessorFn(
|
|
93
|
+
row.original,
|
|
94
|
+
rowIndex
|
|
95
|
+
)
|
|
96
|
+
return row.valuesCache[columnId]
|
|
97
|
+
},
|
|
98
|
+
subRows: subRows ?? [],
|
|
84
99
|
getLeafRows: () => flattenBy(row.subRows, d => d.subRows),
|
|
85
100
|
}
|
|
86
101
|
|
|
87
102
|
for (let i = 0; i < instance._features.length; i++) {
|
|
88
103
|
const feature = instance._features[i]
|
|
89
|
-
Object.assign(row, feature
|
|
104
|
+
Object.assign(row, feature?.createRow?.(row, instance))
|
|
90
105
|
}
|
|
91
106
|
|
|
92
107
|
return row as Row<TGenerics>
|
package/src/features/Sorting.ts
CHANGED
|
@@ -130,7 +130,7 @@ export const Sorting: TableFeature = {
|
|
|
130
130
|
let isString = false
|
|
131
131
|
|
|
132
132
|
for (const row of firstRows) {
|
|
133
|
-
const value = row?.
|
|
133
|
+
const value = row?.getValue(column.id)
|
|
134
134
|
|
|
135
135
|
if (Object.prototype.toString.call(value) === '[object Date]') {
|
|
136
136
|
return sortingFns.datetime
|
|
@@ -154,7 +154,7 @@ export const Sorting: TableFeature = {
|
|
|
154
154
|
getAutoSortDir: () => {
|
|
155
155
|
const firstRow = instance.getFilteredRowModel().flatRows[0]
|
|
156
156
|
|
|
157
|
-
const value = firstRow?.
|
|
157
|
+
const value = firstRow?.getValue(column.id)
|
|
158
158
|
|
|
159
159
|
if (typeof value === 'string') {
|
|
160
160
|
return 'asc'
|
package/src/filterFns.ts
CHANGED
|
@@ -6,7 +6,7 @@ const includesString: FilterFn<any> = (
|
|
|
6
6
|
filterValue: string
|
|
7
7
|
) => {
|
|
8
8
|
const search = filterValue.toLowerCase()
|
|
9
|
-
return row.
|
|
9
|
+
return row.getValue(columnId).toLowerCase().includes(search)
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
includesString.autoRemove = (val: any) => testFalsey(val)
|
|
@@ -16,7 +16,7 @@ const includesStringSensitive: FilterFn<any> = (
|
|
|
16
16
|
columnId: string,
|
|
17
17
|
filterValue: string
|
|
18
18
|
) => {
|
|
19
|
-
return row.
|
|
19
|
+
return row.getValue(columnId).includes(filterValue)
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
includesStringSensitive.autoRemove = (val: any) => testFalsey(val)
|
|
@@ -26,7 +26,7 @@ const equalsString: FilterFn<any> = (
|
|
|
26
26
|
columnId: string,
|
|
27
27
|
filterValue: string
|
|
28
28
|
) => {
|
|
29
|
-
return row.
|
|
29
|
+
return row.getValue(columnId).toLowerCase() === filterValue.toLowerCase()
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
equalsString.autoRemove = (val: any) => testFalsey(val)
|
|
@@ -36,7 +36,7 @@ const arrIncludes: FilterFn<any> = (
|
|
|
36
36
|
columnId: string,
|
|
37
37
|
filterValue: unknown
|
|
38
38
|
) => {
|
|
39
|
-
return row.
|
|
39
|
+
return row.getValue(columnId).includes(filterValue)
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
arrIncludes.autoRemove = (val: any) => testFalsey(val) || !val?.length
|
|
@@ -46,7 +46,7 @@ const arrIncludesAll: FilterFn<any> = (
|
|
|
46
46
|
columnId: string,
|
|
47
47
|
filterValue: unknown[]
|
|
48
48
|
) => {
|
|
49
|
-
return !filterValue.some(val => !row.
|
|
49
|
+
return !filterValue.some(val => !row.getValue(columnId).includes(val))
|
|
50
50
|
}
|
|
51
51
|
|
|
52
52
|
arrIncludesAll.autoRemove = (val: any) => testFalsey(val) || !val?.length
|
|
@@ -56,13 +56,13 @@ const arrIncludesSome: FilterFn<any> = (
|
|
|
56
56
|
columnId: string,
|
|
57
57
|
filterValue: unknown[]
|
|
58
58
|
) => {
|
|
59
|
-
return filterValue.some(val => row.
|
|
59
|
+
return filterValue.some(val => row.getValue(columnId).includes(val))
|
|
60
60
|
}
|
|
61
61
|
|
|
62
62
|
arrIncludesSome.autoRemove = (val: any) => testFalsey(val) || !val?.length
|
|
63
63
|
|
|
64
64
|
const equals: FilterFn<any> = (row, columnId: string, filterValue: unknown) => {
|
|
65
|
-
return row.
|
|
65
|
+
return row.getValue(columnId) === filterValue
|
|
66
66
|
}
|
|
67
67
|
|
|
68
68
|
equals.autoRemove = (val: any) => testFalsey(val)
|
|
@@ -72,7 +72,7 @@ const weakEquals: FilterFn<any> = (
|
|
|
72
72
|
columnId: string,
|
|
73
73
|
filterValue: unknown
|
|
74
74
|
) => {
|
|
75
|
-
return row.
|
|
75
|
+
return row.getValue(columnId) == filterValue
|
|
76
76
|
}
|
|
77
77
|
|
|
78
78
|
weakEquals.autoRemove = (val: any) => testFalsey(val)
|
|
@@ -84,7 +84,7 @@ const inNumberRange: FilterFn<any> = (
|
|
|
84
84
|
) => {
|
|
85
85
|
let [min, max] = filterValue
|
|
86
86
|
|
|
87
|
-
const rowValue = row.
|
|
87
|
+
const rowValue = row.getValue(columnId)
|
|
88
88
|
return rowValue >= min && rowValue <= max
|
|
89
89
|
}
|
|
90
90
|
|
package/src/index.ts
CHANGED
|
@@ -15,10 +15,18 @@ export * from './features/Sorting'
|
|
|
15
15
|
export * from './features/Visibility'
|
|
16
16
|
export * from './features/Expanding'
|
|
17
17
|
export * from './utils'
|
|
18
|
-
export * from './utils/
|
|
19
|
-
export * from './utils/
|
|
20
|
-
export * from './utils/
|
|
21
|
-
export * from './utils/
|
|
18
|
+
export * from './utils/getCoreRowModel'
|
|
19
|
+
export * from './utils/getFilteredRowModel'
|
|
20
|
+
export * from './utils/getFacetedRowModel'
|
|
21
|
+
export * from './utils/getFacetedUniqueValues'
|
|
22
|
+
export * from './utils/getFacetedMinMaxValues'
|
|
23
|
+
export * from './utils/getSortedRowModel'
|
|
22
24
|
export * from './utils/getGroupedRowModel'
|
|
23
25
|
export * from './utils/getExpandedRowModel'
|
|
24
26
|
export * from './utils/getPaginationRowModel'
|
|
27
|
+
// Experimental Async
|
|
28
|
+
// export * from './utils/getCoreRowModelAsync'
|
|
29
|
+
// export * from './utils/getFilteredRowModelAsync'
|
|
30
|
+
// export * from './utils/getFacetedRowModelAsync'
|
|
31
|
+
// export * from './utils/getFacetedUniqueValuesAsync'
|
|
32
|
+
// export * from './utils/getFacetedMinMaxValuesAsync'
|