@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.
Files changed (126) hide show
  1. package/build/cjs/aggregationFns.js +25 -37
  2. package/build/cjs/aggregationFns.js.map +1 -1
  3. package/build/cjs/core.js +167 -46
  4. package/build/cjs/core.js.map +1 -1
  5. package/build/cjs/createTable.js +24 -40
  6. package/build/cjs/createTable.js.map +1 -1
  7. package/build/cjs/features/Cells.js +28 -34
  8. package/build/cjs/features/Cells.js.map +1 -1
  9. package/build/cjs/features/ColumnSizing.js +90 -107
  10. package/build/cjs/features/ColumnSizing.js.map +1 -1
  11. package/build/cjs/features/Columns.js +52 -79
  12. package/build/cjs/features/Columns.js.map +1 -1
  13. package/build/cjs/features/Expanding.js +48 -57
  14. package/build/cjs/features/Expanding.js.map +1 -1
  15. package/build/cjs/features/Filters.js +96 -191
  16. package/build/cjs/features/Filters.js.map +1 -1
  17. package/build/cjs/features/Grouping.js +52 -70
  18. package/build/cjs/features/Grouping.js.map +1 -1
  19. package/build/cjs/features/Headers.js +109 -165
  20. package/build/cjs/features/Headers.js.map +1 -1
  21. package/build/cjs/features/Ordering.js +30 -42
  22. package/build/cjs/features/Ordering.js.map +1 -1
  23. package/build/cjs/features/Pagination.js +63 -71
  24. package/build/cjs/features/Pagination.js.map +1 -1
  25. package/build/cjs/features/Pinning.js +65 -121
  26. package/build/cjs/features/Pinning.js.map +1 -1
  27. package/build/cjs/features/RowSelection.js +92 -111
  28. package/build/cjs/features/RowSelection.js.map +1 -1
  29. package/build/cjs/features/Rows.js +32 -22
  30. package/build/cjs/features/Rows.js.map +1 -1
  31. package/build/cjs/features/Sorting.js +49 -68
  32. package/build/cjs/features/Sorting.js.map +1 -1
  33. package/build/cjs/features/Visibility.js +43 -87
  34. package/build/cjs/features/Visibility.js.map +1 -1
  35. package/build/cjs/filterFns.js +48 -72
  36. package/build/cjs/filterFns.js.map +1 -1
  37. package/build/cjs/index.js +13 -13
  38. package/build/cjs/sortingFns.js +21 -21
  39. package/build/cjs/sortingFns.js.map +1 -1
  40. package/build/cjs/utils/filterRowsUtils.js +49 -55
  41. package/build/cjs/utils/filterRowsUtils.js.map +1 -1
  42. package/build/cjs/utils/getCoreRowModel.js +98 -0
  43. package/build/cjs/utils/getCoreRowModel.js.map +1 -0
  44. package/build/cjs/utils/getExpandedRowModel.js +17 -21
  45. package/build/cjs/utils/getExpandedRowModel.js.map +1 -1
  46. package/build/cjs/utils/getFacetedMinMaxValues.js +48 -0
  47. package/build/cjs/utils/getFacetedMinMaxValues.js.map +1 -0
  48. package/build/cjs/utils/getFacetedRowModel.js +50 -0
  49. package/build/cjs/utils/getFacetedRowModel.js.map +1 -0
  50. package/build/cjs/utils/getFacetedUniqueValues.js +48 -0
  51. package/build/cjs/utils/getFacetedUniqueValues.js.map +1 -0
  52. package/build/cjs/utils/getFilteredRowModel.js +130 -0
  53. package/build/cjs/utils/getFilteredRowModel.js.map +1 -0
  54. package/build/cjs/utils/getGroupedRowModel.js +126 -136
  55. package/build/cjs/utils/getGroupedRowModel.js.map +1 -1
  56. package/build/cjs/utils/getPaginationRowModel.js +39 -39
  57. package/build/cjs/utils/getPaginationRowModel.js.map +1 -1
  58. package/build/cjs/utils/getSortedRowModel.js +112 -0
  59. package/build/cjs/utils/getSortedRowModel.js.map +1 -0
  60. package/build/cjs/utils.js +36 -207
  61. package/build/cjs/utils.js.map +1 -1
  62. package/build/esm/index.js +1729 -2313
  63. package/build/esm/index.js.map +1 -1
  64. package/build/stats-html.html +1 -1
  65. package/build/stats-react.json +421 -481
  66. package/build/types/core.d.ts +3 -5
  67. package/build/types/features/Cells.d.ts +1 -1
  68. package/build/types/features/Columns.d.ts +1 -1
  69. package/build/types/features/Filters.d.ts +10 -5
  70. package/build/types/features/Grouping.d.ts +4 -3
  71. package/build/types/features/Rows.d.ts +4 -3
  72. package/build/types/index.d.ts +6 -4
  73. package/build/types/types.d.ts +3 -13
  74. package/build/types/utils/filterRowsUtils.d.ts +3 -3
  75. package/build/types/utils/getCoreRowModel.d.ts +2 -0
  76. package/build/types/utils/getFacetedMinMaxValues.d.ts +2 -0
  77. package/build/types/utils/getFacetedRowModel.d.ts +2 -0
  78. package/build/types/utils/getFacetedUniqueValues.d.ts +2 -0
  79. package/build/types/utils/{getCoreRowModelSync.d.ts → getFilteredRowModel.d.ts} +1 -1
  80. package/build/types/utils/getGroupedRowModel.d.ts +1 -1
  81. package/build/types/utils/getSortedRowModel.d.ts +2 -0
  82. package/build/types/utils.d.ts +1 -17
  83. package/build/umd/index.development.js +1730 -2316
  84. package/build/umd/index.development.js.map +1 -1
  85. package/build/umd/index.production.js +1 -1
  86. package/build/umd/index.production.js.map +1 -1
  87. package/package.json +1 -1
  88. package/src/core.ts +197 -45
  89. package/src/features/Cells.ts +7 -11
  90. package/src/features/ColumnSizing.ts +6 -5
  91. package/src/features/Columns.ts +4 -8
  92. package/src/features/Filters.ts +95 -156
  93. package/src/features/Grouping.ts +16 -20
  94. package/src/features/Rows.ts +21 -6
  95. package/src/features/Sorting.ts +2 -2
  96. package/src/filterFns.ts +9 -9
  97. package/src/index.ts +12 -4
  98. package/src/sortingFns.ts +11 -11
  99. package/src/types.ts +3 -16
  100. package/src/utils/filterRowsUtils.ts +47 -68
  101. package/src/utils/{getCoreRowModelSync.ts → getCoreRowModel.ts} +2 -8
  102. package/src/utils/getFacetedMinMaxValues.ts +37 -0
  103. package/src/utils/getFacetedRowModel.ts +50 -0
  104. package/src/utils/getFacetedUniqueValues.ts +37 -0
  105. package/src/utils/{getFilteredRowModelSync.ts → getFilteredRowModel.ts} +29 -20
  106. package/src/utils/getGroupedRowModel.ts +52 -61
  107. package/src/utils/{getSortedRowModelSync.ts → getSortedRowModel.ts} +3 -3
  108. package/src/utils.ts +28 -236
  109. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js +0 -112
  110. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js.map +0 -1
  111. package/build/cjs/utils/getCoreRowModelAsync.js +0 -125
  112. package/build/cjs/utils/getCoreRowModelAsync.js.map +0 -1
  113. package/build/cjs/utils/getCoreRowModelSync.js +0 -102
  114. package/build/cjs/utils/getCoreRowModelSync.js.map +0 -1
  115. package/build/cjs/utils/getFilteredRowModelSync.js +0 -125
  116. package/build/cjs/utils/getFilteredRowModelSync.js.map +0 -1
  117. package/build/cjs/utils/getSortedRowModelSync.js +0 -118
  118. package/build/cjs/utils/getSortedRowModelSync.js.map +0 -1
  119. package/build/types/utils/getCoreRowModelAsync.d.ts +0 -4
  120. package/build/types/utils/getFilteredRowModelAsync.d.ts +0 -4
  121. package/build/types/utils/getFilteredRowModelSync.d.ts +0 -2
  122. package/build/types/utils/getSortedRowModelAsync.d.ts +0 -13
  123. package/build/types/utils/getSortedRowModelSync.d.ts +0 -2
  124. package/src/utils/getCoreRowModelAsync.ts +0 -104
  125. package/src/utils/getFilteredRowModelAsync.ts +0 -157
  126. package/src/utils/getSortedRowModelAsync.ts +0 -200
