@tanstack/table-core 8.0.0-alpha.22 → 8.0.0-alpha.23

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 (48) 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.map +1 -1
  10. package/build/cjs/features/RowSelection.js +3 -3
  11. package/build/cjs/features/RowSelection.js.map +1 -1
  12. package/build/cjs/utils/columnFilterRowsFn.js +20 -78
  13. package/build/cjs/utils/columnFilterRowsFn.js.map +1 -1
  14. package/build/cjs/utils/filterRowsUtils.js +100 -0
  15. package/build/cjs/utils/filterRowsUtils.js.map +1 -0
  16. package/build/cjs/utils/globalFilterRowsFn.js +10 -62
  17. package/build/cjs/utils/globalFilterRowsFn.js.map +1 -1
  18. package/build/cjs/utils/groupRowsFn.js +15 -15
  19. package/build/cjs/utils/groupRowsFn.js.map +1 -1
  20. package/build/cjs/utils/sortRowsFn.js +1 -1
  21. package/build/cjs/utils/sortRowsFn.js.map +1 -1
  22. package/build/esm/index.js +156 -192
  23. package/build/esm/index.js.map +1 -1
  24. package/build/stats-html.html +1 -1
  25. package/build/stats-react.json +301 -268
  26. package/build/types/aggregationTypes.d.ts +9 -9
  27. package/build/types/core.d.ts +1 -1
  28. package/build/types/features/Filters.d.ts +1 -1
  29. package/build/types/features/Grouping.d.ts +1 -1
  30. package/build/types/utils/filterRowsUtils.d.ts +3 -0
  31. package/build/types/utils/sortRowsQuicksortFn.d.ts +11 -0
  32. package/build/umd/index.development.js +156 -192
  33. package/build/umd/index.development.js.map +1 -1
  34. package/build/umd/index.production.js +1 -1
  35. package/build/umd/index.production.js.map +1 -1
  36. package/package.json +1 -1
  37. package/src/aggregationTypes.ts +23 -19
  38. package/src/core.tsx +3 -5
  39. package/src/features/Expanding.ts +2 -10
  40. package/src/features/Filters.ts +2 -2
  41. package/src/features/Grouping.ts +2 -2
  42. package/src/features/RowSelection.ts +1 -3
  43. package/src/utils/columnFilterRowsFn.ts +12 -73
  44. package/src/utils/filterRowsUtils.ts +107 -0
  45. package/src/utils/globalFilterRowsFn.ts +10 -66
  46. package/src/utils/groupRowsFn.ts +14 -16
  47. package/src/utils/sortRowsFn.ts +6 -8
  48. 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
  //
@@ -1983,7 +1985,7 @@ var Filters = {
1983
1985
  onColumnFiltersChange: makeStateUpdater('columnFilters', instance),
1984
1986
  onGlobalFilterChange: makeStateUpdater('globalFilter', instance),
1985
1987
  autoResetColumnFilters: true,
1986
- filterFromChildrenUp: true,
1988
+ filterFromLeafRows: true,
1987
1989
  autoResetGlobalFilter: true,
1988
1990
  globalFilterType: 'auto',
1989
1991
  getColumnCanGlobalFilterFn: function getColumnCanGlobalFilterFn(column) {
@@ -2970,14 +2972,7 @@ var Expanding = {
2970
2972
  return row.subRows && !!row.subRows.length;
2971
2973
  },
2972
2974
  getToggleExpandedProps: function getToggleExpandedProps(userProps) {
2973
- var initialProps = {
2974
- title: 'Toggle Row Expanded',
2975
- onClick: function onClick(e) {
2976
- e.stopPropagation();
2977
- instance.toggleRowExpanded(row.id);
2978
- }
2979
- };
2980
- return propGetter(initialProps, userProps);
2975
+ return instance.getToggleExpandedProps(row.id, userProps);
2981
2976
  }
2982
2977
  };
2983
2978
  }
@@ -3204,10 +3199,10 @@ var RowSelection = {
3204
3199
  },
