@tanstack/table-core 8.0.0-alpha.21 → 8.0.0-alpha.24

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 (53) hide show
  1. package/build/cjs/aggregationTypes.js +21 -19
  2. package/build/cjs/aggregationTypes.js.map +1 -1
  3. package/build/cjs/core.js +8 -8
  4. package/build/cjs/core.js.map +1 -1
  5. package/build/cjs/features/Expanding.js +1 -8
  6. package/build/cjs/features/Expanding.js.map +1 -1
  7. package/build/cjs/features/Filters.js +1 -1
  8. package/build/cjs/features/Filters.js.map +1 -1
  9. package/build/cjs/features/Grouping.js +1 -1
  10. package/build/cjs/features/Grouping.js.map +1 -1
  11. package/build/cjs/features/Pinning.js +6 -0
  12. package/build/cjs/features/Pinning.js.map +1 -1
  13. package/build/cjs/features/RowSelection.js +3 -3
  14. package/build/cjs/features/RowSelection.js.map +1 -1
  15. package/build/cjs/utils/columnFilterRowsFn.js +20 -78
  16. package/build/cjs/utils/columnFilterRowsFn.js.map +1 -1
  17. package/build/cjs/utils/filterRowsUtils.js +100 -0
  18. package/build/cjs/utils/filterRowsUtils.js.map +1 -0
  19. package/build/cjs/utils/globalFilterRowsFn.js +10 -62
  20. package/build/cjs/utils/globalFilterRowsFn.js.map +1 -1
  21. package/build/cjs/utils/groupRowsFn.js +15 -15
  22. package/build/cjs/utils/groupRowsFn.js.map +1 -1
  23. package/build/cjs/utils/sortRowsFn.js +1 -1
  24. package/build/cjs/utils/sortRowsFn.js.map +1 -1
  25. package/build/esm/index.js +163 -193
  26. package/build/esm/index.js.map +1 -1
  27. package/build/stats-html.html +1 -1
  28. package/build/stats-react.json +305 -272
  29. package/build/types/aggregationTypes.d.ts +9 -9
  30. package/build/types/core.d.ts +1 -1
  31. package/build/types/features/Filters.d.ts +1 -1
  32. package/build/types/features/Grouping.d.ts +1 -1
  33. package/build/types/features/Pinning.d.ts +1 -0
  34. package/build/types/utils/filterRowsUtils.d.ts +3 -0
  35. package/build/types/utils/sortRowsQuicksortFn.d.ts +11 -0
  36. package/build/umd/index.development.js +163 -193
  37. package/build/umd/index.development.js.map +1 -1
  38. package/build/umd/index.production.js +1 -1
  39. package/build/umd/index.production.js.map +1 -1
  40. package/package.json +1 -1
  41. package/src/aggregationTypes.ts +23 -19
  42. package/src/core.tsx +3 -5
  43. package/src/features/Expanding.ts +2 -10
  44. package/src/features/Filters.ts +2 -2
  45. package/src/features/Grouping.ts +3 -4
  46. package/src/features/Pinning.ts +7 -0
  47. package/src/features/RowSelection.ts +1 -3
  48. package/src/utils/columnFilterRowsFn.ts +12 -73
  49. package/src/utils/filterRowsUtils.ts +107 -0
  50. package/src/utils/globalFilterRowsFn.ts +10 -66
  51. package/src/utils/groupRowsFn.ts +14 -16
  52. package/src/utils/sortRowsFn.ts +6 -8
  53. package/src/utils/sortRowsQuicksortFn.ts +174 -0
@@ -382,18 +382,18 @@ var aggregationTypes = {
382
382
  count: count
383
383
  };
384
384
 