@@ -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
- columnFiltersProgress: number
25
- globalFilterProgress: number
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
- columnFiltersProgress: 1,
152
- globalFilterProgress: 1,
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: true,
181
+ filterFromLeafRows: false,
164
182
  globalFilterFn: 'auto',
165
183
  getColumnCanGlobalFilter: column => {
166
184
  const value = instance
167
185
  .getCoreRowModel()
168
- .flatRows[0]?.getAllCellsByColumnId()[column.id]?.value
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?.values[column.id]
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
- getFacetedRowModel: memo(
288
- () => [
289
- instance.getPreFilteredRowModel(),
290
- instance.getState().columnFilters,
291
- instance.getState().globalFilter,
292
- // Include this to force the filtered facet info to be calculated
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
- getFacetedUniqueValues: memo(
318
- () => [column.getFacetedRowModel()],
319
- facetedRowModel => getRowModelUniqueValues(facetedRowModel, column.id),
320
- {
321
- key:
322
- process.env.NODE_ENV === 'production' &&
323
- 'column.getFacetedUniqueValues',
324
- debug: () =>
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
- getFacetedMinMaxValues: memo(
329
- () => [column.getFacetedRowModel()],
330
- facetedRowModel => getRowModelMinMaxValues(facetedRowModel, column.id),
331
- {
332
- key:
333
- process.env.NODE_ENV === 'production' &&
334
- 'column.getFacetedMinMaxValues',
335
- debug: () =>
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
- getGlobalFacetedRowModel: memo(
431
- () => [
432
- instance.getPreFilteredRowModel(),
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
- return filterRows(
444
- rowModel.rows,
445
- columnFilters.map(d => d.id),
446
- instance
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
- getGlobalFacetedUniqueValues: memo(
457
- () => [instance.getGlobalFacetedRowModel()],
458
- facetedRowModel =>
459
- getRowModelUniqueValues(facetedRowModel, '__global__'),
460
- {
461
- key:
462
- process.env.NODE_ENV === 'production' &&
463
- 'getGlobalFacetedUniqueValues',
464
- debug: () =>
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
- getGlobalFacetedMinMaxValues: memo(
469
- () => [instance.getGlobalFacetedRowModel()],
470
- facetedRowModel =>
471
- getRowModelMinMaxValues(facetedRowModel, '__global__'),
472
- {
473
- key:
474
- process.env.NODE_ENV === 'production' &&
475
- 'getGlobalFacetedMinMaxValues',
476
- debug: () =>
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
- }
@@ -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
- value: TGenerics['Value']
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?.values[columnId]
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: columnId => {
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
- ? instance.getColumnAutoAggregationFn(columnId)
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
- value: cell.value,
273
+ getValue: cell.getValue,
278
274
  })
279
275
  : null
280
276
  },
@@ -12,7 +12,8 @@ export type CoreRow<TGenerics extends TableGenerics> = {
12
12
  index: number
13
13
  original?: TGenerics['Row']
14
14
  depth: number
15
- values: RowValues
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
- values: Record<string, any>
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, values) => {
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
- values,
83
- subRows: [],
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.createRow?.(row, instance))
104
+ Object.assign(row, feature?.createRow?.(row, instance))
90
105
  }
91
106
 
92
107
  return row as Row<TGenerics>
@@ -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?.values[column.id]
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?.values[column.id]
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.values[columnId].toLowerCase().includes(search)
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.values[columnId].includes(filterValue)
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.values[columnId].toLowerCase() === filterValue.toLowerCase()
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.values[columnId].includes(filterValue)
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.values[columnId].includes(val))
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.values[columnId].includes(val))
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.values[columnId] === filterValue
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.values[columnId] == filterValue
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.values[columnId]
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/getCoreRowModelSync'
19
- export * from './utils/getCoreRowModelAsync'
20
- export * from './utils/getFilteredRowModelSync'
21
- export * from './utils/getSortedRowModelSync'
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'