@tanstack/table-core 8.0.0-alpha.67 → 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 (140) 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 +102 -116
  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 +49 -58
  14. package/build/cjs/features/Expanding.js.map +1 -1
  15. package/build/cjs/features/Filters.js +98 -193
  16. package/build/cjs/features/Filters.js.map +1 -1
  17. package/build/cjs/features/Grouping.js +53 -71
  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 +31 -43
  22. package/build/cjs/features/Ordering.js.map +1 -1
  23. package/build/cjs/features/Pagination.js +79 -82
  24. package/build/cjs/features/Pagination.js.map +1 -1
  25. package/build/cjs/features/Pinning.js +71 -125
  26. package/build/cjs/features/Pinning.js.map +1 -1
  27. package/build/cjs/features/RowSelection.js +93 -112
  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 +54 -73
  32. package/build/cjs/features/Sorting.js.map +1 -1
  33. package/build/cjs/features/Visibility.js +47 -86
  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 +1778 -2347
  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/ColumnSizing.d.ts +2 -2
  69. package/build/types/features/Columns.d.ts +1 -1
  70. package/build/types/features/Expanding.d.ts +1 -1
  71. package/build/types/features/Filters.d.ts +12 -7
  72. package/build/types/features/Grouping.d.ts +5 -4
  73. package/build/types/features/Ordering.d.ts +1 -1
  74. package/build/types/features/Pagination.d.ts +4 -4
  75. package/build/types/features/Pinning.d.ts +1 -1
  76. package/build/types/features/RowSelection.d.ts +1 -1
  77. package/build/types/features/Rows.d.ts +4 -3
  78. package/build/types/features/Sorting.d.ts +2 -1
  79. package/build/types/features/Visibility.d.ts +1 -0
  80. package/build/types/index.d.ts +6 -4
  81. package/build/types/types.d.ts +3 -13
  82. package/build/types/utils/filterRowsUtils.d.ts +3 -3
  83. package/build/types/utils/getCoreRowModel.d.ts +2 -0
  84. package/build/types/utils/getFacetedMinMaxValues.d.ts +2 -0
  85. package/build/types/utils/getFacetedRowModel.d.ts +2 -0
  86. package/build/types/utils/getFacetedUniqueValues.d.ts +2 -0
  87. package/build/types/utils/{getCoreRowModelSync.d.ts → getFilteredRowModel.d.ts} +1 -1
  88. package/build/types/utils/getGroupedRowModel.d.ts +1 -1
  89. package/build/types/utils/getSortedRowModel.d.ts +2 -0
  90. package/build/types/utils.d.ts +1 -17
  91. package/build/umd/index.development.js +1779 -2350
  92. package/build/umd/index.development.js.map +1 -1
  93. package/build/umd/index.production.js +1 -1
  94. package/build/umd/index.production.js.map +1 -1
  95. package/package.json +1 -1
  96. package/src/core.ts +197 -45
  97. package/src/features/Cells.ts +7 -11
  98. package/src/features/ColumnSizing.ts +27 -19
  99. package/src/features/Columns.ts +4 -8
  100. package/src/features/Expanding.ts +5 -3
  101. package/src/features/Filters.ts +105 -162
  102. package/src/features/Grouping.ts +21 -23
  103. package/src/features/Ordering.ts +5 -3
  104. package/src/features/Pagination.ts +32 -19
  105. package/src/features/Pinning.ts +13 -7
  106. package/src/features/RowSelection.ts +5 -3
  107. package/src/features/Rows.ts +21 -6
  108. package/src/features/Sorting.ts +14 -12
  109. package/src/features/Visibility.ts +7 -0
  110. package/src/filterFns.ts +9 -9
  111. package/src/index.ts +12 -4
  112. package/src/sortingFns.ts +11 -11
  113. package/src/types.ts +3 -16
  114. package/src/utils/filterRowsUtils.ts +47 -68
  115. package/src/utils/{getCoreRowModelSync.ts → getCoreRowModel.ts} +2 -8
  116. package/src/utils/getFacetedMinMaxValues.ts +37 -0
  117. package/src/utils/getFacetedRowModel.ts +50 -0
  118. package/src/utils/getFacetedUniqueValues.ts +37 -0
  119. package/src/utils/{getFilteredRowModelSync.ts → getFilteredRowModel.ts} +29 -20
  120. package/src/utils/getGroupedRowModel.ts +52 -61
  121. package/src/utils/{getSortedRowModelSync.ts → getSortedRowModel.ts} +3 -3
  122. package/src/utils.ts +28 -236
  123. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js +0 -112
  124. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js.map +0 -1
  125. package/build/cjs/utils/getCoreRowModelAsync.js +0 -125
  126. package/build/cjs/utils/getCoreRowModelAsync.js.map +0 -1
  127. package/build/cjs/utils/getCoreRowModelSync.js +0 -102
  128. package/build/cjs/utils/getCoreRowModelSync.js.map +0 -1
  129. package/build/cjs/utils/getFilteredRowModelSync.js +0 -125
  130. package/build/cjs/utils/getFilteredRowModelSync.js.map +0 -1
  131. package/build/cjs/utils/getSortedRowModelSync.js +0 -118
  132. package/build/cjs/utils/getSortedRowModelSync.js.map +0 -1
  133. package/build/types/utils/getCoreRowModelAsync.d.ts +0 -4
  134. package/build/types/utils/getFilteredRowModelAsync.d.ts +0 -4
  135. package/build/types/utils/getFilteredRowModelSync.d.ts +0 -2
  136. package/build/types/utils/getSortedRowModelAsync.d.ts +0 -13
  137. package/build/types/utils/getSortedRowModelSync.d.ts +0 -2
  138. package/src/utils/getCoreRowModelAsync.ts +0 -104
  139. package/src/utils/getFilteredRowModelAsync.ts +0 -157
  140. 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,25 +99,39 @@ 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> = {
116
132
  setColumnFilters: (updater: Updater<ColumnFiltersState>) => void
117
133
 
118
- resetColumnFilters: () => void
134
+ resetColumnFilters: (defaultState?: boolean) => void
119
135
 
120
136
  // Column Filters
121
137
  getPreFilteredRowModel: () => RowModel<TGenerics>
@@ -124,13 +140,15 @@ export type FiltersInstance<TGenerics extends TableGenerics> = {
124
140
 
125
141
  // Global Filters
126
142
  setGlobalFilter: (updater: Updater<any>) => void
127
- resetGlobalFilter: () => void
143
+ resetGlobalFilter: (defaultState?: boolean) => 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
 
@@ -399,24 +398,23 @@ export const Filters: TableFeature = {
399
398
  instance.options.onGlobalFilterChange?.(updater)
400
399
  },
401
400
 
402
- resetGlobalFilter: () => {
403
- instance.setGlobalFilter(instance.initialState.globalFilter)
401
+ resetGlobalFilter: defaultState => {
402
+ instance.setGlobalFilter(
403
+ defaultState ? undefined : instance.initialState.globalFilter
404
+ )
404
405
  },
405
406
 
406
- resetColumnFilters: () => {
407
- instance.setColumnFilters(instance.initialState?.columnFilters ?? [])
407
+ resetColumnFilters: defaultState => {
408
+ instance.setColumnFilters(
409
+ defaultState ? [] : instance.initialState?.columnFilters ?? []
410
+ )
408
411
  },
409
412
 
410
413
  getPreFilteredRowModel: () => instance.getCoreRowModel(),
414
+ _getFilteredRowModel:
415
+ instance.options.getFilteredRowModel &&
416
+ instance.options.getFilteredRowModel(instance),
411
417
  getFilteredRowModel: () => {
412
- if (
413
- !instance._getFilteredRowModel &&
414
- instance.options.getFilteredRowModel
415
- ) {
416
- instance._getFilteredRowModel =
417
- instance.options.getFilteredRowModel(instance)
418
- }
419
-
420
418
  if (
421
419
  instance.options.manualFiltering ||
422
420
  !instance._getFilteredRowModel
@@ -427,56 +425,42 @@ export const Filters: TableFeature = {
427
425
  return instance._getFilteredRowModel()
428
426
  },
429
427
 
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
- }
428
+ _getGlobalFacetedRowModel:
429
+ instance.options.getFacetedRowModel &&
430
+ instance.options.getFacetedRowModel(instance, '__global__'),
442
431
 
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,
432
+ getGlobalFacetedRowModel: () => {
433
+ if (
434
+ instance.options.manualFiltering ||
435
+ !instance._getGlobalFacetedRowModel
436
+ ) {
437
+ return instance.getPreFilteredRowModel()
454
438
  }
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,
439
+
440
+ return instance._getGlobalFacetedRowModel()
441
+ },
442
+
443
+ _getGlobalFacetedUniqueValues:
444
+ instance.options.getFacetedUniqueValues &&
445
+ instance.options.getFacetedUniqueValues(instance, '__global__'),
446
+ getGlobalFacetedUniqueValues: () => {
447
+ if (!instance._getGlobalFacetedUniqueValues) {
448
+ return new Map()
466
449
  }
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,
450
+
451
+ return instance._getGlobalFacetedUniqueValues()
452
+ },
453
+
454
+ _getGlobalFacetedMinMaxValues:
455
+ instance.options.getFacetedMinMaxValues &&
456
+ instance.options.getFacetedMinMaxValues(instance, '__global__'),
457
+ getGlobalFacetedMinMaxValues: () => {
458
+ if (!instance._getGlobalFacetedMinMaxValues) {
459
+ return [NaN, NaN]
478
460
  }
479
- ),
461
+
462
+ return instance._getGlobalFacetedMinMaxValues()
463
+ },
480
464
  }
481
465
  },
482
466
  }
@@ -494,44 +478,3 @@ export function shouldAutoRemoveFilter<TGenerics extends TableGenerics>(
494
478
  (typeof value === 'string' && !value)
495
479
  )
496
480
  }
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,14 +98,8 @@ 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
- resetGrouping: () => void
102
+ resetGrouping: (defaultState?: boolean) => void
106
103
  getPreGroupedRowModel: () => RowModel<TGenerics>
