@tanstack/table-core 8.0.0-alpha.28 → 8.0.0-alpha.34

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 (124) hide show
  1. package/build/cjs/aggregationTypes.js +1 -0
  2. package/build/cjs/aggregationTypes.js.map +1 -1
  3. package/build/cjs/core.js +50 -79
  4. package/build/cjs/core.js.map +1 -1
  5. package/build/cjs/createTable.js.map +1 -1
  6. package/build/cjs/features/ColumnSizing.js.map +1 -1
  7. package/build/cjs/features/Expanding.js +14 -18
  8. package/build/cjs/features/Expanding.js.map +1 -1
  9. package/build/cjs/features/Filters.js +29 -82
  10. package/build/cjs/features/Filters.js.map +1 -1
  11. package/build/cjs/features/Grouping.js +10 -16
  12. package/build/cjs/features/Grouping.js.map +1 -1
  13. package/build/cjs/features/Headers.js.map +1 -1
  14. package/build/cjs/features/Ordering.js.map +1 -1
  15. package/build/cjs/features/Pagination.js +10 -17
  16. package/build/cjs/features/Pagination.js.map +1 -1
  17. package/build/cjs/features/Pinning.js.map +1 -1
  18. package/build/cjs/features/RowSelection.js +9 -3
  19. package/build/cjs/features/RowSelection.js.map +1 -1
  20. package/build/cjs/features/Sorting.js +11 -17
  21. package/build/cjs/features/Sorting.js.map +1 -1
  22. package/build/cjs/features/Visibility.js.map +1 -1
  23. package/build/cjs/filterTypes.js.map +1 -1
  24. package/build/cjs/index.js +19 -12
  25. package/build/cjs/index.js.map +1 -1
  26. package/build/cjs/sortTypes.js.map +1 -1
  27. package/build/cjs/utils/filterRowsUtils.js.map +1 -1
  28. package/build/cjs/utils/getColumnFilteredRowModelSync.js +115 -0
  29. package/build/cjs/utils/getColumnFilteredRowModelSync.js.map +1 -0
  30. package/build/cjs/utils/getCoreRowModelAsync.js +127 -0
  31. package/build/cjs/utils/getCoreRowModelAsync.js.map +1 -0
  32. package/build/cjs/utils/getCoreRowModelSync.js +104 -0
  33. package/build/cjs/utils/getCoreRowModelSync.js.map +1 -0
  34. package/build/cjs/utils/getExpandedRowModel.js +61 -0
  35. package/build/cjs/utils/getExpandedRowModel.js.map +1 -0
  36. package/build/cjs/utils/getGlobalFilteredRowModelSync.js +91 -0
  37. package/build/cjs/utils/getGlobalFilteredRowModelSync.js.map +1 -0
  38. package/build/cjs/utils/getGroupedRowModel.js +176 -0
  39. package/build/cjs/utils/getGroupedRowModel.js.map +1 -0
  40. package/build/cjs/utils/getPaginationRowModel.js +61 -0
  41. package/build/cjs/utils/getPaginationRowModel.js.map +1 -0
  42. package/build/cjs/utils/getSortedRowModelSync.js +118 -0
  43. package/build/cjs/utils/getSortedRowModelSync.js.map +1 -0
  44. package/build/cjs/utils.js +159 -20
  45. package/build/cjs/utils.js.map +1 -1
  46. package/build/esm/index.js +893 -500
  47. package/build/esm/index.js.map +1 -1
  48. package/build/stats-html.html +1 -1
  49. package/build/stats-react.json +408 -300
  50. package/build/types/aggregationTypes.d.ts +1 -1
  51. package/build/types/core.d.ts +11 -1
  52. package/build/types/createTable.d.ts +2 -4
  53. package/build/types/features/Expanding.d.ts +2 -1
  54. package/build/types/features/Filters.d.ts +6 -2
  55. package/build/types/features/Grouping.d.ts +3 -2
  56. package/build/types/features/Pagination.d.ts +2 -1
  57. package/build/types/features/Sorting.d.ts +2 -1
  58. package/build/types/index.d.ts +8 -6
  59. package/build/types/types.d.ts +3 -2
  60. package/build/types/utils/getColumnFilteredRowModelAsync.d.ts +4 -0
  61. package/build/types/utils/getColumnFilteredRowModelSync.d.ts +2 -0
  62. package/build/types/utils/getCoreRowModelAsync.d.ts +4 -0
  63. package/build/types/utils/getCoreRowModelSync.d.ts +2 -0
  64. package/build/types/utils/getExpandedRowModel.d.ts +7 -0
  65. package/build/types/utils/getGlobalFilteredRowModelAsync.d.ts +4 -0
  66. package/build/types/utils/getGlobalFilteredRowModelSync.d.ts +2 -0
  67. package/build/types/utils/getGroupedRowModel.d.ts +2 -0
  68. package/build/types/utils/getPaginationRowModel.d.ts +4 -0
  69. package/build/types/utils/{sortRowsQuicksortFn.d.ts → getSortedRowModelAsync.d.ts} +3 -1
  70. package/build/types/utils/getSortedRowModelSync.d.ts +2 -0
  71. package/build/types/utils.d.ts +16 -0
  72. package/build/umd/index.development.js +903 -505
  73. package/build/umd/index.development.js.map +1 -1
  74. package/build/umd/index.production.js +1 -1
  75. package/build/umd/index.production.js.map +1 -1
  76. package/package.json +3 -1
  77. package/src/aggregationTypes.ts +1 -1
  78. package/src/core.tsx +66 -99
  79. package/src/createTable.tsx +2 -6
  80. package/src/features/Expanding.ts +21 -29
  81. package/src/features/Filters.ts +53 -100
  82. package/src/features/Grouping.ts +19 -21
  83. package/src/features/Pagination.ts +19 -28
  84. package/src/features/RowSelection.ts +5 -3
  85. package/src/features/Sorting.ts +20 -24
  86. package/src/index.tsx +8 -6
  87. package/src/types.ts +4 -1
  88. package/src/utils/getColumnFilteredRowModelAsync.ts +119 -0
  89. package/src/utils/getColumnFilteredRowModelSync.ts +99 -0
  90. package/src/utils/getCoreRowModelAsync.ts +105 -0
  91. package/src/utils/getCoreRowModelSync.ts +107 -0
  92. package/src/utils/getExpandedRowModel.ts +58 -0
  93. package/src/utils/getGlobalFilteredRowModelAsync.ts +97 -0
  94. package/src/utils/getGlobalFilteredRowModelSync.ts +76 -0
  95. package/src/utils/getGroupedRowModel.ts +191 -0
  96. package/src/utils/getPaginationRowModel.ts +45 -0
  97. package/src/utils/getSortedRowModelAsync.ts +201 -0
  98. package/src/utils/getSortedRowModelSync.ts +118 -0
  99. package/src/utils.tsx +193 -21
  100. package/build/cjs/utils/columnFilterRowsFn.js +0 -73
  101. package/build/cjs/utils/columnFilterRowsFn.js.map +0 -1
  102. package/build/cjs/utils/expandRowsFn.js +0 -37
  103. package/build/cjs/utils/expandRowsFn.js.map +0 -1
  104. package/build/cjs/utils/globalFilterRowsFn.js +0 -49
  105. package/build/cjs/utils/globalFilterRowsFn.js.map +0 -1
  106. package/build/cjs/utils/groupRowsFn.js +0 -155
  107. package/build/cjs/utils/groupRowsFn.js.map +0 -1
  108. package/build/cjs/utils/paginateRowsFn.js +0 -44
  109. package/build/cjs/utils/paginateRowsFn.js.map +0 -1
  110. package/build/cjs/utils/sortRowsFn.js +0 -94
  111. package/build/cjs/utils/sortRowsFn.js.map +0 -1
  112. package/build/types/utils/columnFilterRowsFn.d.ts +0 -2
  113. package/build/types/utils/expandRowsFn.d.ts +0 -2
  114. package/build/types/utils/globalFilterRowsFn.d.ts +0 -2
  115. package/build/types/utils/groupRowsFn.d.ts +0 -2
  116. package/build/types/utils/paginateRowsFn.d.ts +0 -2
  117. package/build/types/utils/sortRowsFn.d.ts +0 -2
  118. package/src/utils/columnFilterRowsFn.ts +0 -56
  119. package/src/utils/expandRowsFn.ts +0 -34
  120. package/src/utils/globalFilterRowsFn.ts +0 -39
  121. package/src/utils/groupRowsFn.ts +0 -174
  122. package/src/utils/paginateRowsFn.ts +0 -28
  123. package/src/utils/sortRowsFn.ts +0 -99
  124. package/src/utils/sortRowsQuicksortFn.ts +0 -174
@@ -103,6 +103,32 @@ function functionalUpdate(updater, input) {
103
103
  }
104
104
  function noop() {//
105
105
  }
