@tanstack/react-table 8.0.0-alpha.2 → 8.0.0-alpha.3

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 (93) hide show
  1. package/build/cjs/core.js +84 -51
  2. package/build/cjs/core.js.map +1 -1
  3. package/build/cjs/createTable.js +11 -6
  4. package/build/cjs/createTable.js.map +1 -1
  5. package/build/cjs/features/ColumnSizing.js +2 -16
  6. package/build/cjs/features/ColumnSizing.js.map +1 -1
  7. package/build/cjs/features/Expanding.js +23 -2
  8. package/build/cjs/features/Expanding.js.map +1 -1
  9. package/build/cjs/features/Filters.js +54 -5
  10. package/build/cjs/features/Filters.js.map +1 -1
  11. package/build/cjs/features/Grouping.js +23 -2
  12. package/build/cjs/features/Grouping.js.map +1 -1
  13. package/build/cjs/features/Headers.js +87 -24
  14. package/build/cjs/features/Headers.js.map +1 -1
  15. package/build/cjs/features/Ordering.js +4 -1
  16. package/build/cjs/features/Ordering.js.map +1 -1
  17. package/build/cjs/features/Pagination.js +194 -0
  18. package/build/cjs/features/Pagination.js.map +1 -0
  19. package/build/cjs/features/Pinning.js +0 -14
  20. package/build/cjs/features/Pinning.js.map +1 -1
  21. package/build/cjs/features/RowSelection.js +541 -0
  22. package/build/cjs/features/RowSelection.js.map +1 -0
  23. package/build/cjs/features/Sorting.js +76 -18
  24. package/build/cjs/features/Sorting.js.map +1 -1
  25. package/build/cjs/features/Visibility.js +8 -2
  26. package/build/cjs/features/Visibility.js.map +1 -1
  27. package/build/cjs/sortTypes.js +1 -0
  28. package/build/cjs/sortTypes.js.map +1 -1
  29. package/build/cjs/utils/columnFilterRowsFn.js +3 -2
  30. package/build/cjs/utils/columnFilterRowsFn.js.map +1 -1
  31. package/build/cjs/utils/expandRowsFn.js +2 -2
  32. package/build/cjs/utils/expandRowsFn.js.map +1 -1
  33. package/build/cjs/utils/globalFilterRowsFn.js +3 -2
  34. package/build/cjs/utils/globalFilterRowsFn.js.map +1 -1
  35. package/build/cjs/utils/groupRowsFn.js +4 -3
  36. package/build/cjs/utils/groupRowsFn.js.map +1 -1
  37. package/build/cjs/utils/sortRowsFn.js +3 -2
  38. package/build/cjs/utils/sortRowsFn.js.map +1 -1
  39. package/build/cjs/utils.js +6 -3
  40. package/build/cjs/utils.js.map +1 -1
  41. package/build/esm/index.js +2608 -1583
  42. package/build/esm/index.js.map +1 -1
  43. package/build/stats-html.html +1 -1
  44. package/build/stats-react.json +318 -248
  45. package/build/types/core.d.ts +10 -25
  46. package/build/types/createTable.d.ts +20 -2
  47. package/build/types/features/ColumnSizing.d.ts +4 -10
  48. package/build/types/features/Expanding.d.ts +2 -1
  49. package/build/types/features/Filters.d.ts +7 -2
  50. package/build/types/features/Grouping.d.ts +2 -2
  51. package/build/types/features/Ordering.d.ts +1 -1
  52. package/build/types/features/Pagination.d.ts +43 -0
  53. package/build/types/features/Pinning.d.ts +3 -3
  54. package/build/types/features/RowSelection.d.ts +66 -0
  55. package/build/types/features/Sorting.d.ts +5 -2
  56. package/build/types/sortTypes.d.ts +1 -0
  57. package/build/types/types.d.ts +9 -6
  58. package/build/types/utils/columnFilterRowsFn.d.ts +2 -2
  59. package/build/types/utils/expandRowsFn.d.ts +2 -2
  60. package/build/types/utils/globalFilterRowsFn.d.ts +2 -2
  61. package/build/types/utils/groupRowsFn.d.ts +2 -2
  62. package/build/types/utils/paginateRowsFn.d.ts +2 -0
  63. package/build/types/utils/sortRowsFn.d.ts +2 -2
  64. package/build/types/utils.d.ts +5 -1
  65. package/build/umd/index.development.js +2608 -1583
  66. package/build/umd/index.development.js.map +1 -1
  67. package/build/umd/index.production.js +1 -1
  68. package/build/umd/index.production.js.map +1 -1
  69. package/package.json +1 -1
  70. package/src/core.tsx +222 -272
  71. package/src/createTable.tsx +68 -8
  72. package/src/features/ColumnSizing.ts +8 -37
  73. package/src/features/Expanding.ts +27 -11
  74. package/src/features/Filters.ts +74 -19
  75. package/src/features/Grouping.ts +27 -12
  76. package/src/features/Headers.ts +26 -58
  77. package/src/features/Ordering.ts +2 -3
  78. package/src/features/Pagination.ts +314 -0
  79. package/src/features/Pinning.ts +3 -16
  80. package/src/features/RowSelection.ts +831 -0
  81. package/src/features/Sorting.ts +82 -22
  82. package/src/features/Visibility.ts +2 -4
  83. package/src/sortTypes.ts +1 -1
  84. package/src/types.ts +25 -8
  85. package/src/utils/columnFilterRowsFn.ts +5 -12
  86. package/src/utils/expandRowsFn.ts +2 -5
  87. package/src/utils/globalFilterRowsFn.ts +3 -10
  88. package/src/utils/groupRowsFn.ts +3 -5
  89. package/src/utils/paginateRowsFn.ts +34 -0
  90. package/src/utils/sortRowsFn.ts +5 -5
  91. package/src/utils.tsx +12 -4
  92. package/src/features/withPagination.oldts +0 -208
  93. package/src/features/withRowSelection.oldts +0 -467