107
104
  getGroupedRowModel: () => RowModel<TGenerics>
108
105
  _getGroupedRowModel?: () => 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,11 +205,19 @@ 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
- resetGrouping: () => {
223
- instance.setGrouping(instance.initialState?.grouping ?? [])
217
+ resetGrouping: defaultState => {
218
+ instance.setGrouping(
219
+ defaultState ? [] : instance.initialState?.grouping ?? []
220
+ )
224
221
  },
225
222
 
226
223
  getPreGroupedRowModel: () => instance.getSortedRowModel(),
@@ -248,6 +245,7 @@ export const Grouping: TableFeature = {
248
245
  ): GroupingRow => {
249
246
  return {
250
247
  getIsGrouped: () => !!row.groupingColumnId,
248
+ groupingValuesCache: {},
251
249
  }
252
250
  },
253
251
 
@@ -274,7 +272,7 @@ export const Grouping: TableFeature = {
274
272
  column,
275
273
  row,
276
274
  cell,
277
- value: cell.value,
275
+ getValue: cell.getValue,
278
276
  })
279
277
  : null
280
278
  },
@@ -27,7 +27,7 @@ export type ColumnOrderDefaultOptions = {
27
27
 
28
28
  export type ColumnOrderInstance<TGenerics extends TableGenerics> = {
29
29
  setColumnOrder: (updater: Updater<ColumnOrderState>) => void
30
- resetColumnOrder: () => void
30
+ resetColumnOrder: (defaultState?: boolean) => void
31
31
  _getOrderColumnsFn: () => (
32
32
  columns: Column<TGenerics>[]
33
33
  ) => Column<TGenerics>[]
@@ -57,8 +57,10 @@ export const Ordering: TableFeature = {
57
57
  return {
58
58
  setColumnOrder: updater =>
59
59
  instance.options.onColumnOrderChange?.(updater),
60
- resetColumnOrder: () => {
61
- instance.setColumnOrder(instance.initialState.columnOrder ?? [])
60
+ resetColumnOrder: defaultState => {
61
+ instance.setColumnOrder(
62
+ defaultState ? [] : instance.initialState.columnOrder ?? []
63
+ )
62
64
  },
63
65
  _getOrderColumnsFn: memo(
64
66
  () => [
@@ -11,7 +11,7 @@ import { functionalUpdate, makeStateUpdater, memo } from '../utils'
11
11
  export type PaginationState = {
12
12
  pageIndex: number
13
13
  pageSize: number
14
- pageCount: number
14
+ pageCount?: number
15
15
  }
16
16
 
17
17
  export type PaginationTableState = {
@@ -39,11 +39,11 @@ export type PaginationDefaultOptions = {
39
39
  export type PaginationInstance<TGenerics extends TableGenerics> = {
40
40
  _autoResetPageIndex: () => void
41
41
  setPagination: (updater: Updater<PaginationState>) => void
42
- resetPagination: () => void
42
+ resetPagination: (defaultState?: boolean) => void
43
43
  setPageIndex: (updater: Updater<number>) => void
44
- resetPageIndex: () => void
44
+ resetPageIndex: (defaultState?: boolean) => void
45
45
  setPageSize: (updater: Updater<number>) => void
46
- resetPageSize: () => void
46
+ resetPageSize: (defaultState?: boolean) => void
47
47
  setPageCount: (updater: Updater<number>) => void
48
48
  getPageOptions: () => number[]
49
49
  getCanPreviousPage: () => boolean
@@ -58,14 +58,20 @@ export type PaginationInstance<TGenerics extends TableGenerics> = {
58
58
 
59
59
  //
60
60
 
61
+ const defaultPageIndex = 0
62
+ const defaultPageSize = 10
63
+
64
+ const getDefaultPaginationState = (): PaginationState => ({
65
+ pageIndex: defaultPageIndex,
66
+ pageSize: defaultPageSize,
67
+ })
68
+
61
69
  export const Pagination: TableFeature = {
62
70
  getInitialState: (state): PaginationTableState => {
63
71
  return {
64
72
  ...state,
65
73
  pagination: {
66
- pageCount: -1,
67
- pageIndex: 0,
68
- pageSize: 10,
74
+ ...getDefaultPaginationState(),
69
75
  ...state?.pagination,
70
76
  },
71
77
  }
@@ -112,13 +118,11 @@ export const Pagination: TableFeature = {
112
118
 
113
119
  return instance.options.onPaginationChange?.(safeUpdater)
114
120
  },
115
- resetPagination: () => {
121
+ resetPagination: defaultState => {
116
122
  instance.setPagination(
117
- instance.initialState.pagination ?? {
118
- pageIndex: 0,
119
- pageSize: 10,
120
- pageCount: -1,
121
- }
123
+ defaultState
124
+ ? getDefaultPaginationState()
125
+ : instance.initialState.pagination ?? getDefaultPaginationState()
122
126
  )
123
127
  },
124
128
  setPageIndex: updater => {
@@ -138,11 +142,19 @@ export const Pagination: TableFeature = {
138
142
  }
139
143
  })
140
144
  },
141
- resetPageIndex: () => {
142
- instance.setPageIndex(0)
145
+ resetPageIndex: defaultState => {
146
+ instance.setPageIndex(
147
+ defaultState
148
+ ? defaultPageIndex
149
+ : instance.initialState?.pagination?.pageIndex ?? defaultPageIndex
150
+ )
143
151
  },
144
- resetPageSize: () => {
145
- instance.setPageSize(instance.initialState?.pagination?.pageSize ?? 10)
152
+ resetPageSize: defaultState => {
153
+ instance.setPageSize(
154
+ defaultState
155
+ ? defaultPageSize
156
+ : instance.initialState?.pagination?.pageSize ?? defaultPageSize
157
+ )
146
158
  },
147
159
  setPageSize: updater => {
148
160
  instance.setPagination(old => {
@@ -159,7 +171,7 @@ export const Pagination: TableFeature = {
159
171
  },
160
172
  setPageCount: updater =>
161
173
  instance.setPagination(old => {
162
- let newPageCount = functionalUpdate(updater, old.pageCount)
174
+ let newPageCount = functionalUpdate(updater, old.pageCount ?? -1)
163
175
 
164
176
  if (typeof newPageCount === 'number') {
165
177
  newPageCount = Math.max(-1, newPageCount)
@@ -239,7 +251,8 @@ export const Pagination: TableFeature = {
239
251
 
240
252
  getPageCount: () => {
241
253
  const { pageCount } = instance.getState().pagination
242
- if (pageCount > 0) {
254
+
255
+ if (typeof pageCount !== 'undefined') {
243
256
  return pageCount
244
257
  }
245
258
 
@@ -49,7 +49,7 @@ export type ColumnPinningRow<TGenerics extends TableGenerics> = {
49
49
 
50
50
  export type ColumnPinningInstance<TGenerics extends TableGenerics> = {
51
51
  setColumnPinning: (updater: Updater<ColumnPinningState>) => void
52
- resetColumnPinning: () => void
52
+ resetColumnPinning: (defaultState?: boolean) => void
53
53
  getIsSomeColumnsPinned: () => boolean
54
54
  getLeftLeafColumns: () => Column<TGenerics>[]
55
55
  getRightLeafColumns: () => Column<TGenerics>[]
@@ -58,13 +58,15 @@ export type ColumnPinningInstance<TGenerics extends TableGenerics> = {
58
58
 
59
59
  //
60
60
 
61
+ const getDefaultPinningState = (): ColumnPinningState => ({
62
+ left: [],
63
+ right: [],
64
+ })
65
+
61
66
  export const Pinning: TableFeature = {
62
67
  getInitialState: (state): ColumnPinningTableState => {
63
68
  return {
64
- columnPinning: {
65
- left: [],
66
- right: [],
67
- },
69
+ columnPinning: getDefaultPinningState(),
68
70
  ...state,
69
71
  }
70
72
  },
@@ -220,8 +222,12 @@ export const Pinning: TableFeature = {
220
222
  setColumnPinning: updater =>
221
223
  instance.options.onColumnPinningChange?.(updater),
222
224
 
223
- resetColumnPinning: () =>
224
- instance.setColumnPinning(instance.initialState?.columnPinning ?? {}),
225
+ resetColumnPinning: defaultState =>
226
+ instance.setColumnPinning(
227
+ defaultState
228
+ ? getDefaultPinningState()
229
+ : instance.initialState?.columnPinning ?? getDefaultPinningState()
230
+ ),
225
231
 
226
232
  getIsSomeColumnsPinned: () => {
227
233
  const { left, right } = instance.getState().columnPinning