106
+ function getBatchGroups(arr, count) {
107
+ var groups = [{
108
+ start: 0,
109
+ end: count - 1,
110
+ items: []
111
+ }];
112
+ var groupIndex = 0;
113
+ var group = groups[groupIndex];
114
+
115
+ for (var i = 0; i < arr.length; i++) {
116
+ if (i > group.end) {
117
+ groupIndex++;
118
+ groups[groupIndex] = {
119
+ start: i,
120
+ end: i + count - 1,
121
+ items: []
122
+ };
123
+ }
124
+
125
+ group = groups[groupIndex];
126
+ var _item = arr[i];
127
+ group.items.push(_item);
128
+ }
129
+
130
+ return groups;
131
+ }
106
132
  function makeStateUpdater(key, instance) {
107
133
  return function (updater) {
108
134
  instance.setState(function (old) {
@@ -145,7 +171,7 @@ function memo(getDeps, fn, opts) {
145
171
  var result;
146
172
  return function () {
147
173
  var depTime;
148
- if (opts.key && opts.debug) depTime = performance.now();
174
+ if (opts.key && opts.debug) depTime = Date.now();
149
175
  var newDeps = getDeps();
150
176
  var depsChanged = newDeps.length !== deps.length || newDeps.some(function (dep, index) {
151
177
  return deps[index] !== dep;
@@ -154,15 +180,15 @@ function memo(getDeps, fn, opts) {
154
180
  if (depsChanged) {
155
181
  var oldResult = result;
156
182
  var resultTime;
157
- if (opts.key && opts.debug) resultTime = performance.now();
183
+ if (opts.key && opts.debug) resultTime = Date.now();
158
184
  result = fn.apply(void 0, newDeps);
159
185
  deps = newDeps;
160
186
  opts == null ? void 0 : opts.onChange == null ? void 0 : opts.onChange(result, oldResult);
161
187
 
162
188
  if (opts.key && opts.debug) {
163
189
  if (opts != null && opts.debug()) {
164
- var depEndTime = Math.round((performance.now() - depTime) * 100) / 100;
165
- var resultEndTime = Math.round((performance.now() - resultTime) * 100) / 100;
190
+ var depEndTime = Math.round((Date.now() - depTime) * 100) / 100;
191
+ var resultEndTime = Math.round((Date.now() - resultTime) * 100) / 100;
166
192
  var resultFpsPercentage = resultEndTime / 16;
167
193
 
168
194
  var pad = function pad(str, num) {
@@ -200,22 +226,133 @@ function memo(getDeps, fn, opts) {
200
226
 
201
227
  return result;
202
228
  };
203
- } // export function hashString(str: string, seed = 0): string {
204
- // let h1 = 0xdeadbeef ^ seed,
205
- // h2 = 0x41c6ce57 ^ seed
206
- // for (let i = 0, ch; i < str.length; i++) {
207
- // ch = str.charCodeAt(i)
208
- // h1 = Math.imul(h1 ^ ch, 2654435761)
209
- // h2 = Math.imul(h2 ^ ch, 1597334677)
210
- // }
211
- // h1 =
212
- // Math.imul(h1 ^ (h1 >>> 16), 2246822507) ^
213
- // Math.imul(h2 ^ (h2 >>> 13), 3266489909)
214
- // h2 =
215
- // Math.imul(h2 ^ (h2 >>> 16), 2246822507) ^
216
- // Math.imul(h1 ^ (h1 >>> 13), 3266489909)
217
- // return (4294967296 * (2097151 & h2) + (h1 >>> 0)).toString()
218
- // }
229
+ }
230
+ function incrementalMemo(getDeps, getInitialValue, schedule, opts) {
231
+ var _opts$timeout;
232
+
233
+ var oldDeps;
234
+ var deps;
235
+ var result;
236
+ var nextResultRef;
237
+ var tasks = [];
238
+ var totalTaskCount = 0;
239
+ var resultStartTime;
240
+ var batchIndex = 0;
241
+ var progress = 0;
242
+ var working = false;
243
+ var callback;
244
+ var timeout = (_opts$timeout = opts.timeout) != null ? _opts$timeout : 100;
245
+
246
+ var onProgress = function onProgress(latestResult, previousResult) {
247
+ progress = 1 - tasks.length / totalTaskCount;
248
+ opts.onProgress(progress, latestResult, previousResult);
249
+ };
250
+
251
+ return function () {
252
+ var scheduleFn = function scheduleFn(workFn) {
253
+ totalTaskCount++;
254
+ tasks.push(workFn);
255
+ };
256
+
257
+ var newDeps = getDeps();
258
+ var first = false;
259
+
260
+ if (!deps) {
261
+ first = true;
262
+ deps = [];
263
+ result = getInitialValue.apply(void 0, newDeps);
264
+ }
265
+
266
+ var depsChanged = newDeps.length !== deps.length || newDeps.some(function (dep, index) {
267
+ return deps[index] !== dep;
268
+ });
269
+
270
+ if (depsChanged) {
271
+ cancelIdleCallback(callback);
272
+ oldDeps = deps;
273
+ deps = newDeps;
274
+ totalTaskCount = 0;
275
+ tasks = [];
276
+ nextResultRef = {
277
+ current: getInitialValue.apply(void 0, newDeps)
278
+ };
279
+ resultStartTime = Date.now();
280
+ schedule.apply(void 0, newDeps)(nextResultRef)(scheduleFn);
281
+ }
282
+
283
+ var commitResult = function commitResult() {
284
+ cancelIdleCallback(callback);
285
+
286
+ if (opts.key && opts.debug) {
287
+ if (opts != null && opts.debug()) {
288
+ var resultEndTime = Math.round((Date.now() - resultStartTime) * 100) / 100;
289
+ var resultFpsPercentage = resultEndTime / batchIndex / 16;
290
+ console.info("%c\u23F1 " + resultEndTime + " ms / " + batchIndex + " tasks = " + Math.round(resultEndTime / batchIndex) + " ms/task", "\n font-size: .6rem;\n font-weight: bold;\n color: hsl(" + Math.max(0, Math.min(120 - 120 * resultFpsPercentage, 120)) + "deg 100% 31%);", opts == null ? void 0 : opts.key, _extends({
291
+ length: oldDeps.length + " -> " + deps.length
292
+ }, deps.map(function (_, index) {
293
+ if (oldDeps[index] !== deps[index]) {
294
+ return [index, oldDeps[index], deps[index]];
295
+ }
296
+
297
+ return false;
298
+ }).filter(Boolean).reduce(function (accu, _ref2) {
299
+ var _extends4;
300
+
301
+ var a = _ref2[0],
302
+ b = _ref2[1];
303
+ return _extends({}, accu, (_extends4 = {}, _extends4[a] = b, _extends4));
304
+ }, {}), {
305
+ parent: parent
306
+ }));
307
+ }
308
+ }
309
+
310
+ working = false;
311
+ var previousResult = result;
312
+ result = nextResultRef.current;
313
+ onProgress(result, previousResult);
314
+ opts.onChange(result, previousResult);
315
+ };
316
+
317
+ if (opts.initialSync && first) {
318
+ batchIndex = 1;
319
+ first = false;
320
+
321
+ for (var i = 0; i < tasks.length; i++) {
322
+ tasks[i]();
323
+ }
324
+
325
+ tasks = [];
326
+ commitResult();
327
+ } else if (!working && tasks.length) {
328
+ cancelIdleCallback(callback);
329
+ working = true;
330
+ batchIndex = 0;
331
+
332
+ var workLoop = function workLoop(deadline) {
333
+ while (tasks.length && deadline.timeRemaining() > 0) {
334
+ tasks.shift()();
335
+ }
336
+
337
+ if (!tasks.length) {
338
+ commitResult();
339
+ } else {
340
+ ++batchIndex;
341
+ onProgress(nextResultRef.current, result);
342
+ callback = requestIdleCallback(workLoop, {
343
+ timeout: timeout
344
+ });
345
+ }
346
+ };
347
+
348
+ callback = requestIdleCallback(workLoop, {
349
+ timeout: timeout
350
+ });
351
+ }
352
+
353
+ return result;
354
+ };
355
+ } // opts?.onChange?.(result, oldResult)
219
356
 
220
357
  //
221
358
  var defaultColumnSizing = {
@@ -546,6 +683,8 @@ var Expanding = {
546
683
  var registered = false;
547
684
  return {
548
685
  _notifyExpandedReset: function _notifyExpandedReset() {
686
+ instance._notifyPageIndexReset();
687
+
549
688
  if (!registered) {
550
689
  registered = true;
551
690
  return;
@@ -651,7 +790,7 @@ var Expanding = {
651
790
  var initialProps = {
652
791
  title: canExpand ? 'Toggle Expanded' : undefined,
653
792
  onClick: canExpand ? function (e) {
654
- e.persist();
793
+ e.persist == null ? void 0 : e.persist();
655
794
  instance.toggleRowExpanded(rowId);
656
795
  } : undefined
657
796
  };
@@ -661,7 +800,7 @@ var Expanding = {
661
800
  var initialProps = {
662
801
  title: 'Toggle All Expanded',
663
802
  onClick: function onClick(e) {
664
- e.persist();
803
+ e.persist == null ? void 0 : e.persist();
665
804
  instance.toggleAllRowsExpanded();
666
805
  }
667
806
  };
@@ -697,25 +836,19 @@ var Expanding = {
697
836
  });
698
837
  return maxDepth;
699
838
  },
700
- getExpandedRowModel: memo(function () {
701
- return [instance.getState().expanded, instance.getGroupedRowModel(), instance.options.expandRowsFn, instance.options.paginateExpandedRows];
702
- }, function (expanded, rowModel, expandRowsFn, paginateExpandedRows) {
703
- if (!expandRowsFn || // Do not expand if rows are not included in pagination
704
- !paginateExpandedRows || expanded !== true && !Object.keys(expanded != null ? expanded : {}).length) {
705
- return rowModel;
839
+ getPreExpandedRowModel: function getPreExpandedRowModel() {
840
+ return instance.getGroupedRowModel();
841
+ },
842
+ getExpandedRowModel: function getExpandedRowModel() {
843
+ if (!instance._getExpandedRowModel && instance.options.getExpandedRowModel) {
844
+ instance._getExpandedRowModel = instance.options.getExpandedRowModel(instance);
706
845
  }
707
846
 
708
- return expandRowsFn(instance, rowModel);
709
- }, {
710
- key: 'getExpandedRowModel',
711
- debug: function debug() {
712
- var _instance$options$deb;
713
-
714
- return (_instance$options$deb = instance.options.debugAll) != null ? _instance$options$deb : instance.options.debugTable;
847
+ if (!instance._getExpandedRowModel) {
848
+ return instance.getPreExpandedRowModel();
715
849
  }
716
- }),
717
- getPreExpandedRowModel: function getPreExpandedRowModel() {
718
- return instance.getGroupedRowModel();
850
+
851
+ return instance._getExpandedRowModel();
719
852
  }
720
853
  };
721
854
  },
@@ -903,7 +1036,9 @@ var Filters = {
903
1036
  getInitialState: function getInitialState() {
904
1037
  return {
905
1038
  columnFilters: [],
906
- globalFilter: undefined
1039
+ globalFilter: undefined,
1040
+ columnFiltersProgress: 1,
1041
+ globalFilterProgress: 1
907
1042
  };
908
1043
  },
909
1044
  getDefaultOptions: function getDefaultOptions(instance) {
@@ -1002,6 +1137,8 @@ var Filters = {
1002
1137
  var registered = false;
1003
1138
  return {
1004
1139
  _notifyFiltersReset: function _notifyFiltersReset() {
1140
+ instance._notifySortingReset();
1141
+
1005
1142
  if (!registered) {
1006
1143
  registered = true;
1007
1144
  return;
@@ -1011,16 +1148,12 @@ var Filters = {
1011
1148
  return;
1012
1149
  }
1013
1150
 
1014
- if (instance.options.autoResetAll === true) {
1015
- instance.resetSorting();
1016
- } else {
1017
- if (instance.options.autoResetColumnFilters) {
1018
- instance.resetColumnFilters();
1019
- }
1151
+ if (instance.options.autoResetAll === true || instance.options.autoResetColumnFilters) {
1152
+ instance.resetColumnFilters();
1153
+ }
1020
1154
 
1021
- if (instance.options.autoResetGlobalFilter) {
1022
- instance.resetGlobalFilter();
1023
- }
1155
+ if (instance.options.autoResetAll === true || instance.options.autoResetGlobalFilter) {
1156
+ instance.resetGlobalFilter();
1024
1157
  }
1025
1158
  },
1026
1159
  getColumnAutoFilterFn: function getColumnAutoFilterFn(columnId) {
@@ -1097,7 +1230,7 @@ var Filters = {
1097
1230
  instance.options.onGlobalFilterChange == null ? void 0 : instance.options.onGlobalFilterChange(updater, functionalUpdate(updater, instance.getState().globalFilter));
1098
1231
  },
1099
1232
  resetGlobalFilter: function resetGlobalFilter() {
1100
- instance.setGlobalFilter(undefined);
1233
+ instance.setGlobalFilter(instance.initialState.globalFilter);
1101
1234
  },
1102
1235
  getColumnCanColumnFilter: function getColumnCanColumnFilter(columnId) {
1103
1236
  var _ref3, _ref4, _ref5, _ref6, _ref7, _column$enableAllFilt;
@@ -1200,84 +1333,31 @@ var Filters = {
1200
1333
  getPreColumnFilteredRowModel: function getPreColumnFilteredRowModel() {
1201
1334
  return instance.getCoreRowModel();
1202
1335
  },
1203
- getColumnFilteredRowModel: memo(function () {
1204
- return [instance.getState().columnFilters, instance.getCoreRowModel(), instance.options.columnFilterRowsFn];
1205
- }, function (columnFilters, rowModel, columnFiltersFn) {
1206
- var columnFilteredRowModel = function () {
1207
- if (!(columnFilters != null && columnFilters.length) || !columnFiltersFn) {
1208
- return rowModel;
1209
- }
1210
-
1211
- return columnFiltersFn(instance, rowModel);
1212
- }(); // Now that each filtered column has it's partially filtered rows,
1213
- // lets assign the final filtered rows to all of the other columns
1214
-
1215
-
1216
- var nonFilteredColumns = instance.getAllLeafColumns().filter(function (column) {
1217
- var _instance$getState$co5;
1218
-
1219
- return !((_instance$getState$co5 = instance.getState().columnFilters) != null && _instance$getState$co5.find(function (d) {
1220
- return d.id === column.id;
1221
- }));
1222
- }); // This essentially enables faceted filter options to be built easily
1223
- // using every column's preFilteredRows value
1224
-
1225
- nonFilteredColumns.forEach(function (column) {
1226
- column.getPreFilteredRows = function () {
1227
- return columnFilteredRowModel.rows;
1228
- };
1229
- });
1230
- return columnFilteredRowModel;
1231
- }, {
1232
- key: 'getColumnFilteredRowModel',
1233
- debug: function debug() {
1234
- var _instance$options$deb2;
1336
+ getColumnFilteredRowModel: function getColumnFilteredRowModel() {
1337
+ if (!instance._getColumnFilteredRowModel && instance.options.getColumnFilteredRowModel) {
1338
+ instance._getColumnFilteredRowModel = instance.options.getColumnFilteredRowModel(instance);
1339
+ }
1235
1340
 
1236
- return (_instance$options$deb2 = instance.options.debugAll) != null ? _instance$options$deb2 : instance.options.debugTable;
1341
+ if (!instance._getColumnFilteredRowModel) {
1342
+ return instance.getPreColumnFilteredRowModel();
1237
1343
  }
1238
- }),
1344
+
1345
+ return instance._getColumnFilteredRowModel();
1346
+ },
1239
1347
  getPreGlobalFilteredRowModel: function getPreGlobalFilteredRowModel() {
1240
1348
  return instance.getColumnFilteredRowModel();
1241
1349
  },
1242
- getGlobalFilteredRowModel: memo(function () {
1243
- return [instance.getState().globalFilter, instance.getColumnFilteredRowModel(), instance.options.globalFilterRowsFn];
1244
- }, function (globalFilterValue, columnFilteredRowModel, globalFiltersFn) {
1245
- var globalFilteredRowModel = function () {
1246
- if (!globalFiltersFn || !globalFilterValue) {
1247
- return columnFilteredRowModel;
1248
- }
1249
-
1250
- return globalFiltersFn(instance, columnFilteredRowModel);
1251
- }(); // Now that each filtered column has it's partially filtered rows,
1252
- // lets assign the final filtered rows to all of the other columns
1253
-
1254
-
1255
- var nonFilteredColumns = instance.getAllLeafColumns().filter(function (column) {
1256
- var _instance$getState$co6;
1257
-
1258
- return !((_instance$getState$co6 = instance.getState().columnFilters) != null && _instance$getState$co6.find(function (d) {
1259
- return d.id === column.id;
1260
- }));
1261
- }); // This essentially enables faceted filter options to be built easily
1262
- // using every column's preFilteredRows value
1263
-
1264
- nonFilteredColumns.forEach(function (column) {
1265
- column.getPreFilteredRows = function () {
1266
- return globalFilteredRowModel.rows;
1267
- };
1268
- });
1269
- return globalFilteredRowModel;
1270
- }, {
1271
- key: 'getGlobalFilteredRowModel',
1272
- debug: function debug() {
1273
- var _instance$options$deb3;
1350
+ getGlobalFilteredRowModel: function getGlobalFilteredRowModel() {
1351
+ if (!instance._getGlobalFilteredRowModel && instance.options.getGlobalFilteredRowModel) {
1352
+ instance._getGlobalFilteredRowModel = instance.options.getGlobalFilteredRowModel(instance);
1353
+ }
1274
1354
 
1275
- return (_instance$options$deb3 = instance.options.debugAll) != null ? _instance$options$deb3 : instance.options.debugTable;
1276
- },
1277
- onChange: function onChange() {
1278
- instance._notifySortingReset();
1355
+ if (!instance._getGlobalFilteredRowModel) {
1356
+ return instance.getPreGlobalFilteredRowModel();
1279
1357
  }
1280
- })
1358
+
1359
+ return instance._getGlobalFilteredRowModel();
1360
+ }
1281
1361
  };
1282
1362
  }
1283
1363
  };
@@ -1442,6 +1522,8 @@ var Grouping = {
1442
1522
  var registered = false;
1443
1523
  return {
1444
1524
  _notifyGroupingReset: function _notifyGroupingReset() {
1525
+ instance._notifyExpandedReset();
1526
+
1445
1527
  if (!registered) {
1446
1528
  registered = true;
1447
1529
  return;
@@ -1541,25 +1623,17 @@ var Grouping = {
1541
1623
  getPreGroupedRowModel: function getPreGroupedRowModel() {
1542
1624
  return instance.getSortedRowModel();
1543
1625
  },
1544
- getGroupedRowModel: memo(function () {
1545
- return [instance.getState().grouping, instance.getSortedRowModel(), instance.options.groupRowsFn];
1546
- }, function (grouping, rowModel, groupRowsFn) {
1547
- if (!groupRowsFn || !grouping.length) {
1548
- return rowModel;
1626
+ getGroupedRowModel: function getGroupedRowModel() {
1627
+ if (!instance._getGroupedRowModel && instance.options.getGroupedRowModel) {
1628
+ instance._getGroupedRowModel = instance.options.getGroupedRowModel(instance);
1549
1629
  }
1550
1630
 
1551
- return groupRowsFn(instance, rowModel);
1552
- }, {
1553
- key: 'getGroupedRowModel',
1554
- debug: function debug() {
1555
- var _instance$options$deb;
1556
-
1557
- return (_instance$options$deb = instance.options.debugAll) != null ? _instance$options$deb : instance.options.debugTable;
1558
- },
1559
- onChange: function onChange() {
1560
- return instance._notifyExpandedReset();
1631
+ if (!instance._getGroupedRowModel) {
1632
+ return instance.getPreGroupedRowModel();
1561
1633
  }
1562
- })
1634
+
1635
+ return instance._getGroupedRowModel();
1636
+ }
1563
1637
  };
1564
1638
  },
1565
1639
  createRow: function createRow(row, instance) {
@@ -1802,9 +1876,7 @@ var Pagination = {
1802
1876
  return instance.getState().pagination.pageIndex > 0;
1803
1877
  },
1804
1878
  getCanNextPage: function getCanNextPage() {
1805
- var _instance$getState$pa = instance.getState().pagination,
1806
- pageIndex = _instance$getState$pa.pageIndex,
1807
- pageSize = _instance$getState$pa.pageSize;
1879
+ var pageIndex = instance.getState().pagination.pageIndex;
1808
1880
  var pageCount = instance.getPageCount();
1809
1881
 
1810
1882
  if (pageCount === -1) {
@@ -1815,7 +1887,7 @@ var Pagination = {
1815
1887
  return false;
1816
1888
  }
1817
1889
 
1818
- return pageIndex < Math.ceil(instance.getPrePaginationRowModel().rows.length / pageSize) - 1;
1890
+ return pageIndex < pageCount - 1;
1819
1891
  },
1820
1892
  previousPage: function previousPage() {
1821
1893
  return instance.setPageIndex(function (old) {
@@ -1830,22 +1902,17 @@ var Pagination = {
1830
1902
  getPrePaginationRowModel: function getPrePaginationRowModel() {
1831
1903
  return instance.getExpandedRowModel();
1832
1904
  },
1833
- getPaginationRowModel: memo(function () {
1834
- return [instance.getState().pagination, instance.getExpandedRowModel(), instance.options.paginateRowsFn];
1835
- }, function (_pagination, rowModel, paginateRowsFn) {
1836
- if (!paginateRowsFn || !rowModel.rows.length) {
1837
- return rowModel;
1905
+ getPaginationRowModel: function getPaginationRowModel() {
1906
+ if (!instance._getPaginationRowModel && instance.options.getPaginationRowModel) {
1907
+ instance._getPaginationRowModel = instance.options.getPaginationRowModel(instance);
1838
1908
  }
1839
1909
 
1840
- return paginateRowsFn(instance, rowModel);
1841
- }, {
1842
- key: 'getPaginationRowModel',
1843
- debug: function debug() {
1844
- var _instance$options$deb2;
1845
-
1846
- return (_instance$options$deb2 = instance.options.debugAll) != null ? _instance$options$deb2 : instance.options.debugTable;
1910
+ if (!instance._getPaginationRowModel) {
1911
+ return instance.getPrePaginationRowModel();
1847
1912
  }
1848
- }),
1913
+
1914
+ return instance._getPaginationRowModel();
1915
+ },
1849
1916
  getPageCount: function getPageCount() {
1850
1917
  var pageCount = instance.getState().pagination.pageCount;
1851
1918
 
@@ -2163,7 +2230,9 @@ var RowSelection = {
2163
2230
  return (_instance$options$deb = instance.options.debugAll) != null ? _instance$options$deb : instance.options.debugTable;
2164
2231
  },
2165
2232
  onChange: function onChange() {
2166
- return instance._notifyExpandedReset();
2233
+ instance.queue(function () {
2234
+ return instance._notifyExpandedReset();
2235
+ });
2167
2236
  }
2168
2237
  }),
2169
2238
  getFilteredSelectedRowModel: memo(function () {
@@ -2186,7 +2255,9 @@ var RowSelection = {
2186
2255
  return (_instance$options$deb2 = instance.options.debugAll) != null ? _instance$options$deb2 : instance.options.debugTable;
2187
2256
  },
2188
2257
  onChange: function onChange() {
2189
- return instance._notifyExpandedReset();
2258
+ return instance.queue(function () {
2259
+ return instance._notifyExpandedReset();
2260
+ });
2190
2261
  }
2191
2262
  }),
2192
2263
  getGroupedSelectedRowModel: memo(function () {
@@ -2209,7 +2280,9 @@ var RowSelection = {
2209
2280
  return (_instance$options$deb3 = instance.options.debugAll) != null ? _instance$options$deb3 : instance.options.debugTable;
2210
2281
  },
2211
2282
  onChange: function onChange() {
2212
- return instance._notifyExpandedReset();
2283
+ return instance.queue(function () {
2284
+ return instance._notifyExpandedReset();
2285
+ });
2213
2286
  }
2214
2287
  }),
2215
2288
  ///
@@ -2655,6 +2728,8 @@ var Sorting = {
2655
2728
  var registered = false;
2656
2729
  return {
2657
2730
  _notifySortingReset: function _notifySortingReset() {
2731
+ instance._notifyGroupingReset();
2732
+
2658
2733
  if (!registered) {
2659
2734
  registered = true;
2660
2735
  return;
@@ -2876,7 +2951,7 @@ var Sorting = {
2876
2951
  var initialProps = {
2877
2952
  title: canSort ? 'Toggle Sorting' : undefined,
2878
2953
  onClick: canSort ? function (e) {
2879
- e.persist();
2954
+ e.persist == null ? void 0 : e.persist();
2880
2955
  column.toggleSorting == null ? void 0 : column.toggleSorting(undefined, column.getCanMultiSort() ? instance.options.isMultiSortEvent == null ? void 0 : instance.options.isMultiSortEvent(e) : false);
2881
2956
  } : undefined
2882
2957
  };
@@ -2885,25 +2960,17 @@ var Sorting = {
2885
2960
  getPreSortedRowModel: function getPreSortedRowModel() {
2886
2961
  return instance.getGlobalFilteredRowModel();
2887
2962
  },
2888
- getSortedRowModel: memo(function () {
2889
- return [instance.getState().sorting, instance.getGlobalFilteredRowModel(), instance.options.sortRowsFn];
2890
- }, function (sorting, rowModel, sortingFn) {
2891
- if (!sortingFn || !(sorting != null && sorting.length)) {
2892
- return rowModel;
2963
+ getSortedRowModel: function getSortedRowModel() {
2964
+ if (!instance._getSortedRowModel && instance.options.getSortedRowModel) {
2965
+ instance._getSortedRowModel = instance.options.getSortedRowModel(instance);
2893
2966
  }
2894
2967
 
2895
- return sortingFn(instance, rowModel);
2896
- }, {
2897
- key: 'getSortedRowModel',
2898
- debug: function debug() {
2899
- var _instance$options$deb;
2900
-
2901
- return (_instance$options$deb = instance.options.debugAll) != null ? _instance$options$deb : instance.options.debugTable;
2902
- },
2903
- onChange: function onChange() {
2904
- instance._notifyGroupingReset();
2968
+ if (!instance._getSortedRowModel) {
2969
+ return instance.getPreSortedRowModel();
2905
2970
  }
2906
- })
2971
+
2972
+ return instance._getSortedRowModel();
2973
+ }
2907
2974
  };
2908
2975
  }
2909
2976
  };
@@ -3689,20 +3756,50 @@ function createTableInstance(options) {
3689
3756
  };
3690
3757
 
3691
3758
  instance.options = buildOptions(options);
3759
+ var coreInitialState = {
3760
+ coreProgress: 1
3761
+ };
3692
3762
 
3693
- var initialState = _extends({}, features.reduce(function (obj, feature) {
3763
+ var initialState = _extends({}, coreInitialState, features.reduce(function (obj, feature) {
3694
3764
  return Object.assign(obj, feature.getInitialState == null ? void 0 : feature.getInitialState());
3695
3765
  }, {}), (_options$initialState = options.initialState) != null ? _options$initialState : {});
3696
3766
 
3767
+ var queued = [];
3768
+ var queuedTimeout;
3769
+
3697
3770
  var finalInstance = _extends({}, instance, features.reduce(function (obj, feature) {
3698
3771
  return Object.assign(obj, feature.getInstance == null ? void 0 : feature.getInstance(instance));
3699
3772
  }, {}), {
3773
+ queue: function queue(cb) {
3774
+ queued.push(cb);
3775
+
3776
+ if (!queuedTimeout) {
3777
+ queuedTimeout = setTimeout(function () {
3778
+ instance.setState(function (old) {
3779
+ return _extends({}, old);
3780
+ });
3781
+ });
3782
+ }
3783
+ },
3784
+ willUpdate: function willUpdate() {
3785
+ clearTimeout(queuedTimeout);
3786
+
3787
+ while (queued.length) {
3788
+ queued.shift()();
3789
+ }
3790
+ },
3700
3791
  initialState: initialState,
3701
3792
  reset: function reset() {
3702
3793
  instance.setState(instance.initialState);
3703
3794
  },
3704
3795
  setOptions: function setOptions(updater) {
3705
- instance.options = buildOptions(functionalUpdate(updater, instance.options));
3796
+ var newOptions = functionalUpdate(updater, instance.options);
3797
+
3798
+ if (instance.options.mergeOptions) {
3799
+ instance.options = instance.options.mergeOptions(defaultOptions, newOptions);
3800
+ } else {
3801
+ instance.options = buildOptions(newOptions);
3802
+ }
3706
3803
  },
3707
3804
  render: function render(template, props) {
3708
3805
  if (typeof instance.options.render === 'function') {
@@ -3998,85 +4095,13 @@ function createTableInstance(options) {
3998
4095
 
3999
4096
  return row;
4000
4097
  },
4001
- getCoreRowModel: memo(function () {
4002
- return [instance.options.data];
4003
- }, function (data) {
4004
- // Access the row model using initial columns
4005
- var rows = [];
4006
- var flatRows = [];
4007
- var rowsById = {};
4008
- var leafColumns = instance.getAllLeafColumns();
4009
-
4010
- var accessRow = function accessRow(originalRow, rowIndex, depth, parentRows, parent) {
4011
- if (depth === void 0) {
4012
- depth = 0;
4013
- }
4014
-
4015
- var id = instance.getRowId(originalRow, rowIndex, parent);
4016
-
4017
- if (!id) {
4018
- if (process.env.NODE_ENV !== 'production') {
4019
- throw new Error("getRowId expected an ID, but got " + id);
4020
- }
4021
- }
4022
-
4023
- var values = {};
4024
-
4025
- for (var i = 0; i < leafColumns.length; i++) {
4026
- var _column = leafColumns[i];
4027
-
4028
- if (_column && _column.accessorFn) {
4029
- values[_column.id] = _column.accessorFn(originalRow, rowIndex);
4030
- }
4031
- } // Make the row
4032
-
4033
-
4034
- var row = instance.createRow(id, originalRow, rowIndex, depth, values); // Push instance row into the parentRows array
4035
-
4036
- parentRows.push(row); // Keep track of every row in a flat array
4037
-
4038
- flatRows.push(row); // Also keep track of every row by its ID
4039
-
4040
- rowsById[id] = row; // Get the original subrows
4041
-
4042
- if (instance.options.getSubRows) {
4043
- var originalSubRows = instance.options.getSubRows(originalRow, rowIndex); // Then recursively access them
4044
-
4045
- if (originalSubRows != null && originalSubRows.length) {
4046
- row.originalSubRows = originalSubRows;
4047
- var subRows = [];
4048
-
4049
- for (var _i = 0; _i < row.originalSubRows.length; _i++) {
4050
- accessRow(row.originalSubRows[_i], _i, depth + 1, subRows, row);
4051
- }
4052
-
4053
- row.subRows = subRows;
4054
- }
4055
- }
4056
- };
4057
-
4058
- for (var i = 0; i < data.length; i++) {
4059
- accessRow(data[i], i, 0, rows);
4098
+ getCoreRowModel: function getCoreRowModel() {
4099
+ if (!instance._getCoreRowModel) {
4100
+ instance._getCoreRowModel = instance.options.getCoreRowModel(instance);
4060
4101
  }
4061
4102
 
4062
- return {
4063
- rows: rows,
4064
- flatRows: flatRows,
4065
- rowsById: rowsById
4066
- };
4067
- }, {
4068
- key: 'getRowModel',
4069
- debug: function debug() {
4070
- var _instance$options$deb10;
4071
-
4072
- return (_instance$options$deb10 = instance.options.debugAll) != null ? _instance$options$deb10 : instance.options.debugTable;
4073
- },
4074
- onChange: function onChange() {
4075
- instance._notifyFiltersReset();
4076
-
4077
- instance._notifyRowSelectionReset();
4078
- }
4079
- }),
4103
+ return instance._getCoreRowModel();
4104
+ },
4080
4105
  // The final calls start at the bottom of the model,
4081
4106
  // expanded rows, which then work their way up
4082
4107
  getRowModel: function getRowModel() {
@@ -4179,6 +4204,18 @@ function createTableInstance(options) {
4179
4204
  return (_instance$getRightHea = (_instance$getRightHea2 = instance.getRightHeaderGroups()[0]) == null ? void 0 : _instance$getRightHea2.headers.reduce(function (sum, header) {
4180
4205
  return sum + header.getWidth();
4181
4206
  }, 0)) != null ? _instance$getRightHea : 0;
4207
+ },
4208
+ getOverallProgress: function getOverallProgress() {
4209
+ var _instance$getState = instance.getState(),
4210
+ coreProgress = _instance$getState.coreProgress,
4211
+ columnFiltersProgress = _instance$getState.columnFiltersProgress,
4212
+ globalFilterProgress = _instance$getState.globalFilterProgress;
4213
+
4214
+ return mean(function () {
4215
+ return [coreProgress, columnFiltersProgress, globalFilterProgress].filter(function (d) {
4216
+ return d < 1;
4217
+ });
4218
+ });
4182
4219
  }
4183
4220
  });
4184
4221
 
@@ -4247,14 +4284,208 @@ function _createTable(_, __, __options) {
4247
4284
  };
4248
4285
  }
4249
4286
 
4250
- function filterRowModelFromLeafs(rowsToFilter, filterRows, instance) {
4251
- var newFilteredFlatRows = [];
4252
- var newFilteredRowsById = {};
4253
-
4254
- var recurseFilterRows = function recurseFilterRows(rowsToFilter, depth) {
4255
- if (depth === void 0) {
4256
- depth = 0;
4257
- }
4287
+ function getCoreRowModelSync() {
4288
+ return function (instance) {
4289
+ return memo(function () {
4290
+ return [instance.options.data];
4291
+ }, function (data) {
4292
+ // Access the row model using initial columns
4293
+ var rows = [];
4294
+ var flatRows = [];
4295
+ var rowsById = {};
4296
+ var leafColumns = instance.getAllLeafColumns();
4297
+
4298
+ var accessRow = function accessRow(originalRow, rowIndex, depth, parentRows, parent) {
4299
+ if (depth === void 0) {
4300
+ depth = 0;
4301
+ }
4302
+
4303
+ var id = instance.getRowId(originalRow, rowIndex, parent);
4304
+
4305
+ if (!id) {
4306
+ if (process.env.NODE_ENV !== 'production') {
4307
+ throw new Error("getRowId expected an ID, but got " + id);
4308
+ }
4309
+ }
4310
+
4311
+ var values = {};
4312
+
4313
+ for (var i = 0; i < leafColumns.length; i++) {
4314
+ var column = leafColumns[i];
4315
+
4316
+ if (column && column.accessorFn) {
4317
+ values[column.id] = column.accessorFn(originalRow, rowIndex);
4318
+ }
4319
+ } // Make the row
4320
+
4321
+
4322
+ var row = instance.createRow(id, originalRow, rowIndex, depth, values); // Push instance row into the parentRows array
4323
+
4324
+ parentRows.push(row); // Keep track of every row in a flat array
4325
+
4326
+ flatRows.push(row); // Also keep track of every row by its ID
4327
+
4328
+ rowsById[id] = row; // Get the original subrows
4329
+
4330
+ if (instance.options.getSubRows) {
4331
+ var originalSubRows = instance.options.getSubRows(originalRow, rowIndex); // Then recursively access them
4332
+
4333
+ if (originalSubRows != null && originalSubRows.length) {
4334
+ row.originalSubRows = originalSubRows;
4335
+ var subRows = [];
4336
+
4337
+ for (var _i = 0; _i < row.originalSubRows.length; _i++) {
4338
+ accessRow(row.originalSubRows[_i], _i, depth + 1, subRows, row);
4339
+ }
4340
+
4341
+ row.subRows = subRows;
4342
+ }
4343
+ }
4344
+ };
4345
+
4346
+ for (var i = 0; i < data.length; i++) {
4347
+ accessRow(data[i], i, 0, rows);
4348
+ }
4349
+
4350
+ return {
4351
+ rows: rows,
4352
+ flatRows: flatRows,
4353
+ rowsById: rowsById
4354
+ };
4355
+ }, {
4356
+ key: 'getRowModel',
4357
+ debug: function debug() {
4358
+ var _instance$options$deb;
4359
+
4360
+ return (_instance$options$deb = instance.options.debugAll) != null ? _instance$options$deb : instance.options.debugTable;
4361
+ },
4362
+ onChange: function onChange() {
4363
+ instance.queue(function () {
4364
+ instance._notifyFiltersReset();
4365
+
4366
+ instance._notifyRowSelectionReset();
4367
+ });
4368
+ }
4369
+ });
4370
+ };
4371
+ }
4372
+
4373
+ function getCoreRowModelAsync(opts) {
4374
+ return function (instance) {
4375
+ return incrementalMemo(function () {
4376
+ return [instance.options.data, instance.getAllLeafColumns()];
4377
+ }, function () {
4378
+ var rows = [];
4379
+ var flatRows = [];
4380
+ var rowsById = {};
4381
+ return {
4382
+ rows: rows,
4383
+ flatRows: flatRows,
4384
+ rowsById: rowsById
4385
+ };
4386
+ }, function (data, leafColumns) {
4387
+ return function (rowModelRef) {
4388
+ return function (scheduleTask) {
4389
+ var accessRows = function accessRows(originalRows, depth, parent) {
4390
+ if (depth === void 0) {
4391
+ depth = 0;
4392
+ }
4393
+
4394
+ var batchGroups = getBatchGroups(originalRows, 2000);
4395
+
4396
+ var _loop = function _loop(i) {
4397
+ var batchGroup = batchGroups[i];
4398
+ scheduleTask(function () {
4399
+ for (var _i = 0; _i < batchGroup.items.length; _i++) {
4400
+ var originalRow = batchGroup.items[_i];
4401
+ var rowIndex = batchGroup.start + _i;
4402
+ var id = instance.getRowId(originalRow, rowIndex, parent);
4403
+
4404
+ if (!id) {
4405
+ if (process.env.NODE_ENV !== 'production') {
4406
+ throw new Error("getRowId expected an ID, but got " + id);
4407
+ }
4408
+ }
4409
+
4410
+ var values = {};
4411
+
4412
+ for (var _i2 = 0; _i2 < leafColumns.length; _i2++) {
4413
+ var column = leafColumns[_i2];
4414
+
4415
+ if (column && column.accessorFn) {
4416
+ values[column.id] = column.accessorFn(originalRow, rowIndex);
4417
+ }
4418
+ } // Make the row
4419
+
4420
+
4421
+ var row = instance.createRow(id, originalRow, rowIndex, depth, values); // Push instance row into the parentRows array
4422
+
4423
+ if (parent) {
4424
+ parent.subRows.push(row);
4425
+ } else {
4426
+ rowModelRef.current.rows.push(row);
4427
+ } // Keep track of every row in a flat array
4428
+
4429
+
4430
+ rowModelRef.current.flatRows.push(row); // Also keep track of every row by its ID
4431
+
4432
+ rowModelRef.current.rowsById[id] = row; // Get the original subrows
4433
+
4434
+ if (instance.options.getSubRows) {
4435
+ var originalSubRows = instance.options.getSubRows(originalRow, rowIndex); // Then recursively access them
4436
+
4437
+ if (originalSubRows != null && originalSubRows.length) {
4438
+ row.originalSubRows = originalSubRows;
4439
+ row.subRows = [];
4440
+ accessRows(row.originalSubRows, depth + 1, row);
4441
+ }
4442
+ }
4443
+ }
4444
+ });
4445
+ };
4446
+
4447
+ for (var i = 0; i < batchGroups.length; i++) {
4448
+ _loop(i);
4449
+ }
4450
+ };
4451
+
4452
+ accessRows(data);
4453
+ };
4454
+ };
4455
+ }, {
4456
+ key: 'getRowModel',
4457
+ initialSync: opts == null ? void 0 : opts.initialSync,
4458
+ onProgress: function onProgress(progress) {
4459
+ instance.setState(function (old) {
4460
+ return _extends({}, old, {
4461
+ coreProgress: progress
4462
+ });
4463
+ });
4464
+ },
4465
+ debug: function debug() {
4466
+ var _instance$options$deb;
4467
+
4468
+ return (_instance$options$deb = instance.options.debugAll) != null ? _instance$options$deb : instance.options.debugTable;
4469
+ },
4470
+ onChange: function onChange() {
4471
+ instance.queue(function () {
4472
+ instance._notifyFiltersReset();
4473
+
4474
+ instance._notifyRowSelectionReset();
4475
+ });
4476
+ }
4477
+ });
4478
+ };
4479
+ }
4480
+
4481
+ function filterRowModelFromLeafs(rowsToFilter, filterRows, instance) {
4482
+ var newFilteredFlatRows = [];
4483
+ var newFilteredRowsById = {};
4484
+
4485
+ var recurseFilterRows = function recurseFilterRows(rowsToFilter, depth) {
4486
+ if (depth === void 0) {
4487
+ depth = 0;
4488
+ }
4258
4489
 
4259
4490
  rowsToFilter = rowsToFilter.slice(); // Filter from children up first
4260
4491
 
@@ -4330,259 +4561,386 @@ function filterRowModelFromRoot(rowsToFilter, filterRows, instance) {
4330
4561
  };
4331
4562
  }
4332
4563
 
4333
- function columnFilterRowsFn(instance, rowModel) {
4334
- var columnFilters = instance.getState().columnFilters;
4335
- var filterFromLeafRows = instance.options.filterFromLeafRows;
4336
-
4337
- var filterRows = function filterRows(rowsToFilter, depth) {
4338
- for (var i = 0; i < columnFilters.length; i++) {
4339
- var _columnFilters$i = columnFilters[i],
4340
- columnId = _columnFilters$i.id,
4341
- filterValue = _columnFilters$i.value; // Find the columnFilters column
4564
+ function getColumnFilteredRowModelSync() {
4565
+ return function (instance) {
4566
+ return memo(function () {
4567
+ return [instance.getState().columnFilters, instance.getCoreRowModel()];
4568
+ }, function (columnFilters, rowModel) {
4569
+ var columnFilteredRowModel = function () {
4570
+ if (!rowModel.rows.length || !columnFilters) {
4571
+ return rowModel;
4572
+ }
4342
4573
 
4343
- var column = instance.getColumn(columnId);
4574
+ var filterFromLeafRows = instance.options.filterFromLeafRows;
4344
4575
 
4345
- if (!column) {
4346
- if (process.env.NODE_ENV !== 'production') {
4347
- console.warn("Table: Could not find a column with id: " + columnId);
4348
- }
4576
+ var filterRows = function filterRows(rowsToFilter, depth) {
4577
+ for (var i = 0; i < columnFilters.length; i++) {
4578
+ var _columnFilters$i = columnFilters[i],
4579
+ columnId = _columnFilters$i.id,
4580
+ filterValue = _columnFilters$i.value; // Find the columnFilters column
4349
4581
 
4350
- throw new Error();
4351
- }
4582
+ var column = instance.getColumn(columnId);
4352
4583
 
4353
- if (depth === 0) {
4354
- (function () {
4355
- var preFilteredRows = [].concat(rowsToFilter);
4584
+ if (!column) {
4585
+ if (process.env.NODE_ENV !== 'production') {
4586
+ console.warn("Table: Could not find a column with id: " + columnId);
4587
+ }
4356
4588
 
4357
- column.getPreFilteredRows = function () {
4358
- return preFilteredRows;
4359
- };
4360
- })();
4361
- }
4589
+ throw new Error();
4590
+ }
4362
4591
 
4363
- var filterFn = instance.getColumnFilterFn(column.id);
4592
+ if (depth === 0) {
4593
+ (function () {
4594
+ var preFilteredRows = [].concat(rowsToFilter);
4364
4595
 
4365
- if (!filterFn) {
4366
- if (process.env.NODE_ENV !== 'production') {
4367
- console.warn("Could not find a valid 'column.filterType' for column with the ID: " + column.id + ".");
4368
- }
4596
+ column.getPreFilteredRows = function () {
4597
+ return preFilteredRows;
4598
+ };
4599
+ })();
4600
+ }
4369
4601
 
4370
- continue;
4371
- } // Pass the rows, id, filterValue and column to the filterFn
4372
- // to get the filtered rows back
4602
+ var filterFn = instance.getColumnFilterFn(column.id);
4373
4603
 
4604
+ if (!filterFn) {
4605
+ if (process.env.NODE_ENV !== 'production') {
4606
+ console.warn("Could not find a valid 'column.filterType' for column with the ID: " + column.id + ".");
4607
+ }
4374
4608
 
4375
- rowsToFilter = filterFn(rowsToFilter, [columnId], filterValue);
4376
- }
4609
+ continue;
4610
+ } // Pass the rows, id, filterValue and column to the filterFn
4611
+ // to get the filtered rows back
4377
4612
 
4378
- return rowsToFilter;
4379
- };
4380
4613
 
4381
- if (filterFromLeafRows) {
4382
- return filterRowModelFromLeafs(rowModel.rows, filterRows, instance);
4383
- }
4614
+ rowsToFilter = filterFn(rowsToFilter, [columnId], filterValue);
4615
+ }
4384
4616
 
4385
- return filterRowModelFromRoot(rowModel.rows, filterRows, instance);
4386
- }
4617
+ return rowsToFilter;
4618
+ };
4387
4619
 
4388
- function globalFilterRowsFn(instance, rowModel) {
4389
- var globalFilter = instance.getState().globalFilter;
4390
- var filterFromLeafRows = instance.options.filterFromLeafRows;
4391
- var filterFn = instance.getGlobalFilterFn();
4620
+ if (filterFromLeafRows) {
4621
+ return filterRowModelFromLeafs(rowModel.rows, filterRows, instance);
4622
+ }
4392
4623
 
4393
- if (!filterFn) {
4394
- if (process.env.NODE_ENV !== 'production') {
4395
- console.warn("Could not find a valid 'globalFilterType'");
4396
- }
4624
+ return filterRowModelFromRoot(rowModel.rows, filterRows, instance);
4625
+ }(); // Now that each filtered column has it's partially filtered rows,
4626
+ // lets assign the final filtered rows to all of the other columns
4397
4627
 
4398
- return rowModel;
4399
- }
4400
4628
 
4401
- var filterableColumns = instance.getAllLeafColumns().filter(function (column) {
4402
- return column.getCanGlobalFilter();
4403
- });
4404
- var filterableColumnIds = filterableColumns.map(function (d) {
4405
- return d.id;
4406
- });
4629
+ var nonFilteredColumns = instance.getAllLeafColumns().filter(function (column) {
4630
+ var _instance$getState$co;
4407
4631
 
4408
- var filterRows = function filterRows(rows) {
4409
- return filterFn(rows, filterableColumnIds, globalFilter);
4410
- };
4632
+ return !((_instance$getState$co = instance.getState().columnFilters) != null && _instance$getState$co.find(function (d) {
4633
+ return d.id === column.id;
4634
+ }));
4635
+ }); // This essentially enables faceted filter options to be built easily
4636
+ // using every column's preFilteredRows value
4411
4637
 
4412
- if (filterFromLeafRows) {
4413
- filterRowModelFromLeafs(rowModel.rows, filterRows, instance);
4414
- }
4638
+ nonFilteredColumns.forEach(function (column) {
4639
+ column.getPreFilteredRows = function () {
4640
+ return columnFilteredRowModel.rows;
4641
+ };
4642
+ });
4643
+ return columnFilteredRowModel;
4644
+ }, {
4645
+ key: 'getColumnFilteredRowModelSync',
4646
+ debug: function debug() {
4647
+ var _instance$options$deb;
4415
4648
 
4416
- return filterRowModelFromRoot(rowModel.rows, filterRows, instance);
4649
+ return (_instance$options$deb = instance.options.debugAll) != null ? _instance$options$deb : instance.options.debugTable;
4650
+ },
4651
+ onChange: function onChange() {
4652
+ instance.queue(function () {
4653
+ instance._notifySortingReset();
4654
+ });
4655
+ }
4656
+ });
4657
+ };
4417
4658
  }
4418
4659
 
4419
- function sortRowsFn(instance, rowModel) {
4420
- var sortingState = instance.getState().sorting;
4421
- var sortedFlatRows = []; // Filter out sortings that correspond to non existing columns
4660
+ function getGlobalFilteredRowModelSync() {
4661
+ return function (instance) {
4662
+ return memo(function () {
4663
+ return [instance.getState().globalFilter, instance.getCoreRowModel()];
4664
+ }, function (globalFilter, rowModel) {
4665
+ var globalFilteredRowModel = function () {
4666
+ if (!rowModel.rows.length || !globalFilter) {
4667
+ return rowModel;
4668
+ }
4422
4669
 
4423
- var availableSorting = sortingState.filter(function (sort) {
4424
- return instance.getColumnCanSort(sort.id);
4425
- });
4426
- var columnInfoById = {};
4427
- availableSorting.forEach(function (sortEntry) {
4428
- var column = instance.getColumn(sortEntry.id);
4429
- columnInfoById[sortEntry.id] = {
4430
- sortUndefined: column.sortUndefined,
4431
- invertSorting: column.invertSorting,
4432
- sortingFn: instance.getColumnSortingFn(sortEntry.id)
4433
- };
4434
- });
4670
+ var filterFromLeafRows = instance.options.filterFromLeafRows;
4671
+ var filterFn = instance.getGlobalFilterFn();
4435
4672
 
4436
- var sortData = function sortData(rows) {
4437
- // This will also perform a stable sorting using the row index
4438
- // if needed.
4439
- var sortedData = rows.slice();
4440
- sortedData.sort(function (rowA, rowB) {
4441
- for (var i = 0; i < availableSorting.length; i += 1) {
4442
- var _sortEntry$desc;
4443
-
4444
- var sortEntry = availableSorting[i];
4445
- var columnInfo = columnInfoById[sortEntry.id];
4446
- var isDesc = (_sortEntry$desc = sortEntry == null ? void 0 : sortEntry.desc) != null ? _sortEntry$desc : false;
4447
-
4448
- if (columnInfo.sortUndefined) {
4449
- var aValue = rowA.values[sortEntry.id];
4450
- var bValue = rowB.values[sortEntry.id];
4451
- var aUndefined = typeof aValue === 'undefined';
4452
- var bUndefined = typeof bValue === 'undefined';
4453
-
4454
- if (aUndefined || bUndefined) {
4455
- return aUndefined && bUndefined ? 0 : aUndefined ? columnInfo.sortUndefined : -columnInfo.sortUndefined;
4673
+ if (!filterFn) {
4674
+ if (process.env.NODE_ENV !== 'production') {
4675
+ console.warn("Could not find a valid 'globalFilterType'");
4456
4676
  }
4457
- } // This function should always return in ascending order
4458
4677
 
4678
+ return rowModel;
4679
+ }
4459
4680
 
4460
- var sortInt = columnInfo.sortingFn(rowA, rowB, sortEntry.id);
4461
-
4462
- if (sortInt !== 0) {
4463
- if (isDesc) {
4464
- sortInt *= -1;
4465
- }
4681
+ var filterableColumns = instance.getAllLeafColumns().filter(function (column) {
4682
+ return column.getCanGlobalFilter();
4683
+ });
4684
+ var filterableColumnIds = filterableColumns.map(function (d) {
4685
+ return d.id;
4686
+ });
4466
4687
 
4467
- if (columnInfo.invertSorting) {
4468
- sortInt *= -1;
4469
- }
4688
+ var filterRows = function filterRows(rows) {
4689
+ return filterFn(rows, filterableColumnIds, globalFilter);
4690
+ };
4470
4691
 
4471
- return sortInt;
4692
+ if (filterFromLeafRows) {
4693
+ filterRowModelFromLeafs(rowModel.rows, filterRows, instance);
4472
4694
  }
4473
- }
4474
4695
 
4475
- return rowA.index - rowB.index;
4476
- }); // If there are sub-rows, sort them
4696
+ return filterRowModelFromRoot(rowModel.rows, filterRows, instance);
4697
+ }(); // Now that each filtered column has it's partially filtered rows,
4698
+ // lets assign the final filtered rows to all of the other columns
4477
4699
 
4478
- sortedData.forEach(function (row) {
4479
- sortedFlatRows.push(row);
4480
4700
 
4481
- if (!row.subRows || row.subRows.length <= 1) {
4482
- return;
4483
- }
4701
+ var nonFilteredColumns = instance.getAllLeafColumns().filter(function (column) {
4702
+ var _instance$getState$co;
4484
4703
 
4485
- row.subRows = sortData(row.subRows);
4486
- });
4487
- return sortedData;
4488
- };
4704
+ return !((_instance$getState$co = instance.getState().columnFilters) != null && _instance$getState$co.find(function (d) {
4705
+ return d.id === column.id;
4706
+ }));
4707
+ }); // This essentially enables faceted filter options to be built easily
4708
+ // using every column's preFilteredRows value
4489
4709
 
4490
- return {
4491
- rows: sortData(rowModel.rows),
4492
- flatRows: sortedFlatRows,
4493
- rowsById: rowModel.rowsById
4710
+ nonFilteredColumns.forEach(function (column) {
4711
+ column.getPreFilteredRows = function () {
4712
+ return globalFilteredRowModel.rows;
4713
+ };
4714
+ });
4715
+ return globalFilteredRowModel;
4716
+ }, {
4717
+ key: 'getGlobalFilteredRowModelSync',
4718
+ debug: function debug() {
4719
+ var _instance$options$deb;
4720
+
4721
+ return (_instance$options$deb = instance.options.debugAll) != null ? _instance$options$deb : instance.options.debugTable;
4722
+ },
4723
+ onChange: function onChange() {
4724
+ instance.queue(function () {
4725
+ instance._notifySortingReset();
4726
+ });
4727
+ }
4728
+ });
4494
4729
  };
4495
4730
  }
4496
4731
 
4497
- function groupRowsFn(instance, sortedRowModel) {
4498
- var groupingState = instance.getState().grouping; // Filter the grouping list down to columns that exist
4732
+ function getSortedRowModelSync() {
4733
+ return function (instance) {
4734
+ return memo(function () {
4735
+ return [instance.getState().sorting, instance.getGlobalFilteredRowModel()];
4736
+ }, function (sorting, rowModel) {
4737
+ if (!rowModel.rows.length || !(sorting != null && sorting.length)) {
4738
+ return rowModel;
4739
+ }
4740
+
4741
+ var sortingState = instance.getState().sorting;
4742
+ var sortedFlatRows = []; // Filter out sortings that correspond to non existing columns
4499
4743
 
4500
- var existingGrouping = groupingState.filter(function (columnId) {
4501
- return instance.getColumn(columnId);
4502
- }); // Find the columns that can or are aggregating
4503
- // Uses each column to aggregate rows into a single value
4744
+ var availableSorting = sortingState.filter(function (sort) {
4745
+ return instance.getColumnCanSort(sort.id);
4746
+ });
4747
+ var columnInfoById = {};
4748
+ availableSorting.forEach(function (sortEntry) {
4749
+ var column = instance.getColumn(sortEntry.id);
4750
+ columnInfoById[sortEntry.id] = {
4751
+ sortUndefined: column.sortUndefined,
4752
+ invertSorting: column.invertSorting,
4753
+ sortingFn: instance.getColumnSortingFn(sortEntry.id)
4754
+ };
4755
+ });
4504
4756
 
4505
- var aggregateRowsToValues = function aggregateRowsToValues(leafRows, groupedRows, depth) {
4506
- var values = {};
4507
- instance.getAllLeafColumns().forEach(function (column) {
4508
- // Don't aggregate columns that are in the grouping
4509
- if (existingGrouping.includes(column.id)) {
4510
- values[column.id] = groupedRows[0] ? groupedRows[0].values[column.id] : null;
4511
- return;
4512
- } // Aggregate the values
4757
+ var sortData = function sortData(rows) {
4758
+ // This will also perform a stable sorting using the row index
4759
+ // if needed.
4760
+ var sortedData = rows.slice();
4761
+ sortedData.sort(function (rowA, rowB) {
4762
+ for (var i = 0; i < availableSorting.length; i += 1) {
4763
+ var _sortEntry$desc;
4764
+
4765
+ var sortEntry = availableSorting[i];
4766
+ var columnInfo = columnInfoById[sortEntry.id];
4767
+ var isDesc = (_sortEntry$desc = sortEntry == null ? void 0 : sortEntry.desc) != null ? _sortEntry$desc : false;
4768
+
4769
+ if (columnInfo.sortUndefined) {
4770
+ var aValue = rowA.values[sortEntry.id];
4771
+ var bValue = rowB.values[sortEntry.id];
4772
+ var aUndefined = typeof aValue === 'undefined';
4773
+ var bUndefined = typeof bValue === 'undefined';
4774
+
4775
+ if (aUndefined || bUndefined) {
4776
+ return aUndefined && bUndefined ? 0 : aUndefined ? columnInfo.sortUndefined : -columnInfo.sortUndefined;
4777
+ }
4778
+ } // This function should always return in ascending order
4513
4779
 
4514
4780
 
4515
- var aggregateFn = instance.getColumnAggregationFn(column.id);
4781
+ var sortInt = columnInfo.sortingFn(rowA, rowB, sortEntry.id);
4516
4782
 
4517
- if (aggregateFn) {
4518
- values[column.id] = aggregateFn(function () {
4519
- return leafRows.map(function (row) {
4520
- var columnValue = row.values[column.id];
4783
+ if (sortInt !== 0) {
4784
+ if (isDesc) {
4785
+ sortInt *= -1;
4786
+ }
4521
4787
 
4522
- if (!depth && column.aggregateValue) {
4523
- columnValue = column.aggregateValue(columnValue);
4788
+ if (columnInfo.invertSorting) {
4789
+ sortInt *= -1;
4790
+ }
4791
+
4792
+ return sortInt;
4524
4793
  }
4794
+ }
4525
4795
 
4526
- return columnValue;
4527
- });
4528
- }, function () {
4529
- return groupedRows.map(function (row) {
4530
- return row.values[column.id];
4531
- });
4796
+ return rowA.index - rowB.index;
4797
+ }); // If there are sub-rows, sort them
4798
+
4799
+ sortedData.forEach(function (row) {
4800
+ sortedFlatRows.push(row);
4801
+
4802
+ if (!row.subRows || row.subRows.length <= 1) {
4803
+ return;
4804
+ }
4805
+
4806
+ row.subRows = sortData(row.subRows);
4532
4807
  });
4533
- } else if (column.aggregationType) {
4534
- console.info({
4535
- column: column
4808
+ return sortedData;
4809
+ };
4810
+
4811
+ return {
4812
+ rows: sortData(rowModel.rows),
4813
+ flatRows: sortedFlatRows,
4814
+ rowsById: rowModel.rowsById
4815
+ };
4816
+ }, {
4817
+ key: 'getSortedRowModel',
4818
+ debug: function debug() {
4819
+ var _instance$options$deb;
4820
+
4821
+ return (_instance$options$deb = instance.options.debugAll) != null ? _instance$options$deb : instance.options.debugTable;
4822
+ },
4823
+ onChange: function onChange() {
4824
+ instance.queue(function () {
4825
+ instance._notifyGroupingReset();
4536
4826
  });
4537
- throw new Error(process.env.NODE_ENV !== 'production' ? "Table: Invalid column.aggregateType option for column listed above" : '');
4538
- } else {
4539
- values[column.id] = null;
4540
4827
  }
4541
4828
  });
4542
- return values;
4543
4829
  };
4830
+ }
4544
4831
 
4545
- var groupedFlatRows = [];
4546
- var groupedRowsById = {}; // const onlyGroupedFlatRows: Row[] = [];
4547
- // const onlyGroupedRowsById: Record<RowId, Row> = {};
4548
- // const nonGroupedFlatRows: Row[] = [];
4549
- // const nonGroupedRowsById: Record<RowId, Row> = {};
4550
- // Recursively group the data
4832
+ function getGroupedRowModelSync() {
4833
+ return function (instance) {
4834
+ return memo(function () {
4835
+ return [instance.getState().grouping, instance.getSortedRowModel()];
4836
+ }, function (grouping, rowModel) {
4837
+ if (!rowModel.rows.length || !grouping.length) {
4838
+ return rowModel;
4839
+ } // Filter the grouping list down to columns that exist
4551
4840
 
4552
- var groupUpRecursively = function groupUpRecursively(rows, depth, parentId) {
4553
- if (depth === void 0) {
4554
- depth = 0;
4555
- }
4556
4841
 
4557
- // This is the last level, just return the rows
4558
- if (depth === existingGrouping.length) {
4559
- return rows;
4560
- }
4842
+ var existingGrouping = grouping.filter(function (columnId) {
4843
+ return instance.getColumn(columnId);
4844
+ }); // Find the columns that can or are aggregating
4845
+ // Uses each column to aggregate rows into a single value
4561
4846
 
4562
- var columnId = existingGrouping[depth]; // Group the rows together for this level
4847
+ var aggregateRowsToValues = function aggregateRowsToValues(leafRows, groupedRows, depth) {
4848
+ var values = {};
4849
+ instance.getAllLeafColumns().forEach(function (column) {
4850
+ // Don't aggregate columns that are in the grouping
4851
+ if (existingGrouping.includes(column.id)) {
4852
+ values[column.id] = groupedRows[0] ? groupedRows[0].values[column.id] : null;
4853
+ return;
4854
+ } // Aggregate the values
4563
4855
 
4564
- var rowGroupsMap = groupBy(rows, columnId); // Peform aggregations for each group
4565
4856
 
4566
- var aggregatedGroupedRows = Array.from(rowGroupsMap.entries()).map(function (_ref, index) {
4567
- var groupingValue = _ref[0],
4568
- groupedRows = _ref[1];
4569
- var id = columnId + ":" + groupingValue;
4570
- id = parentId ? parentId + ">" + id : id; // First, Recurse to group sub rows before aggregation
4857
+ var aggregateFn = instance.getColumnAggregationFn(column.id);
4571
4858
 
4572
- var subRows = groupUpRecursively(groupedRows, depth + 1, id); // Flatten the leaf rows of the rows in this group
4859
+ if (aggregateFn) {
4860
+ values[column.id] = aggregateFn(function () {
4861
+ return leafRows.map(function (row) {
4862
+ var columnValue = row.values[column.id];
4573
4863
 
4574
- var leafRows = depth ? flattenBy(groupedRows, function (row) {
4575
- return row.subRows;
4576
- }) : groupedRows;
4577
- var values = aggregateRowsToValues(leafRows, groupedRows, depth);
4578
- var row = instance.createRow(id, undefined, index, depth, values);
4579
- Object.assign(row, {
4580
- groupingColumnId: columnId,
4581
- groupingValue: groupingValue,
4582
- subRows: subRows,
4583
- leafRows: leafRows
4584
- });
4585
- subRows.forEach(function (subRow) {
4864
+ if (!depth && column.aggregateValue) {
4865
+ columnValue = column.aggregateValue(columnValue);
4866
+ }
4867
+
4868
+ return columnValue;
4869
+ });
4870
+ }, function () {
4871
+ return groupedRows.map(function (row) {
4872
+ return row.values[column.id];
4873
+ });
4874
+ });
4875
+ } else if (column.aggregationType) {
4876
+ console.info({
4877
+ column: column
4878
+ });
4879
+ throw new Error(process.env.NODE_ENV !== 'production' ? "Table: Invalid column.aggregateType option for column listed above" : '');
4880
+ } else {
4881
+ values[column.id] = null;
4882
+ }
4883
+ });
4884
+ return values;
4885
+ };
4886
+
4887
+ var groupedFlatRows = [];
4888
+ var groupedRowsById = {}; // const onlyGroupedFlatRows: Row[] = [];
4889
+ // const onlyGroupedRowsById: Record<RowId, Row> = {};
4890
+ // const nonGroupedFlatRows: Row[] = [];
4891
+ // const nonGroupedRowsById: Record<RowId, Row> = {};
4892
+ // Recursively group the data
4893
+
4894
+ var groupUpRecursively = function groupUpRecursively(rows, depth, parentId) {
4895
+ if (depth === void 0) {
4896
+ depth = 0;
4897
+ }
4898
+
4899
+ // This is the last level, just return the rows
4900
+ if (depth === existingGrouping.length) {
4901
+ return rows;
4902
+ }
4903
+
4904
+ var columnId = existingGrouping[depth]; // Group the rows together for this level
4905
+
4906
+ var rowGroupsMap = groupBy(rows, columnId); // Peform aggregations for each group
4907
+
4908
+ var aggregatedGroupedRows = Array.from(rowGroupsMap.entries()).map(function (_ref, index) {
4909
+ var groupingValue = _ref[0],
4910
+ groupedRows = _ref[1];
4911
+ var id = columnId + ":" + groupingValue;
4912
+ id = parentId ? parentId + ">" + id : id; // First, Recurse to group sub rows before aggregation
4913
+
4914
+ var subRows = groupUpRecursively(groupedRows, depth + 1, id); // Flatten the leaf rows of the rows in this group
4915
+
4916
+ var leafRows = depth ? flattenBy(groupedRows, function (row) {
4917
+ return row.subRows;
4918
+ }) : groupedRows;
4919
+ var values = aggregateRowsToValues(leafRows, groupedRows, depth);
4920
+ var row = instance.createRow(id, undefined, index, depth, values);
4921
+ Object.assign(row, {
4922
+ groupingColumnId: columnId,
4923
+ groupingValue: groupingValue,
4924
+ subRows: subRows,
4925
+ leafRows: leafRows
4926
+ });
4927
+ subRows.forEach(function (subRow) {
4928
+ groupedFlatRows.push(subRow);
4929
+ groupedRowsById[subRow.id] = subRow; // if (subRow.getIsGrouped?.()) {
4930
+ // onlyGroupedFlatRows.push(subRow);
4931
+ // onlyGroupedRowsById[subRow.id] = subRow;
4932
+ // } else {
4933
+ // nonGroupedFlatRows.push(subRow);
4934
+ // nonGroupedRowsById[subRow.id] = subRow;
4935
+ // }
4936
+ });
4937
+ return row;
4938
+ });
4939
+ return aggregatedGroupedRows;
4940
+ };
4941
+
4942
+ var groupedRows = groupUpRecursively(rowModel.rows, 0, '');
4943
+ groupedRows.forEach(function (subRow) {
4586
4944
  groupedFlatRows.push(subRow);
4587
4945
  groupedRowsById[subRow.id] = subRow; // if (subRow.getIsGrouped?.()) {
4588
4946
  // onlyGroupedFlatRows.push(subRow);
@@ -4592,26 +4950,24 @@ function groupRowsFn(instance, sortedRowModel) {
4592
4950
  // nonGroupedRowsById[subRow.id] = subRow;
4593
4951
  // }
4594
4952
  });
4595
- return row;
4596
- });
4597
- return aggregatedGroupedRows;
4598
- };
4953
+ return {
4954
+ rows: groupedRows,
4955
+ flatRows: groupedFlatRows,
4956
+ rowsById: groupedRowsById
4957
+ };
4958
+ }, {
4959
+ key: 'getGroupedRowModel',
4960
+ debug: function debug() {
4961
+ var _instance$options$deb;
4599
4962
 
4600
- var groupedRows = groupUpRecursively(sortedRowModel.rows, 0, '');
4601
- groupedRows.forEach(function (subRow) {
4602
- groupedFlatRows.push(subRow);
4603
- groupedRowsById[subRow.id] = subRow; // if (subRow.getIsGrouped?.()) {
4604
- // onlyGroupedFlatRows.push(subRow);
4605
- // onlyGroupedRowsById[subRow.id] = subRow;
4606
- // } else {
4607
- // nonGroupedFlatRows.push(subRow);
4608
- // nonGroupedRowsById[subRow.id] = subRow;
4609
- // }
4610
- });
4611
- return {
4612
- rows: groupedRows,
4613
- flatRows: groupedFlatRows,
4614
- rowsById: groupedRowsById
4963
+ return (_instance$options$deb = instance.options.debugAll) != null ? _instance$options$deb : instance.options.debugTable;
4964
+ },
4965
+ onChange: function onChange() {
4966
+ instance.queue(function () {
4967
+ instance._notifyExpandedReset();
4968
+ });
4969
+ }
4970
+ });
4615
4971
  };
4616
4972
  }
4617
4973
 
@@ -4631,7 +4987,28 @@ function groupBy(rows, columnId) {
4631
4987
  }, groupMap);
4632
4988
  }
4633
4989
 
4634
- function expandRowsFn(instance, sortedRowModel) {
4990
+ function getExpandedRowModel() {
4991
+ return function (instance) {
4992
+ return memo(function () {
4993
+ return [instance.getState().expanded, instance.getGroupedRowModel(), instance.options.paginateExpandedRows];
4994
+ }, function (expanded, rowModel, paginateExpandedRows) {
4995
+ if (!rowModel.rows.length || // Do not expand if rows are not included in pagination
4996
+ !paginateExpandedRows || expanded !== true && !Object.keys(expanded != null ? expanded : {}).length) {
4997
+ return rowModel;
4998
+ }
4999
+
5000
+ return expandRows(rowModel, instance);
5001
+ }, {
5002
+ key: 'getExpandedRowModel',
5003
+ debug: function debug() {
5004
+ var _instance$options$deb;
5005
+
5006
+ return (_instance$options$deb = instance.options.debugAll) != null ? _instance$options$deb : instance.options.debugTable;
5007
+ }
5008
+ });
5009
+ };
5010
+ }
5011
+ function expandRows(rowModel, instance) {
4635
5012
  var expandedRows = [];
4636
5013
 
4637
5014
  var handleRow = function handleRow(row) {
@@ -4644,39 +5021,55 @@ function expandRowsFn(instance, sortedRowModel) {
4644
5021
  }
4645
5022
  };
4646
5023
 
4647
- sortedRowModel.rows.forEach(handleRow);
5024
+ rowModel.rows.forEach(handleRow);
4648
5025
  return {
4649
5026
  rows: expandedRows,
4650
- flatRows: sortedRowModel.flatRows,
4651
- rowsById: sortedRowModel.rowsById
5027
+ flatRows: rowModel.flatRows,
5028
+ rowsById: rowModel.rowsById
4652
5029
  };
4653
5030
  }
4654
5031
 
4655
- function paginateRowsFn(instance, rowModel) {
4656
- var _instance$getState$pa = instance.getState().pagination,
4657
- pageSize = _instance$getState$pa.pageSize,
4658
- pageIndex = _instance$getState$pa.pageIndex;
4659
- var rows = rowModel.rows,
4660
- flatRows = rowModel.flatRows,
4661
- rowsById = rowModel.rowsById;
4662
- var pageStart = pageSize * pageIndex;
4663
- var pageEnd = pageStart + pageSize;
4664
- rows = rows.slice(pageStart, pageEnd);
4665
-
4666
- if (!instance.options.paginateExpandedRows) {
4667
- return expandRowsFn(instance, {
4668
- rows: rows,
4669
- flatRows: flatRows,
4670
- rowsById: rowsById
4671
- });
4672
- }
5032
+ function getPaginationRowModel(opts) {
5033
+ return function (instance) {
5034
+ return memo(function () {
5035
+ return [instance.getState().pagination, instance.getExpandedRowModel()];
5036
+ }, function (pagination, rowModel) {
5037
+ if (!rowModel.rows.length) {
5038
+ return rowModel;
5039
+ }
4673
5040
 
4674
- return {
4675
- rows: rows,
4676
- flatRows: flatRows,
4677
- rowsById: rowsById
5041
+ var pageSize = pagination.pageSize,
5042
+ pageIndex = pagination.pageIndex;
5043
+ var rows = rowModel.rows,
5044
+ flatRows = rowModel.flatRows,
5045
+ rowsById = rowModel.rowsById;
5046
+ var pageStart = pageSize * pageIndex;
5047
+ var pageEnd = pageStart + pageSize;
5048
+ rows = rows.slice(pageStart, pageEnd);
5049
+
5050
+ if (!instance.options.paginateExpandedRows) {
5051
+ return expandRows({
5052
+ rows: rows,
5053
+ flatRows: flatRows,
5054
+ rowsById: rowsById
5055
+ }, instance);
5056
+ }
5057
+
5058
+ return {
5059
+ rows: rows,
5060
+ flatRows: flatRows,
5061
+ rowsById: rowsById
5062
+ };
5063
+ }, {
5064
+ key: 'getPaginationRowModel',
5065
+ debug: function debug() {
5066
+ var _instance$options$deb;
5067
+
5068
+ return (_instance$options$deb = instance.options.debugAll) != null ? _instance$options$deb : instance.options.debugTable;
5069
+ }
5070
+ });
4678
5071
  };
4679
5072
  }
4680
5073
 
4681
- export { ColumnSizing, Expanding, Filters, Grouping, Headers, Ordering, Pagination, Pinning, RowSelection, Sorting, Visibility, buildHeaderGroups, columnFilterRowsFn, createTableInstance, defaultColumnSizing, expandRowsFn, flattenBy, functionalUpdate, globalFilterRowsFn, groupRowsFn, init, isFunction, isRowSelected, makeStateUpdater, memo, noop, paginateRowsFn, passiveEventSupported, propGetter, selectRowsFn, shouldAutoRemoveFilter, sortRowsFn };
5074
+ export { ColumnSizing, Expanding, Filters, Grouping, Headers, Ordering, Pagination, Pinning, RowSelection, Sorting, Visibility, buildHeaderGroups, createTableInstance, defaultColumnSizing, expandRows, flattenBy, functionalUpdate, getBatchGroups, getColumnFilteredRowModelSync, getCoreRowModelAsync, getCoreRowModelSync, getExpandedRowModel, getGlobalFilteredRowModelSync, getGroupedRowModelSync, getPaginationRowModel, getSortedRowModelSync, incrementalMemo, init, isFunction, isRowSelected, makeStateUpdater, memo, noop, passiveEventSupported, propGetter, selectRowsFn, shouldAutoRemoveFilter };
4682
5075
  //# sourceMappingURL=index.js.map