3205
3200
  toggleAllRowsSelected: function toggleAllRowsSelected(value) {
3206
3201
  instance.setRowSelection(function (old) {
3207
- value = typeof value !== 'undefined' ? value : !instance.getIsAllRowsSelected(); // Only remove/add the rows that are visible on the screen
3208
- // Leave all the other rows that are selected alone.
3202
+ value = typeof value !== 'undefined' ? value : !instance.getIsAllRowsSelected();
3203
+
3204
+ var rowSelection = _extends({}, old);
3209
3205
 
3210
- var rowSelection = Object.assign({}, old);
3211
3206
  var preGroupedFlatRows = instance.getPreGroupedRowModel().flatRows; // We don't use `mutateRowIsSelected` here for performance reasons.
3212
3207
  // All of the rows are flat already, so it wouldn't be worth it
3213
3208
 
@@ -3951,7 +3946,11 @@ function createTableInstance(options) {
3951
3946
  depth: depth,
3952
3947
  values: values,
3953
3948
  subRows: [],
3954
- leafRows: [],
3949
+ getLeafRows: function getLeafRows() {
3950
+ return flattenBy(row.subRows, function (d) {
3951
+ return d.subRows;
3952
+ });
3953
+ },
3955
3954
  getRowProps: function getRowProps(userProps) {
3956
3955
  return instance.getRowProps(row.id, userProps);
3957
3956
  },
@@ -4045,13 +4044,9 @@ function createTableInstance(options) {
4045
4044
 
4046
4045
  for (var _i = 0; _i < row.originalSubRows.length; _i++) {
4047
4046
  accessRow(row.originalSubRows[_i], _i, depth + 1, subRows, row);
4048
- } // Keep the new subRows array on the row
4049
-
4047
+ }
4050
4048
 
4051
4049
  row.subRows = subRows;
4052
- row.leafRows = flattenBy(subRows, function (d) {
4053
- return d.leafRows;
4054
- });
4055
4050
  }
4056
4051
  }
4057
4052
  };
@@ -4073,9 +4068,9 @@ function createTableInstance(options) {
4073
4068
  return (_instance$options$deb10 = instance.options.debugAll) != null ? _instance$options$deb10 : instance.options.debugTable;
4074
4069
  },
4075
4070
  onChange: function onChange() {
4076
- instance._notifyRowSelectionReset();
4077
-
4078
4071
  instance._notifyFiltersReset();
4072
+
4073
+ instance._notifyRowSelectionReset();
4079
4074
  }
4080
4075
  }),
4081
4076
  // The final calls start at the bottom of the model,
@@ -4243,126 +4238,147 @@ function _createTable(_, __, __options) {
4243
4238
  };
4244
4239
  }
4245
4240
 