@@ -1,7 +1,14 @@
1
1
  import * as React from 'react'
2
2
  import { Cell, Column, Row } from '.'
3
3
  import { createTableInstance } from './core'
4
- import { ReactTable, ColumnDef, AccessorFn, Options } from './types'
4
+ import {
5
+ ReactTable,
6
+ ColumnDef,
7
+ AccessorFn,
8
+ Options,
9
+ Renderable,
10
+ Header,
11
+ } from './types'
5
12
  import { Overwrite } from './utils'
6
13
 
7
14
  type TableHelper<TData, TValue, TFilterFns, TSortingFns, TAggregationFns> = {
@@ -36,13 +43,57 @@ type TableHelper<TData, TValue, TFilterFns, TSortingFns, TAggregationFns> = {
36
43
  ) => ColumnDef<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>[]
37
44
 
38
45
  createGroup: (
46
+ column: Overwrite<
47
+ ColumnDef<TData, unknown, TFilterFns, TSortingFns, TAggregationFns>,
48
+ | {
49
+ __generated?: never
50
+ accessorFn?: never
51
+ accessorKey?: never
52
+ header: string
53
+ id?: string
54
+ }
55
+ | {
56
+ __generated?: never
57
+ accessorFn?: never
58
+ accessorKey?: never
59
+ id: string
60
+ header?:
61
+ | string
62
+ | Renderable<{
63
+ instance: ReactTable<
64
+ TData,
65
+ TValue,
66
+ TFilterFns,
67
+ TSortingFns,
68
+ TAggregationFns
69
+ >
70
+ header: Header<
71
+ TData,
72
+ TValue,
73
+ TFilterFns,
74
+ TSortingFns,
75
+ TAggregationFns
76
+ >
77
+ column: Column<
78
+ TData,
79
+ TValue,
80
+ TFilterFns,
81
+ TSortingFns,
82
+ TAggregationFns
83
+ >
84
+ }>
85
+ }
86
+ >
87
+ ) => ColumnDef<TData, unknown, TFilterFns, TSortingFns, TAggregationFns>
88
+
89
+ createDisplayColumn: (
39
90
  column: Overwrite<
40
91
  ColumnDef<TData, unknown, TFilterFns, TSortingFns, TAggregationFns>,
41
92
  { __generated?: never; accessorFn?: never; accessorKey?: never }
42
93
  >
43
94
  ) => ColumnDef<TData, unknown, TFilterFns, TSortingFns, TAggregationFns>
44
95
 
45
- createColumn: <TAccessor extends AccessorFn<TData> | keyof TData>(
96
+ createDataColumn: <TAccessor extends AccessorFn<TData> | keyof TData>(
46
97
  accessor: TAccessor,
47
98
  column: TAccessor extends (...args: any[]) => any
48
99
  ? // Accessor Fn
@@ -71,7 +122,12 @@ type TableHelper<TData, TValue, TFilterFns, TSortingFns, TAggregationFns> = {
71
122
  TSortingFns,
72
123
  TAggregationFns
73
124
  >,
74
- { __generated?: never; accessorFn?: never; accessorKey?: never }
125
+ {
126
+ __generated?: never
127
+ accessorFn?: never
128
+ accessorKey?: never
129
+ id?: string
130
+ }
75
131
  >
76
132
  : never
77
133
  ) => ColumnDef<
@@ -124,7 +180,15 @@ export function createTable<
124
180
  SortingFns: () => createTable(),
125
181
  AggregationFns: () => createTable(),
126
182
  createColumns: columns => columns,
127
- createColumn: (accessor, column) => {
183
+ createDisplayColumn: column => ({
184
+ ...column,
185
+ __generated: true,
186
+ }),
187
+ createGroup: column => ({
188
+ ...column,
189
+ __generated: true,
190
+ }),
191
+ createDataColumn: (accessor, column) => {
128
192
  column = {
129
193
  ...column,
130
194
  id: column.id,
@@ -149,10 +213,6 @@ export function createTable<
149
213
 
150
214
  throw new Error('Invalid accessor')
151
215
  },
152
- createGroup: column => ({
153
- ...column,
154
- __generated: true,
155
- }),
156
216
  useTable: <TData, TValue, TFilterFns, TSortingFns, TAggregationFns>(
157
217
  options: Options<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
158
218
  ): ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns> => {
@@ -49,7 +49,7 @@ export type ColumnSizingDefaultOptions = {
49
49
  onColumnSizingInfoChange: OnChangeFn<ColumnSizingInfoState>
50
50
  }
51
51
 
52
- export type HeaderResizerProps = {
52
+ export type ColumnResizerProps = {
53
53
  title?: string
54
54
  onMouseDown?: (e: ReactMouseEvent) => void
55
55
  onTouchStart?: (e: ReactTouchEvent) => void
@@ -72,10 +72,10 @@ export type ColumnSizingInstance<
72
72
  resetHeaderSizeInfo: () => void
73
73
  getColumnCanResize: (columnId: string) => boolean
74
74
  getHeaderCanResize: (headerId: string) => boolean
75
- getHeaderResizerProps: <TGetter extends Getter<HeaderResizerProps>>(
75
+ getColumnResizerProps: <TGetter extends Getter<ColumnResizerProps>>(
76
76
  columnId: string,
77
77
  userProps?: TGetter
78
- ) => undefined | PropGetterValue<HeaderResizerProps, TGetter>
78
+ ) => undefined | PropGetterValue<ColumnResizerProps, TGetter>
79
79
  getColumnIsResizing: (columnId: string) => boolean
80
80
  getHeaderIsResizing: (headerId: string) => boolean
81
81
  }
@@ -94,21 +94,9 @@ export type ColumnSizingColumn<
94
94
  > = {
95
95
  getCanResize: () => boolean
96
96
  getIsResizing: () => boolean
97
- resetSize: () => void
98
- }
99
-
100
- export type ColumnSizingHeader<
101
- TData,
102
- TValue,
103
- TFilterFns,
104
- TSortingFns,
105
- TAggregationFns
106
- > = {
107
- getCanResize: () => boolean
108
- getIsResizing: () => boolean
109
- getResizerProps: <TGetter extends Getter<HeaderResizerProps>>(
97
+ getResizerProps: <TGetter extends Getter<ColumnResizerProps>>(
110
98
  userProps?: TGetter
111
- ) => undefined | PropGetterValue<HeaderResizerProps, TGetter>
99
+ ) => undefined | PropGetterValue<ColumnResizerProps, TGetter>
112
100
  resetSize: () => void
113
101
  }
114
102
 
@@ -237,7 +225,7 @@ export function getInstance<
237
225
 
238
226
  return instance.getColumnIsResizing(header.column.id)
239
227
  },
240
- getHeaderResizerProps: (headerId, userProps) => {
228
+ getColumnResizerProps: (headerId, userProps) => {
241
229
  const header = instance.getHeader(headerId)
242
230
 
243
231
  if (!header) {
@@ -394,7 +382,7 @@ export function getInstance<
394
382
  }))
395
383
  }
396
384
 
397
- const initialProps: HeaderResizerProps = canResize
385
+ const initialProps: ColumnResizerProps = canResize
398
386
  ? {
399
387
  title: 'Toggle Grouping',
400
388
  draggable: false,
@@ -429,25 +417,8 @@ export function createColumn<
429
417
  getIsResizing: () => instance.getColumnIsResizing(column.id),
430
418
  getCanResize: () => instance.getColumnCanResize(column.id),
431
419
  resetSize: () => instance.resetColumnSize(column.id),
432
- }
433
- }
434
-
435
- export function createHeader<
436
- TData,
437
- TValue,
438
- TFilterFns,
439
- TSortingFns,
440
- TAggregationFns
441
- >(
442
- header: Header<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>,
443
- instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
444
- ): ColumnSizingHeader<TData, TValue, TFilterFns, TSortingFns, TAggregationFns> {
445
- return {
446
- getIsResizing: () => instance.getHeaderIsResizing(header.id),
447
- getCanResize: () => instance.getHeaderCanResize(header.id),
448
420
  getResizerProps: userProps =>
449
- instance.getHeaderResizerProps(header.id, userProps),
450
- resetSize: () => instance.resetHeaderSize(header.id),
421
+ instance.getColumnResizerProps(column.id, userProps),
451
422
  }
452
423
  }
453
424
 
@@ -43,14 +43,7 @@ export type ExpandedOptions<
43
43
  TSortingFns,
44
44
  TAggregationFns
45
45
  >,
46
- expandedState: ExpandedState,
47
- groupedRowModel: RowModel<
48
- TData,
49
- TValue,
50
- TFilterFns,
51
- TSortingFns,
52
- TAggregationFns
53
- >
46
+ rowModel: RowModel<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
54
47
  ) => RowModel<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
55
48
  expandSubRows?: boolean
56
49
  defaultCanExpand?: boolean
@@ -75,6 +68,7 @@ export type ExpandedInstance<
75
68
  TSortingFns,
76
69
  TAggregationFns
77
70
  > = {
71
+ _notifyExpandedReset: () => void
78
72
  setExpanded: (updater: Updater<ExpandedState>) => void
79
73
  toggleRowExpanded: (rowId: string, expanded?: boolean) => void
80
74
  toggleAllRowsExpanded: (expanded?: boolean) => void
@@ -170,7 +164,26 @@ export function getInstance<
170
164
  >(
171
165
  instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
172
166
  ): ExpandedInstance<TData, TValue, TFilterFns, TSortingFns, TAggregationFns> {
167
+ let registered = false
168
+
173
169
  return {
170
+ _notifyExpandedReset: () => {
171
+ if (!registered) {
172
+ registered = true
173
+ return
174
+ }
175
+
176
+ if (instance.options.autoResetAll === false) {
177
+ return
178
+ }
179
+
180
+ if (
181
+ instance.options.autoResetAll === true ||
182
+ instance.options.autoResetExpanded
183
+ ) {
184
+ instance.resetExpanded()
185
+ }
186
+ },
174
187
  setExpanded: updater =>
175
188
  instance.options.onExpandedChange?.(
176
189
  updater,
@@ -344,10 +357,13 @@ export function getInstance<
344
357
  if (process.env.NODE_ENV !== 'production' && instance.options.debug)
345
358
  console.info('Expanding...')
346
359
 
347
- return expandRowsFn(instance, expanded, rowModel)
360
+ return expandRowsFn(instance, rowModel)
348
361
  },
349
- 'getExpandedRowModel',
350
- instance.options.debug
362
+ {
363
+ key: 'getExpandedRowModel',
364
+ debug: instance.options.debug,
365
+ onChange: () => instance._notifyPageIndexReset(),
366
+ }
351
367
  ),
352
368
 
353
369
  getPreExpandedRows: () => instance.getGroupedRowModel().rows,
@@ -1,6 +1,13 @@
1
1
  import { RowModel } from '..'
2
2
  import { BuiltInFilterType, filterTypes } from '../filterTypes'
3
- import { Column, OnChangeFn, ReactTable, Row, Updater } from '../types'
3
+ import {
4
+ Column,
5
+ Listener,
6
+ OnChangeFn,
7
+ ReactTable,
8
+ Row,
9
+ Updater,
10
+ } from '../types'
4
11
  import { functionalUpdate, isFunction, makeStateUpdater, memo } from '../utils'
5
12
 
6
13
  export type ColumnFilter = {
@@ -106,7 +113,6 @@ export type FiltersOptions<
106
113
  enableColumnFilters?: boolean
107
114
  columnFilterRowsFn?: (
108
115
  instance: ReactTable<any, any, any, any, any>,
109
- columnFilters: ColumnFiltersState,
110
116
  coreRowModel: RowModel<any, any, any, any, any>
111
117
  ) => RowModel<any, any, any, any, any>
112
118
  // Global
@@ -117,14 +123,7 @@ export type FiltersOptions<
117
123
  enableGlobalFilter?: boolean
118
124
  globalFilterRowsFn?: (
119
125
  instance: ReactTable<any, any, any, any, any>,
120
- globalFilter: any,
121
- columnFilteredRowModel: RowModel<
122
- TData,
123
- TValue,
124
- TFilterFns,
125
- TSortingFns,
126
- TAggregationFns
127
- >
126
+ rowModel: RowModel<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
128
127
  ) => RowModel<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
129
128
  getColumnCanGlobalFilterFn?: (
130
129
  column: Column<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
@@ -138,6 +137,7 @@ export type FiltersInstance<
138
137
  TSortingFns,
139
138
  TAggregationFns
140
139
  > = {
140
+ _notifyFiltersReset: () => void
141
141
  getColumnAutoFilterFn: (
142
142
  columnId: string
143
143
  ) => FilterFn<any, any, any, any, any> | undefined
@@ -164,6 +164,31 @@ export type FiltersInstance<
164
164
  TSortingFns,
165
165
  TAggregationFns
166
166
  >
167
+ getPreFilteredRowModel: () => RowModel<
168
+ TData,
169
+ TValue,
170
+ TFilterFns,
171
+ TSortingFns,
172
+ TAggregationFns
173
+ >
174
+ getPreFilteredRows: () => Row<
175
+ TData,
176
+ TValue,
177
+ TFilterFns,
178
+ TSortingFns,
179
+ TAggregationFns
180
+ >[]
181
+ getPreFilteredFlatRows: () => Row<
182
+ TData,
183
+ TValue,
184
+ TFilterFns,
185
+ TSortingFns,
186
+ TAggregationFns
187
+ >[]
188
+ getPreFilteredRowsById: () => Record<
189
+ string,
190
+ Row<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
191
+ >
167
192
  getPreColumnFilteredRows: () => Row<
168
193
  TData,
169
194
  TValue,
@@ -337,8 +362,7 @@ export function createColumn<
337
362
  preFilteredMinMaxValues,
338
363
  }
339
364
  },
340
- 'column.getFacetInfo',
341
- instance.options.debug
365
+ { key: 'column.getFacetInfo', debug: instance.options.debug }
342
366
  )
343
367
 
344
368
  return {
@@ -364,7 +388,30 @@ export function getInstance<
364
388
  >(
365
389
  instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
366
390
  ): FiltersInstance<TData, TValue, TFilterFns, TSortingFns, TAggregationFns> {
391
+ let registered = false
392
+
367
393
  return {
394
+ _notifyFiltersReset: () => {
395
+ if (!registered) {
396
+ registered = true
397
+ return
398
+ }
399
+
400
+ if (instance.options.autoResetAll === false) {
401
+ return
402
+ }
403
+
404
+ if (instance.options.autoResetAll === true) {
405
+ instance.resetSorting()
406
+ } else {
407
+ if (instance.options.autoResetColumnFilters) {
408
+ instance.resetColumnFilters()
409
+ }
410
+ if (instance.options.autoResetGlobalFilter) {
411
+ instance.resetGlobalFilter()
412
+ }
413
+ }
414
+ },
368
415
  getColumnAutoFilterFn: columnId => {
369
416
  const firstRow = instance.getCoreFlatRows()[0]
370
417
 
@@ -601,7 +648,7 @@ export function getInstance<
601
648
  if (process.env.NODE_ENV !== 'production' && instance.options.debug)
602
649
  console.info('Column Filtering...')
603
650
 
604
- return columnFiltersFn(instance as any, columnFilters, rowModel)
651
+ return columnFiltersFn(instance as any, rowModel)
605
652
  })()
606
653
 
607
654
  // Now that each filtered column has it's partially filtered rows,
@@ -622,19 +669,25 @@ export function getInstance<
622
669
 
623
670
  return columnFilteredRowModel
624
671
  },
625
- 'getColumnFilteredRowModel',
626
- instance.options.debug
672
+ { key: 'getColumnFilteredRowModel', debug: instance.options.debug }
627
673
  ),
628
674
 
675
+ // These might be easier to remember than "column" filtered rows
676
+ getPreFilteredRowModel: () => instance.getCoreRowModel(),
677
+ getPreFilteredRows: () => instance.getCoreRowModel().rows,
678
+ getPreFilteredFlatRows: () => instance.getCoreRowModel().flatRows,
679
+ getPreFilteredRowsById: () => instance.getCoreRowModel().rowsById,
680
+
681
+ // Pre Column Filter
629
682
  getPreColumnFilteredRows: () => instance.getCoreRowModel().rows,
630
683
  getPreColumnFilteredFlatRows: () => instance.getCoreRowModel().flatRows,
631
684
  getPreColumnFilteredRowsById: () => instance.getCoreRowModel().rowsById,
632
685
  getColumnFilteredRows: () => instance.getColumnFilteredRowModel().rows,
686
+
633
687
  getColumnFilteredFlatRows: () =>
634
688
  instance.getColumnFilteredRowModel().flatRows,
635
689
  getColumnFilteredRowsById: () =>
636
690
  instance.getColumnFilteredRowModel().rowsById,
637
-
638
691
  getGlobalFilteredRowModel: memo(
639
692
  () => [
640
693
  instance.getState().globalFilter,
@@ -652,7 +705,6 @@ export function getInstance<
652
705
 
653
706
  return globalFiltersFn(
654
707
  instance as ReactTable<any, any, any, any, any>,
655
- globalFilterValue,
656
708
  columnFilteredRowModel
657
709
  )
658
710
  })()
@@ -675,8 +727,11 @@ export function getInstance<
675
727
 
676
728
  return globalFilteredRowModel
677
729
  },
678
- 'getGlobalFilteredRowModel',
679
- instance.options.debug
730
+ {
731
+ key: 'getGlobalFilteredRowModel',
732
+ debug: instance.options.debug,
733
+ onChange: () => instance._notifySortingReset(),
734
+ }
680
735
  ),
681
736
 
682
737
  getPreGlobalFilteredRows: () => instance.getColumnFilteredRowModel().rows,
@@ -39,7 +39,6 @@ export type GroupingColumnDef<TAggregationFns> = {
39
39
  renderAggregatedCell?: () => React.ReactNode
40
40
  enableGrouping?: boolean
41
41
  defaultCanGroup?: boolean
42
- getCanGroup?: unknown
43
42
  }
44
43
 
45
44
  export type GroupingColumn<
@@ -98,14 +97,7 @@ export type GroupingOptions<
98
97
  TSortingFns,
99
98
  TAggregationFns
100
99
  >,
101
- groupingState: GroupingState,
102
- sortedRowsModel: RowModel<
103
- TData,
104
- TValue,
105
- TFilterFns,
106
- TSortingFns,
107
- TAggregationFns
108
- >
100
+ rowModel: RowModel<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
109
101
  ) => RowModel<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
110
102
 
111
103
  groupedColumnMode?: false | 'reorder' | 'remove'
@@ -125,6 +117,7 @@ export type GroupingInstance<
125
117
  TSortingFns,
126
118
  TAggregationFns
127
119
  > = {
120
+ _notifyGroupingReset: () => void
128
121
  getColumnAutoAggregationFn: (columnId: string) => AggregationFn | undefined
129
122
  getColumnAggregationFn: (columnId: string) => AggregationFn | undefined
130
123
  setGrouping: (updater: Updater<GroupingState>) => void
@@ -243,7 +236,26 @@ export function getInstance<
243
236
  >(
244
237
  instance: ReactTable<TData, TValue, TFilterFns, TSortingFns, TAggregationFns>
245
238
  ): GroupingInstance<TData, TValue, TFilterFns, TSortingFns, TAggregationFns> {
239
+ let registered = false
240
+
246
241
  return {
242
+ _notifyGroupingReset: () => {
243
+ if (!registered) {
244
+ registered = true
245
+ return
246
+ }
247
+
248
+ if (instance.options.autoResetAll === false) {
249
+ return
250
+ }
251
+
252
+ if (
253
+ instance.options.autoResetAll === true ||
254
+ instance.options.autoResetGrouping
255
+ ) {
256
+ instance.resetGrouping()
257
+ }
258
+ },
247
259
  getColumnAutoAggregationFn: columnId => {
248
260
  const firstRow = instance.getCoreFlatRows()[0]
249
261
 
@@ -360,10 +372,13 @@ export function getInstance<
360
372
  if (process.env.NODE_ENV !== 'production' && instance.options.debug)
361
373
  console.info('Grouping...')
362
374
 
363
- return groupRowsFn(instance, grouping, rowModel)
375
+ return groupRowsFn(instance, rowModel)
364
376
  },
365
- 'getGroupedRowModel',
366
- instance.options.debug
377
+ {
378
+ key: 'getGroupedRowModel',
379
+ debug: instance.options.debug,
380
+ onChange: () => instance._notifyExpandedReset(),
381
+ }
367
382
  ),
368
383
 
369
384
  getPreGroupedRows: () => instance.getSortedRowModel().rows,