385
- function sum(_leafValues, childValues) {
385
+ function sum(_getLeafValues, getChildValues) {
386
386
  // It's faster to just add the aggregations together instead of
387
387
  // process leaf nodes individually
388
- return childValues.reduce(function (sum, next) {
388
+ return getChildValues().reduce(function (sum, next) {
389
389
  return sum + (typeof next === 'number' ? next : 0);
390
390
  }, 0);
391
391
  }
392
392
 
393
- function min(_leafValues, childValues) {
393
+ function min(_getLeafValues, getChildValues) {
394
394
  var min;
395
395
 
396
- for (var _iterator = _createForOfIteratorHelperLoose(childValues), _step; !(_step = _iterator()).done;) {
396
+ for (var _iterator = _createForOfIteratorHelperLoose(getChildValues()), _step; !(_step = _iterator()).done;) {
397
397
  var value = _step.value;
398
398
 
399
399
  if (value != null && (min > value || min === undefined && value >= value)) {
@@ -404,10 +404,10 @@ function min(_leafValues, childValues) {
404
404
  return min;
405
405
  }
406
406
 
407
- function max(_leafValues, childValues) {
407
+ function max(_getLeafValues, getChildValues) {
408
408
  var max;
409
409
 
410
- for (var _iterator2 = _createForOfIteratorHelperLoose(childValues), _step2; !(_step2 = _iterator2()).done;) {
410
+ for (var _iterator2 = _createForOfIteratorHelperLoose(getChildValues()), _step2; !(_step2 = _iterator2()).done;) {
411
411
  var value = _step2.value;
412
412
 
413
413
  if (value != null && (max < value || max === undefined && value >= value)) {
@@ -418,11 +418,11 @@ function max(_leafValues, childValues) {
418
418
  return max;
419
419
  }
420
420
 
421
- function extent(_leafValues, childValues) {
421
+ function extent(_getLeafValues, getChildValues) {
422
422
  var min;
423
423
  var max;
424
424
 
425
- for (var _iterator3 = _createForOfIteratorHelperLoose(childValues), _step3; !(_step3 = _iterator3()).done;) {
425
+ for (var _iterator3 = _createForOfIteratorHelperLoose(getChildValues()), _step3; !(_step3 = _iterator3()).done;) {
426
426
  var value = _step3.value;
427
427
 
428
428
  if (value != null) {
@@ -438,11 +438,11 @@ function extent(_leafValues, childValues) {
438
438
  return [min, max];
439
439
  }
440
440
 
441
- function mean(leafValues) {
441
+ function mean(getLeafValues) {
442
442
  var count = 0;
443
443
  var sum = 0;
444
444
 
445
- for (var _iterator4 = _createForOfIteratorHelperLoose(leafValues), _step4; !(_step4 = _iterator4()).done;) {
445
+ for (var _iterator4 = _createForOfIteratorHelperLoose(getLeafValues()), _step4; !(_step4 = _iterator4()).done;) {
446
446
  var value = _step4.value;
447
447
 
448
448
  if (value != null && (value = +value) >= value) {
@@ -454,14 +454,16 @@ function mean(leafValues) {
454
454
  return;
455
455
  }
456
456
 
457
- function median(values) {
458
- if (!values.length) {
457
+ function median(getLeafValues) {
458
+ var leafValues = getLeafValues();
459
+
460
+ if (!leafValues.length) {
459
461
  return;
460
462
  }
461
463
 
462
464
  var min = 0;
463
465
  var max = 0;
464
- values.forEach(function (value) {
466
+ leafValues.forEach(function (value) {
465
467
  if (typeof value === 'number') {
466
468
  min = Math.min(min, value);
467
469
  max = Math.max(max, value);
@@ -470,16 +472,16 @@ function median(values) {
470
472
  return (min + max) / 2;
471
473
  }
472
474
 
473
- function unique(values) {
474
- return Array.from(new Set(values).values());
475
+ function unique(getLeafValues) {
476
+ return Array.from(new Set(getLeafValues()).values());
475
477
  }
476
478
 
477
- function uniqueCount(values) {
478
- return new Set(values).size;
479
+ function uniqueCount(getLeafValues) {
480
+ return new Set(getLeafValues()).size;
479
481
  }
480
482
 
481
- function count(values) {
482
- return values.length;
483
+ function count(getLeafValues) {
484
+ return getLeafValues().length;
483
485
  }
484
486
 
485
487
  //
@@ -562,7 +564,7 @@ var Grouping = {
562
564
  throw new Error();
563
565
  }
564
566
 
565
- return isFunction(column.aggregationType) ? column.aggregationType : column.aggregationType === 'auto' ? instance.getColumnAutoFilterFn(columnId) : (_ref = userAggregationTypes == null ? void 0 : userAggregationTypes[column.aggregationType]) != null ? _ref : aggregationTypes[column.aggregationType];
567
+ return isFunction(column.aggregationType) ? column.aggregationType : column.aggregationType === 'auto' ? instance.getColumnAutoAggregationFn(columnId) : (_ref = userAggregationTypes == null ? void 0 : userAggregationTypes[column.aggregationType]) != null ? _ref : aggregationTypes[column.aggregationType];
566
568
  },
567
569
  setGrouping: function setGrouping(updater) {
568
570
  return instance.options.onGroupingChange == null ? void 0 : instance.options.onGroupingChange(updater, functionalUpdate(updater, instance.getState().grouping));
@@ -893,6 +895,12 @@ var Pinning = {
893
895
 
894
896
  var position = instance.getColumnIsPinned(columnId);
895
897
  return position ? (_instance$getState$co2 = (_instance$getState$co3 = instance.getState().columnPinning) == null ? void 0 : (_instance$getState$co4 = _instance$getState$co3[position]) == null ? void 0 : _instance$getState$co4.indexOf(columnId)) != null ? _instance$getState$co2 : -1 : 0;
898
+ },
899
+ getIsSomeColumnsPinned: function getIsSomeColumnsPinned() {
900
+ var _instance$getState$co5 = instance.getState().columnPinning,
901
+ left = _instance$getState$co5.left,
902
+ right = _instance$getState$co5.right;
903
+ return Boolean((left == null ? void 0 : left.length) || (right == null ? void 0 : right.length));
896
904
  }
897
905
  };
898
906
  }
@@ -1977,7 +1985,7 @@ var Filters = {
1977
1985
  onColumnFiltersChange: makeStateUpdater('columnFilters', instance),
1978
1986
  onGlobalFilterChange: makeStateUpdater('globalFilter', instance),
1979
1987
  autoResetColumnFilters: true,
1980
- filterFromChildrenUp: true,
1988
+ filterFromLeafRows: true,
1981
1989
  autoResetGlobalFilter: true,
1982
1990
  globalFilterType: 'auto',
1983
1991
  getColumnCanGlobalFilterFn: function getColumnCanGlobalFilterFn(column) {
@@ -2964,14 +2972,7 @@ var Expanding = {
2964
2972
  return row.subRows && !!row.subRows.length;
2965
2973
  },
2966
2974
  getToggleExpandedProps: function getToggleExpandedProps(userProps) {
2967
- var initialProps = {
2968
- title: 'Toggle Row Expanded',
2969
- onClick: function onClick(e) {
2970
- e.stopPropagation();
2971
- instance.toggleRowExpanded(row.id);
2972
- }
2973
- };
2974
- return propGetter(initialProps, userProps);
2975
+ return instance.getToggleExpandedProps(row.id, userProps);
2975
2976
  }
2976
2977
  };
2977
2978
  }
@@ -3198,10 +3199,10 @@ var RowSelection = {
3198
3199
  },
3199
3200
  toggleAllRowsSelected: function toggleAllRowsSelected(value) {
3200
3201
  instance.setRowSelection(function (old) {
3201
- value = typeof value !== 'undefined' ? value : !instance.getIsAllRowsSelected(); // Only remove/add the rows that are visible on the screen
3202
- // Leave all the other rows that are selected alone.
3202
+ value = typeof value !== 'undefined' ? value : !instance.getIsAllRowsSelected();
3203
+
3204
+ var rowSelection = _extends({}, old);
3203
3205
 
3204
- var rowSelection = Object.assign({}, old);
3205
3206
  var preGroupedFlatRows = instance.getPreGroupedRowModel().flatRows; // We don't use `mutateRowIsSelected` here for performance reasons.
3206
3207
  // All of the rows are flat already, so it wouldn't be worth it
3207
3208
 
@@ -3945,7 +3946,11 @@ function createTableInstance(options) {
3945
3946
  depth: depth,
3946
3947
  values: values,
3947
3948
  subRows: [],
3948
- leafRows: [],
3949
+ getLeafRows: function getLeafRows() {
3950
+ return flattenBy(row.subRows, function (d) {
3951
+ return d.subRows;
3952
+ });
3953
+ },
3949
3954
  getRowProps: function getRowProps(userProps) {
3950
3955
  return instance.getRowProps(row.id, userProps);
3951
3956
  },
@@ -4039,13 +4044,9 @@ function createTableInstance(options) {
4039
4044
 
4040
4045
  for (var _i = 0; _i < row.originalSubRows.length; _i++) {
4041
4046
  accessRow(row.originalSubRows[_i], _i, depth + 1, subRows, row);
4042
- } // Keep the new subRows array on the row
4043
-
4047
+ }
4044
4048
 
4045
4049
  row.subRows = subRows;
4046
- row.leafRows = flattenBy(subRows, function (d) {
4047
- return d.leafRows;
4048
- });
4049
4050
  }
4050
4051
  }
4051
4052
  };
@@ -4067,9 +4068,9 @@ function createTableInstance(options) {
4067
4068
  return (_instance$options$deb10 = instance.options.debugAll) != null ? _instance$options$deb10 : instance.options.debugTable;
4068
4069
  },
4069
4070
  onChange: function onChange() {
4070
- instance._notifyRowSelectionReset();
4071
-
4072
4071
  instance._notifyFiltersReset();
4072
+
4073
+ instance._notifyRowSelectionReset();
4073
4074
  }
4074
4075
  }),
4075
4076
  // The final calls start at the bottom of the model,
@@ -4237,126 +4238,147 @@ function _createTable(_, __, __options) {
4237
4238
  };
4238
4239
  }
4239
4240
 
4240
- function columnFilterRowsFn(instance, rowModel) {
4241
- var columnFilters = instance.getState().columnFilters;
4241
+ function filterRowModelFromLeafs(rowsToFilter, filterRows, instance) {
4242
4242
  var newFilteredFlatRows = [];
4243
4243
  var newFilteredRowsById = {};
4244
- var filterFromChildrenUp = instance.options.filterFromChildrenUp;
4245
4244
 
4246
- var filterRows = function filterRows(rowsToFilter, depth) {
4247
- columnFilters.forEach(function (_ref) {
4248
- var columnId = _ref.id,
4249
- filterValue = _ref.value;
4250
- // Find the columnFilters column
4251
- var column = instance.getColumn(columnId);
4245
+ var recurseFilterRows = function recurseFilterRows(rowsToFilter, depth) {
4246
+ if (depth === void 0) {
4247
+ depth = 0;
4248
+ }
4252
4249
 
4253
- if (!column) {
4254
- if (process.env.NODE_ENV !== 'production') {
4255
- console.warn("Table: Could not find a column with id: " + columnId);
4256
- }
4250
+ rowsToFilter = rowsToFilter.slice(); // Filter from children up first
4257
4251
 
4258
- throw new Error();
4259
- }
4252
+ for (var i = 0; i < rowsToFilter.length; i++) {
4253
+ var _row$subRows;
4260
4254
 
4261
- if (depth === 0) {
4262
- var preFilteredRows = [].concat(rowsToFilter);
4255
+ var row = rowsToFilter[i];
4263
4256
 
4264
- column.getPreFilteredRows = function () {
4265
- return preFilteredRows;
4266
- };
4257
+ if (!((_row$subRows = row.subRows) != null && _row$subRows.length)) {
4258
+ continue;
4267
4259
  }
4268
4260
 
4269
- var filterFn = instance.getColumnFilterFn(column.id);
4270
-
4271
- if (!filterFn) {
4272
- if (process.env.NODE_ENV !== 'production') {
4273
- console.warn("Could not find a valid 'column.filterType' for column with the ID: " + column.id + ".");
4274
- }
4261
+ rowsToFilter[i] = instance.createRow(row.id, row.original, row.index, row.depth, row.values);
4262
+ rowsToFilter[i].subRows = recurseFilterRows(row.subRows, depth + 1);
4275
4263
 
4276
- return;
4277
- } // Pass the rows, id, filterValue and column to the filterFn
4278
- // to get the filtered rows back
4264
+ if (!rowsToFilter[i].subRows.length) {
4265
+ rowsToFilter.splice(i, 1);
4266
+ i--;
4267
+ }
4268
+ }
4279
4269
 
4270
+ rowsToFilter = filterRows(rowsToFilter, depth); // Apply the filter to any subRows
4280
4271
 
4281
- rowsToFilter = filterFn(rowsToFilter, [columnId], filterValue);
4272
+ rowsToFilter.forEach(function (row) {
4273
+ newFilteredFlatRows.push(row);
4274
+ newFilteredRowsById[row.id] = row;
4282
4275
  });
4283
4276
  return rowsToFilter;
4284
4277
  };
4285
4278
 
4286
- if (filterFromChildrenUp) {
4287
- var _recurseFilterRows = function _recurseFilterRows(rowsToFilter, depth) {
4288
- if (depth === void 0) {
4289
- depth = 0;
4290
- }
4291
-
4292
- // Filter from children up
4293
- rowsToFilter = rowsToFilter.filter(function (row) {
4294
- var _row$subRows;
4295
-
4296
- if (!((_row$subRows = row.subRows) != null && _row$subRows.length)) {
4297
- return true;
4298
- }
4299
-
4300
- row.subRows = _recurseFilterRows(row.subRows, depth + 1);
4301
- return row.subRows.length;
4302
- });
4303
- rowsToFilter = filterRows(rowsToFilter, depth); // Apply the filter to any subRows
4304
-
4305
- rowsToFilter.forEach(function (row) {
4306
- newFilteredFlatRows.push(row);
4307
- newFilteredRowsById[row.id] = row;
4308
- });
4309
- return rowsToFilter;
4310
- };
4311
-
4312
- return {
4313
- rows: _recurseFilterRows(rowModel.rows),
4314
- flatRows: newFilteredFlatRows,
4315
- rowsById: newFilteredRowsById
4316
- };
4317
- } // Filters top level and nested rows
4318
-
4279
+ return {
4280
+ rows: recurseFilterRows(rowsToFilter),
4281
+ flatRows: newFilteredFlatRows,
4282
+ rowsById: newFilteredRowsById
4283
+ };
4284
+ }
4285
+ function filterRowModelFromRoot(rowsToFilter, filterRows, instance) {
4286
+ var newFilteredFlatRows = [];
4287
+ var newFilteredRowsById = {}; // Filters top level and nested rows
4319
4288
 
4320
4289
  var recurseFilterRows = function recurseFilterRows(rowsToFilter, depth) {
4321
4290
  if (depth === void 0) {
4322
4291
  depth = 0;
4323
4292
  }
4324
4293
 
4325
- // Filter from parents downward
4294
+ // Filter from parents downward first
4326
4295
  rowsToFilter = filterRows(rowsToFilter, depth); // Apply the filter to any subRows
4327
- // We technically could do this recursively in the above loop,
4328
- // but that would severely hinder the API for the user, since they
4329
- // would be required to do that recursion in some scenarios
4330
4296
 
4331
- rowsToFilter.forEach(function (row) {
4297
+ for (var i = 0; i < rowsToFilter.length; i++) {
4298
+ var _row$subRows2;
4299
+
4300
+ var row = rowsToFilter[i];
4332
4301
  newFilteredFlatRows.push(row);
4333
4302
  newFilteredRowsById[row.id] = row;
4334
4303
 
4335
- if (!filterFromChildrenUp) {
4336
- var _row$subRows2;
4304
+ if (!((_row$subRows2 = row.subRows) != null && _row$subRows2.length)) {
4305
+ rowsToFilter.splice(i, 1);
4306
+ i--;
4307
+ continue;
4308
+ }
4337
4309
 
4338
- if (!((_row$subRows2 = row.subRows) != null && _row$subRows2.length)) {
4339
- return;
4340
- }
4310
+ rowsToFilter[i] = instance.createRow(row.id, row.original, row.index, row.depth, row.values);
4311
+ rowsToFilter[i].subRows = recurseFilterRows(row.subRows, depth + 1);
4312
+ }
4341
4313
 
4342
- row.subRows = recurseFilterRows(row.subRows, depth + 1);
4343
- }
4344
- });
4345
4314
  return rowsToFilter;
4346
4315
  };
4347
4316
 
4348
4317
  return {
4349
- rows: recurseFilterRows(rowModel.rows),
4318
+ rows: recurseFilterRows(rowsToFilter),
4350
4319
  flatRows: newFilteredFlatRows,
4351
4320
  rowsById: newFilteredRowsById
4352
4321
  };
4353
4322
  }
4354
4323
 
4324
+ function columnFilterRowsFn(instance, rowModel) {
4325
+ var columnFilters = instance.getState().columnFilters;
4326
+ var filterFromLeafRows = instance.options.filterFromLeafRows;
4327
+
4328
+ var filterRows = function filterRows(rowsToFilter, depth) {
4329
+ for (var i = 0; i < columnFilters.length; i++) {
4330
+ var _columnFilters$i = columnFilters[i],
4331
+ columnId = _columnFilters$i.id,
4332
+ filterValue = _columnFilters$i.value; // Find the columnFilters column
4333
+
4334
+ var column = instance.getColumn(columnId);
4335
+
4336
+ if (!column) {
4337
+ if (process.env.NODE_ENV !== 'production') {
4338
+ console.warn("Table: Could not find a column with id: " + columnId);
4339
+ }
4340
+
4341
+ throw new Error();
4342
+ }
4343
+
4344
+ if (depth === 0) {
4345
+ (function () {
4346
+ var preFilteredRows = [].concat(rowsToFilter);
4347
+
4348
+ column.getPreFilteredRows = function () {
4349
+ return preFilteredRows;
4350
+ };
4351
+ })();
4352
+ }
4353
+
4354
+ var filterFn = instance.getColumnFilterFn(column.id);
4355
+
4356
+ if (!filterFn) {
4357
+ if (process.env.NODE_ENV !== 'production') {
4358
+ console.warn("Could not find a valid 'column.filterType' for column with the ID: " + column.id + ".");
4359
+ }
4360
+
4361
+ continue;
4362
+ } // Pass the rows, id, filterValue and column to the filterFn
4363
+ // to get the filtered rows back
4364
+
4365
+
4366
+ rowsToFilter = filterFn(rowsToFilter, [columnId], filterValue);
4367
+ }
4368
+
4369
+ return rowsToFilter;
4370
+ };
4371
+
4372
+ if (filterFromLeafRows) {
4373
+ return filterRowModelFromLeafs(rowModel.rows, filterRows, instance);
4374
+ }
4375
+
4376
+ return filterRowModelFromRoot(rowModel.rows, filterRows, instance);
4377
+ }
4378
+
4355
4379
  function globalFilterRowsFn(instance, rowModel) {
4356
4380
  var globalFilter = instance.getState().globalFilter;
4357
- var newFilteredFlatRows = [];
4358
- var newFilteredRowsById = {};
4359
- var filterFromChildrenUp = instance.options.filterFromChildrenUp;
4381
+ var filterFromLeafRows = instance.options.filterFromLeafRows;
4360
4382
  var filterFn = instance.getGlobalFilterFn();
4361
4383
 
4362
4384
  if (!filterFn) {
@@ -4374,67 +4396,15 @@ function globalFilterRowsFn(instance, rowModel) {
4374
4396
  return d.id;
4375
4397
  });
4376
4398
 
4377
- if (filterFromChildrenUp) {
4378
- var _recurseFilterRows = function _recurseFilterRows(rowsToFilter, depth) {
4379
-
4380
- // Filter from children up
4381
- rowsToFilter = rowsToFilter.filter(function (row) {
4382
- var _row$subRows;
4383
-
4384
- if (!((_row$subRows = row.subRows) != null && _row$subRows.length)) {
4385
- return true;
4386
- }
4387
-
4388
- row.subRows = _recurseFilterRows(row.subRows);
4389
- return row.subRows.length;
4390
- });
4391
- rowsToFilter = filterFn(rowsToFilter, filterableColumnIds, globalFilter); // Apply the filter to any subRows
4392
-
4393
- rowsToFilter.forEach(function (row) {
4394
- newFilteredFlatRows.push(row);
4395
- newFilteredRowsById[row.id] = row;
4396
- });
4397
- return rowsToFilter;
4398
- };
4399
-
4400
- return {
4401
- rows: _recurseFilterRows(rowModel.rows),
4402
- flatRows: newFilteredFlatRows,
4403
- rowsById: newFilteredRowsById
4404
- };
4405
- } // Filters top level and nested rows
4406
-
4407
-
4408
- var recurseFilterRows = function recurseFilterRows(rowsToFilter, depth) {
4409
-
4410
- // Filter from parents downward
4411
- rowsToFilter = filterFn(rowsToFilter, filterableColumnIds, globalFilter); // Apply the filter to any subRows
4412
- // We technically could do this recursively in the above loop,
4413
- // but that would severely hinder the API for the user, since they
4414
- // would be required to do that recursion in some scenarios
4415
-
4416
- rowsToFilter.forEach(function (row) {
4417
- newFilteredFlatRows.push(row);
4418
- newFilteredRowsById[row.id] = row;
4419
-
4420
- if (!filterFromChildrenUp) {
4421
- var _row$subRows2;
4422
-
4423
- if (!((_row$subRows2 = row.subRows) != null && _row$subRows2.length)) {
4424
- return;
4425
- }
4426
-
4427
- row.subRows = recurseFilterRows(row.subRows);
4428
- }
4429
- });
4430
- return rowsToFilter;
4399
+ var filterRows = function filterRows(rows) {
4400
+ return filterFn(rows, filterableColumnIds, globalFilter);
4431
4401
  };
4432
4402
 
4433
- return {
4434
- rows: recurseFilterRows(rowModel.rows),
4435
- flatRows: newFilteredFlatRows,
4436
- rowsById: newFilteredRowsById
4437
- };
4403
+ if (filterFromLeafRows) {
4404
+ filterRowModelFromLeafs(rowModel.rows, filterRows, instance);
4405
+ }
4406
+
4407
+ return filterRowModelFromRoot(rowModel.rows, filterRows, instance);
4438
4408
  }
4439
4409
 
4440
4410
  function sortRowsFn(instance, rowModel) {
@@ -4473,7 +4443,7 @@ function sortRowsFn(instance, rowModel) {
4473
4443
  var bUndefined = typeof bValue === 'undefined';
4474
4444
 
4475
4445
  if (aUndefined || bUndefined) {
4476
- return aUndefined && bUndefined ? 0 : aUndefined ? 1 : -1;
4446
+ return aUndefined && bUndefined ? 0 : aUndefined ? columnInfo.sortUndefined : -columnInfo.sortUndefined;
4477
4447
  }
4478
4448
  } // This function should always return in ascending order
4479
4449
 
@@ -4536,21 +4506,21 @@ function groupRowsFn(instance, sortedRowModel) {
4536
4506
  var aggregateFn = instance.getColumnAggregationFn(column.id);
4537
4507
 
4538
4508
  if (aggregateFn) {
4539
- // Get the columnValues to aggregate
4540
- var groupedValues = groupedRows.map(function (row) {
4541
- return row.values[column.id];
4542
- }); // Get the columnValues to aggregate
4543
-
4544
- var leafValues = leafRows.map(function (row) {
4545
- var columnValue = row.values[column.id];
4509
+ values[column.id] = aggregateFn(function () {
4510
+ return leafRows.map(function (row) {
4511
+ var columnValue = row.values[column.id];
4546
4512
 
4547
- if (!depth && column.aggregateValue) {
4548
- columnValue = column.aggregateValue(columnValue);
4549
- }
4513
+ if (!depth && column.aggregateValue) {
4514
+ columnValue = column.aggregateValue(columnValue);
4515
+ }
4550
4516
 
4551
- return columnValue;
4517
+ return columnValue;
4518
+ });
4519
+ }, function () {
4520
+ return groupedRows.map(function (row) {
4521
+ return row.values[column.id];
4522
+ });
4552
4523
  });
4553
- values[column.id] = aggregateFn(leafValues, groupedValues);
4554
4524
  } else if (column.aggregationType) {
4555
4525
  console.info({
4556
4526
  column: column
@@ -4593,7 +4563,7 @@ function groupRowsFn(instance, sortedRowModel) {
4593
4563
  var subRows = groupUpRecursively(groupedRows, depth + 1, id); // Flatten the leaf rows of the rows in this group
4594
4564
 
4595
4565
  var leafRows = depth ? flattenBy(groupedRows, function (row) {
4596
- return row.leafRows;
4566
+ return row.subRows;
4597
4567
  }) : groupedRows;
4598
4568
  var values = aggregateRowsToValues(leafRows, groupedRows, depth);
4599
4569
  var row = instance.createRow(id, undefined, index, depth, values);