4246
- function columnFilterRowsFn(instance, rowModel) {
4247
- var columnFilters = instance.getState().columnFilters;
4241
+ function filterRowModelFromLeafs(rowsToFilter, filterRows, instance) {
4248
4242
  var newFilteredFlatRows = [];
4249
4243
  var newFilteredRowsById = {};
4250
- var filterFromChildrenUp = instance.options.filterFromChildrenUp;
4251
4244
 
4252
- var filterRows = function filterRows(rowsToFilter, depth) {
4253
- columnFilters.forEach(function (_ref) {
4254
- var columnId = _ref.id,
4255
- filterValue = _ref.value;
4256
- // Find the columnFilters column
4257
- var column = instance.getColumn(columnId);
4245
+ var recurseFilterRows = function recurseFilterRows(rowsToFilter, depth) {
4246
+ if (depth === void 0) {
4247
+ depth = 0;
4248
+ }
4258
4249
 
4259
- if (!column) {
4260
- if (process.env.NODE_ENV !== 'production') {
4261
- console.warn("Table: Could not find a column with id: " + columnId);
4262
- }
4250
+ rowsToFilter = rowsToFilter.slice(); // Filter from children up first
4263
4251
 
4264
- throw new Error();
4265
- }
4252
+ for (var i = 0; i < rowsToFilter.length; i++) {
4253
+ var _row$subRows;
4266
4254
 
4267
- if (depth === 0) {
4268
- var preFilteredRows = [].concat(rowsToFilter);
4255
+ var row = rowsToFilter[i];
4269
4256
 
4270
- column.getPreFilteredRows = function () {
4271
- return preFilteredRows;
4272
- };
4257
+ if (!((_row$subRows = row.subRows) != null && _row$subRows.length)) {
4258
+ continue;
4273
4259
  }
4274
4260
 
4275
- var filterFn = instance.getColumnFilterFn(column.id);
4276
-
4277
- if (!filterFn) {
4278
- if (process.env.NODE_ENV !== 'production') {
4279
- console.warn("Could not find a valid 'column.filterType' for column with the ID: " + column.id + ".");
4280
- }
4261
+ rowsToFilter[i] = instance.createRow(row.id, row.original, row.index, row.depth, row.values);
4262
+ rowsToFilter[i].subRows = recurseFilterRows(row.subRows, depth + 1);
4281
4263
 
4282
- return;
4283
- } // Pass the rows, id, filterValue and column to the filterFn
4284
- // to get the filtered rows back
4264
+ if (!rowsToFilter[i].subRows.length) {
4265
+ rowsToFilter.splice(i, 1);
4266
+ i--;
4267
+ }
4268
+ }
4285
4269
 
4270
+ rowsToFilter = filterRows(rowsToFilter, depth); // Apply the filter to any subRows
4286
4271
 
4287
- rowsToFilter = filterFn(rowsToFilter, [columnId], filterValue);
4272
+ rowsToFilter.forEach(function (row) {
4273
+ newFilteredFlatRows.push(row);
4274
+ newFilteredRowsById[row.id] = row;
4288
4275
  });
4289
4276
  return rowsToFilter;
4290
4277
  };
4291
4278
 
4292
- if (filterFromChildrenUp) {
4293
- var _recurseFilterRows = function _recurseFilterRows(rowsToFilter, depth) {
4294
- if (depth === void 0) {
4295
- depth = 0;
4296
- }
4297
-
4298
- // Filter from children up
4299
- rowsToFilter = rowsToFilter.filter(function (row) {
4300
- var _row$subRows;
4301
-
4302
- if (!((_row$subRows = row.subRows) != null && _row$subRows.length)) {
4303
- return true;
4304
- }
4305
-
4306
- row.subRows = _recurseFilterRows(row.subRows, depth + 1);
4307
- return row.subRows.length;
4308
- });
4309
- rowsToFilter = filterRows(rowsToFilter, depth); // Apply the filter to any subRows
4310
-
4311
- rowsToFilter.forEach(function (row) {
4312
- newFilteredFlatRows.push(row);
4313
- newFilteredRowsById[row.id] = row;
4314
- });
4315
- return rowsToFilter;
4316
- };
4317
-
4318
- return {
4319
- rows: _recurseFilterRows(rowModel.rows),
4320
- flatRows: newFilteredFlatRows,
4321
- rowsById: newFilteredRowsById
4322
- };
4323
- } // Filters top level and nested rows
4324
-
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
4325
4288
 
4326
4289
  var recurseFilterRows = function recurseFilterRows(rowsToFilter, depth) {
4327
4290
  if (depth === void 0) {
4328
4291
  depth = 0;
4329
4292
  }
4330
4293
 
4331
- // Filter from parents downward
4294
+ // Filter from parents downward first
4332
4295
  rowsToFilter = filterRows(rowsToFilter, depth); // Apply the filter to any subRows
4333
- // We technically could do this recursively in the above loop,
4334
- // but that would severely hinder the API for the user, since they
4335
- // would be required to do that recursion in some scenarios
4336
4296
 
4337
- rowsToFilter.forEach(function (row) {
4297
+ for (var i = 0; i < rowsToFilter.length; i++) {
4298
+ var _row$subRows2;
4299
+
4300
+ var row = rowsToFilter[i];
4338
4301
  newFilteredFlatRows.push(row);
4339
4302
  newFilteredRowsById[row.id] = row;
4340
4303
 
4341
- if (!filterFromChildrenUp) {
4342
- var _row$subRows2;
4304
+ if (!((_row$subRows2 = row.subRows) != null && _row$subRows2.length)) {
4305
+ rowsToFilter.splice(i, 1);
4306
+ i--;
4307
+ continue;
4308
+ }
4343
4309
 
4344
- if (!((_row$subRows2 = row.subRows) != null && _row$subRows2.length)) {
4345
- return;
4346
- }
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
+ }
4347
4313
 
4348
- row.subRows = recurseFilterRows(row.subRows, depth + 1);
4349
- }
4350
- });
4351
4314
  return rowsToFilter;
4352
4315
  };
4353
4316
 
4354
4317
  return {
4355
- rows: recurseFilterRows(rowModel.rows),
4318
+ rows: recurseFilterRows(rowsToFilter),
4356
4319
  flatRows: newFilteredFlatRows,
4357
4320
  rowsById: newFilteredRowsById
4358
4321
  };
4359
4322
  }
4360
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
+
4361
4379
  function globalFilterRowsFn(instance, rowModel) {
4362
4380
  var globalFilter = instance.getState().globalFilter;
4363
- var newFilteredFlatRows = [];
4364
- var newFilteredRowsById = {};
4365
- var filterFromChildrenUp = instance.options.filterFromChildrenUp;
4381
+ var filterFromLeafRows = instance.options.filterFromLeafRows;
4366
4382
  var filterFn = instance.getGlobalFilterFn();
4367
4383
 
4368
4384
  if (!filterFn) {
@@ -4380,67 +4396,15 @@ function globalFilterRowsFn(instance, rowModel) {
4380
4396
  return d.id;
4381
4397
  });
4382
4398
 
4383
- if (filterFromChildrenUp) {
4384
- var _recurseFilterRows = function _recurseFilterRows(rowsToFilter, depth) {
4385
-
4386
- // Filter from children up
4387
- rowsToFilter = rowsToFilter.filter(function (row) {
4388
- var _row$subRows;
4389
-
4390
- if (!((_row$subRows = row.subRows) != null && _row$subRows.length)) {
4391
- return true;
4392
- }
4393
-
4394
- row.subRows = _recurseFilterRows(row.subRows);
4395
- return row.subRows.length;
4396
- });
4397
- rowsToFilter = filterFn(rowsToFilter, filterableColumnIds, globalFilter); // Apply the filter to any subRows
4398
-
4399
- rowsToFilter.forEach(function (row) {
4400
- newFilteredFlatRows.push(row);
4401
- newFilteredRowsById[row.id] = row;
4402
- });
4403
- return rowsToFilter;
4404
- };
4405
-
4406
- return {
4407
- rows: _recurseFilterRows(rowModel.rows),
4408
- flatRows: newFilteredFlatRows,
4409
- rowsById: newFilteredRowsById
4410
- };
4411
- } // Filters top level and nested rows
4412
-
4413
-
4414
- var recurseFilterRows = function recurseFilterRows(rowsToFilter, depth) {
4415
-
4416
- // Filter from parents downward
4417
- rowsToFilter = filterFn(rowsToFilter, filterableColumnIds, globalFilter); // Apply the filter to any subRows
4418
- // We technically could do this recursively in the above loop,
4419
- // but that would severely hinder the API for the user, since they
4420
- // would be required to do that recursion in some scenarios
4421
-
4422
- rowsToFilter.forEach(function (row) {
4423
- newFilteredFlatRows.push(row);
4424
- newFilteredRowsById[row.id] = row;
4425
-
4426
- if (!filterFromChildrenUp) {
4427
- var _row$subRows2;
4428
-
4429
- if (!((_row$subRows2 = row.subRows) != null && _row$subRows2.length)) {
4430
- return;
4431
- }
4432
-
4433
- row.subRows = recurseFilterRows(row.subRows);
4434
- }
4435
- });
4436
- return rowsToFilter;
4399
+ var filterRows = function filterRows(rows) {
4400
+ return filterFn(rows, filterableColumnIds, globalFilter);
4437
4401
  };
4438
4402
 
4439
- return {
4440
- rows: recurseFilterRows(rowModel.rows),
4441
- flatRows: newFilteredFlatRows,
4442
- rowsById: newFilteredRowsById
4443
- };
4403
+ if (filterFromLeafRows) {
4404
+ filterRowModelFromLeafs(rowModel.rows, filterRows, instance);
4405
+ }
4406
+
4407
+ return filterRowModelFromRoot(rowModel.rows, filterRows, instance);
4444
4408
  }
4445
4409
 
4446
4410
  function sortRowsFn(instance, rowModel) {
@@ -4479,7 +4443,7 @@ function sortRowsFn(instance, rowModel) {
4479
4443
  var bUndefined = typeof bValue === 'undefined';
4480
4444
 
4481
4445
  if (aUndefined || bUndefined) {
4482
- return aUndefined && bUndefined ? 0 : aUndefined ? 1 : -1;
4446
+ return aUndefined && bUndefined ? 0 : aUndefined ? columnInfo.sortUndefined : -columnInfo.sortUndefined;
4483
4447
  }
4484
4448
  } // This function should always return in ascending order
4485
4449
 
@@ -4542,21 +4506,21 @@ function groupRowsFn(instance, sortedRowModel) {
4542
4506
  var aggregateFn = instance.getColumnAggregationFn(column.id);
4543
4507
 
4544
4508
  if (aggregateFn) {
4545
- // Get the columnValues to aggregate
4546
- var groupedValues = groupedRows.map(function (row) {
4547
- return row.values[column.id];
4548
- }); // Get the columnValues to aggregate
4549
-
4550
- var leafValues = leafRows.map(function (row) {
4551
- 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];
4552
4512
 
4553
- if (!depth && column.aggregateValue) {
4554
- columnValue = column.aggregateValue(columnValue);
4555
- }
4513
+ if (!depth && column.aggregateValue) {
4514
+ columnValue = column.aggregateValue(columnValue);
4515
+ }
4556
4516
 
4557
- return columnValue;
4517
+ return columnValue;
4518
+ });
4519
+ }, function () {
4520
+ return groupedRows.map(function (row) {
4521
+ return row.values[column.id];
4522
+ });
4558
4523
  });
4559
- values[column.id] = aggregateFn(leafValues, groupedValues);
4560
4524
  } else if (column.aggregationType) {
4561
4525
  console.info({
4562
4526
  column: column
@@ -4599,7 +4563,7 @@ function groupRowsFn(instance, sortedRowModel) {
4599
4563
  var subRows = groupUpRecursively(groupedRows, depth + 1, id); // Flatten the leaf rows of the rows in this group
4600
4564
 
4601
4565
  var leafRows = depth ? flattenBy(groupedRows, function (row) {
4602
- return row.leafRows;
4566
+ return row.subRows;
4603
4567
  }) : groupedRows;
4604
4568
  var values = aggregateRowsToValues(leafRows, groupedRows, depth);
4605
4569
  var row = instance.createRow(id, undefined, index, depth, values);