@tanstack/table-core 8.0.0-alpha.20 → 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 (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 +5 -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/Pinning.js +6 -0
  11. package/build/cjs/features/Pinning.js.map +1 -1
  12. package/build/cjs/features/RowSelection.js +3 -3
  13. package/build/cjs/features/RowSelection.js.map +1 -1
  14. package/build/cjs/utils/columnFilterRowsFn.js +20 -78
  15. package/build/cjs/utils/columnFilterRowsFn.js.map +1 -1
  16. package/build/cjs/utils/filterRowsUtils.js +100 -0
  17. package/build/cjs/utils/filterRowsUtils.js.map +1 -0
  18. package/build/cjs/utils/globalFilterRowsFn.js +10 -62
  19. package/build/cjs/utils/globalFilterRowsFn.js.map +1 -1
  20. package/build/cjs/utils/groupRowsFn.js +15 -15
  21. package/build/cjs/utils/groupRowsFn.js.map +1 -1
  22. package/build/cjs/utils/sortRowsFn.js +1 -1
  23. package/build/cjs/utils/sortRowsFn.js.map +1 -1
  24. package/build/esm/index.js +166 -192
  25. package/build/esm/index.js.map +1 -1
  26. package/build/stats-html.html +1 -1
  27. package/build/stats-react.json +303 -270
  28. package/build/types/aggregationTypes.d.ts +9 -9
  29. package/build/types/core.d.ts +1 -1
  30. package/build/types/features/Expanding.d.ts +1 -0
  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 +166 -192
  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 +7 -10
  44. package/src/features/Filters.ts +2 -2
  45. package/src/features/Grouping.ts +2 -2
  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
  //
@@ -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) {
@@ -2900,6 +2908,10 @@ var Expanding = {
2900
2908
  };
2901
2909
  return propGetter(initialProps, userProps);
2902
2910
  },
2911
+ getIsSomeRowsExpanded: function getIsSomeRowsExpanded() {
2912
+ var expanded = instance.getState().expanded;
2913
+ return expanded === true || Object.values(expanded).some(Boolean);
2914
+ },
2903
2915
  getIsAllRowsExpanded: function getIsAllRowsExpanded() {
2904
2916
  var expanded = instance.getState().expanded; // If expanded is true, save some cycles and return true
2905
2917
 
@@ -2960,14 +2972,7 @@ var Expanding = {
2960
2972
  return row.subRows && !!row.subRows.length;
2961
2973
  },
2962
2974
  getToggleExpandedProps: function getToggleExpandedProps(userProps) {
2963
- var initialProps = {
2964
- title: 'Toggle Row Expanded',
2965
- onClick: function onClick(e) {
2966
- e.stopPropagation();
2967
- instance.toggleRowExpanded(row.id);
2968
- }
2969
- };
2970
- return propGetter(initialProps, userProps);
2975
+ return instance.getToggleExpandedProps(row.id, userProps);
2971
2976
  }
2972
2977
  };
2973
2978
  }
@@ -3194,10 +3199,10 @@ var RowSelection = {
3194
3199
  },
3195
3200
  toggleAllRowsSelected: function toggleAllRowsSelected(value) {
3196
3201
  instance.setRowSelection(function (old) {
3197
- value = typeof value !== 'undefined' ? value : !instance.getIsAllRowsSelected(); // Only remove/add the rows that are visible on the screen
3198
- // Leave all the other rows that are selected alone.
3202
+ value = typeof value !== 'undefined' ? value : !instance.getIsAllRowsSelected();
3203
+
3204
+ var rowSelection = _extends({}, old);
3199
3205
 
3200
- var rowSelection = Object.assign({}, old);
3201
3206
  var preGroupedFlatRows = instance.getPreGroupedRowModel().flatRows; // We don't use `mutateRowIsSelected` here for performance reasons.
3202
3207
  // All of the rows are flat already, so it wouldn't be worth it
3203
3208
 
@@ -3941,7 +3946,11 @@ function createTableInstance(options) {
3941
3946
  depth: depth,
3942
3947
  values: values,
3943
3948
  subRows: [],
3944
- leafRows: [],
3949
+ getLeafRows: function getLeafRows() {
3950
+ return flattenBy(row.subRows, function (d) {
3951
+ return d.subRows;
3952
+ });
3953
+ },
3945
3954
  getRowProps: function getRowProps(userProps) {
3946
3955
  return instance.getRowProps(row.id, userProps);
3947
3956
  },
@@ -4035,13 +4044,9 @@ function createTableInstance(options) {
4035
4044
 
4036
4045
  for (var _i = 0; _i < row.originalSubRows.length; _i++) {
4037
4046
  accessRow(row.originalSubRows[_i], _i, depth + 1, subRows, row);
4038
- } // Keep the new subRows array on the row
4039
-
4047
+ }
4040
4048
 
4041
4049
  row.subRows = subRows;
4042
- row.leafRows = flattenBy(subRows, function (d) {
4043
- return d.leafRows;
4044
- });
4045
4050
  }
4046
4051
  }
4047
4052
  };
@@ -4063,9 +4068,9 @@ function createTableInstance(options) {
4063
4068
  return (_instance$options$deb10 = instance.options.debugAll) != null ? _instance$options$deb10 : instance.options.debugTable;
4064
4069
  },
4065
4070
  onChange: function onChange() {
4066
- instance._notifyRowSelectionReset();
4067
-
4068
4071
  instance._notifyFiltersReset();
4072
+
4073
+ instance._notifyRowSelectionReset();
4069
4074
  }
4070
4075
  }),
4071
4076
  // The final calls start at the bottom of the model,
@@ -4233,126 +4238,147 @@ function _createTable(_, __, __options) {
4233
4238
  };
4234
4239
  }
4235
4240
 
4236
- function columnFilterRowsFn(instance, rowModel) {
4237
- var columnFilters = instance.getState().columnFilters;
4241
+ function filterRowModelFromLeafs(rowsToFilter, filterRows, instance) {
4238
4242
  var newFilteredFlatRows = [];
4239
4243
  var newFilteredRowsById = {};
4240
- var filterFromChildrenUp = instance.options.filterFromChildrenUp;
4241
4244
 
4242
- var filterRows = function filterRows(rowsToFilter, depth) {
4243
- columnFilters.forEach(function (_ref) {
4244
- var columnId = _ref.id,
4245
- filterValue = _ref.value;
4246
- // Find the columnFilters column
4247
- var column = instance.getColumn(columnId);
4245
+ var recurseFilterRows = function recurseFilterRows(rowsToFilter, depth) {
4246
+ if (depth === void 0) {
4247
+ depth = 0;
4248
+ }
4248
4249
 
4249
- if (!column) {
4250
- if (process.env.NODE_ENV !== 'production') {
4251
- console.warn("Table: Could not find a column with id: " + columnId);
4252
- }
4250
+ rowsToFilter = rowsToFilter.slice(); // Filter from children up first
4253
4251
 
4254
- throw new Error();
4255
- }
4252
+ for (var i = 0; i < rowsToFilter.length; i++) {
4253
+ var _row$subRows;
4256
4254
 
4257
- if (depth === 0) {
4258
- var preFilteredRows = [].concat(rowsToFilter);
4255
+ var row = rowsToFilter[i];
4259
4256
 
4260
- column.getPreFilteredRows = function () {
4261
- return preFilteredRows;
4262
- };
4257
+ if (!((_row$subRows = row.subRows) != null && _row$subRows.length)) {
4258
+ continue;
4263
4259
  }
4264
4260
 
4265
- var filterFn = instance.getColumnFilterFn(column.id);
4266
-
4267
- if (!filterFn) {
4268
- if (process.env.NODE_ENV !== 'production') {
4269
- console.warn("Could not find a valid 'column.filterType' for column with the ID: " + column.id + ".");
4270
- }
4261
+ rowsToFilter[i] = instance.createRow(row.id, row.original, row.index, row.depth, row.values);
4262
+ rowsToFilter[i].subRows = recurseFilterRows(row.subRows, depth + 1);
4271
4263
 
4272
- return;
4273
- } // Pass the rows, id, filterValue and column to the filterFn
4274
- // to get the filtered rows back
4264
+ if (!rowsToFilter[i].subRows.length) {
4265
+ rowsToFilter.splice(i, 1);
4266
+ i--;
4267
+ }
4268
+ }
4275
4269
 
4270
+ rowsToFilter = filterRows(rowsToFilter, depth); // Apply the filter to any subRows
4276
4271
 
4277
- rowsToFilter = filterFn(rowsToFilter, [columnId], filterValue);
4272
+ rowsToFilter.forEach(function (row) {
4273
+ newFilteredFlatRows.push(row);
4274
+ newFilteredRowsById[row.id] = row;
4278
4275
  });
4279
4276
  return rowsToFilter;
4280
4277
  };
4281
4278
 
4282
- if (filterFromChildrenUp) {
4283
- var _recurseFilterRows = function _recurseFilterRows(rowsToFilter, depth) {
4284
- if (depth === void 0) {
4285
- depth = 0;
4286
- }
4287
-
4288
- // Filter from children up
4289
- rowsToFilter = rowsToFilter.filter(function (row) {
4290
- var _row$subRows;
4291
-
4292
- if (!((_row$subRows = row.subRows) != null && _row$subRows.length)) {
4293
- return true;
4294
- }
4295
-
4296
- row.subRows = _recurseFilterRows(row.subRows, depth + 1);
4297
- return row.subRows.length;
4298
- });
4299
- rowsToFilter = filterRows(rowsToFilter, depth); // Apply the filter to any subRows
4300
-
4301
- rowsToFilter.forEach(function (row) {
4302
- newFilteredFlatRows.push(row);
4303
- newFilteredRowsById[row.id] = row;
4304
- });
4305
- return rowsToFilter;
4306
- };
4307
-
4308
- return {
4309
- rows: _recurseFilterRows(rowModel.rows),
4310
- flatRows: newFilteredFlatRows,
4311
- rowsById: newFilteredRowsById
4312
- };
4313
- } // Filters top level and nested rows
4314
-
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
4315
4288
 
4316
4289
  var recurseFilterRows = function recurseFilterRows(rowsToFilter, depth) {
4317
4290
  if (depth === void 0) {
4318
4291
  depth = 0;
4319
4292
  }
4320
4293
 
4321
- // Filter from parents downward
4294
+ // Filter from parents downward first
4322
4295
  rowsToFilter = filterRows(rowsToFilter, depth); // Apply the filter to any subRows
4323
- // We technically could do this recursively in the above loop,
4324
- // but that would severely hinder the API for the user, since they
4325
- // would be required to do that recursion in some scenarios
4326
4296
 
4327
- rowsToFilter.forEach(function (row) {
4297
+ for (var i = 0; i < rowsToFilter.length; i++) {
4298
+ var _row$subRows2;
4299
+
4300
+ var row = rowsToFilter[i];
4328
4301
  newFilteredFlatRows.push(row);
4329
4302
  newFilteredRowsById[row.id] = row;
4330
4303
 
4331
- if (!filterFromChildrenUp) {
4332
- var _row$subRows2;
4304
+ if (!((_row$subRows2 = row.subRows) != null && _row$subRows2.length)) {
4305
+ rowsToFilter.splice(i, 1);
4306
+ i--;
4307
+ continue;
4308
+ }
4333
4309
 
4334
- if (!((_row$subRows2 = row.subRows) != null && _row$subRows2.length)) {
4335
- return;
4336
- }
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
+ }
4337
4313
 
4338
- row.subRows = recurseFilterRows(row.subRows, depth + 1);
4339
- }
4340
- });
4341
4314
  return rowsToFilter;
4342
4315
  };
4343
4316
 
4344
4317
  return {
4345
- rows: recurseFilterRows(rowModel.rows),
4318
+ rows: recurseFilterRows(rowsToFilter),
4346
4319
  flatRows: newFilteredFlatRows,
4347
4320
  rowsById: newFilteredRowsById
4348
4321
  };
4349
4322
  }
4350
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
+
4351
4379
  function globalFilterRowsFn(instance, rowModel) {
4352
4380
  var globalFilter = instance.getState().globalFilter;
4353
- var newFilteredFlatRows = [];
4354
- var newFilteredRowsById = {};
4355
- var filterFromChildrenUp = instance.options.filterFromChildrenUp;
4381
+ var filterFromLeafRows = instance.options.filterFromLeafRows;
4356
4382
  var filterFn = instance.getGlobalFilterFn();
4357
4383
 
4358
4384
  if (!filterFn) {
@@ -4370,67 +4396,15 @@ function globalFilterRowsFn(instance, rowModel) {
4370
4396
  return d.id;
4371
4397
  });
4372
4398
 
4373
- if (filterFromChildrenUp) {
4374
- var _recurseFilterRows = function _recurseFilterRows(rowsToFilter, depth) {
4375
-
4376
- // Filter from children up
4377
- rowsToFilter = rowsToFilter.filter(function (row) {
4378
- var _row$subRows;
4379
-
4380
- if (!((_row$subRows = row.subRows) != null && _row$subRows.length)) {
4381
- return true;
4382
- }
4383
-
4384
- row.subRows = _recurseFilterRows(row.subRows);
4385
- return row.subRows.length;
4386
- });
4387
- rowsToFilter = filterFn(rowsToFilter, filterableColumnIds, globalFilter); // Apply the filter to any subRows
4388
-
4389
- rowsToFilter.forEach(function (row) {
4390
- newFilteredFlatRows.push(row);
4391
- newFilteredRowsById[row.id] = row;
4392
- });
4393
- return rowsToFilter;
4394
- };
4395
-
4396
- return {
4397
- rows: _recurseFilterRows(rowModel.rows),
4398
- flatRows: newFilteredFlatRows,
4399
- rowsById: newFilteredRowsById
4400
- };
4401
- } // Filters top level and nested rows
4402
-
4403
-
4404
- var recurseFilterRows = function recurseFilterRows(rowsToFilter, depth) {
4405
-
4406
- // Filter from parents downward
4407
- rowsToFilter = filterFn(rowsToFilter, filterableColumnIds, globalFilter); // Apply the filter to any subRows
4408
- // We technically could do this recursively in the above loop,
4409
- // but that would severely hinder the API for the user, since they
4410
- // would be required to do that recursion in some scenarios
4411
-
4412
- rowsToFilter.forEach(function (row) {
4413
- newFilteredFlatRows.push(row);
4414
- newFilteredRowsById[row.id] = row;
4415
-
4416
- if (!filterFromChildrenUp) {
4417
- var _row$subRows2;
4418
-
4419
- if (!((_row$subRows2 = row.subRows) != null && _row$subRows2.length)) {
4420
- return;
4421
- }
4422
-
4423
- row.subRows = recurseFilterRows(row.subRows);
4424
- }
4425
- });
4426
- return rowsToFilter;
4399
+ var filterRows = function filterRows(rows) {
4400
+ return filterFn(rows, filterableColumnIds, globalFilter);
4427
4401
  };
4428
4402
 
4429
- return {
4430
- rows: recurseFilterRows(rowModel.rows),
4431
- flatRows: newFilteredFlatRows,
4432
- rowsById: newFilteredRowsById
4433
- };
4403
+ if (filterFromLeafRows) {
4404
+ filterRowModelFromLeafs(rowModel.rows, filterRows, instance);
4405
+ }
4406
+
4407
+ return filterRowModelFromRoot(rowModel.rows, filterRows, instance);
4434
4408
  }
4435
4409
 
4436
4410
  function sortRowsFn(instance, rowModel) {
@@ -4469,7 +4443,7 @@ function sortRowsFn(instance, rowModel) {
4469
4443
  var bUndefined = typeof bValue === 'undefined';
4470
4444
 
4471
4445
  if (aUndefined || bUndefined) {
4472
- return aUndefined && bUndefined ? 0 : aUndefined ? 1 : -1;
4446
+ return aUndefined && bUndefined ? 0 : aUndefined ? columnInfo.sortUndefined : -columnInfo.sortUndefined;
4473
4447
  }
4474
4448
  } // This function should always return in ascending order
4475
4449
 
@@ -4532,21 +4506,21 @@ function groupRowsFn(instance, sortedRowModel) {
4532
4506
  var aggregateFn = instance.getColumnAggregationFn(column.id);
4533
4507
 
4534
4508
  if (aggregateFn) {
4535
- // Get the columnValues to aggregate
4536
- var groupedValues = groupedRows.map(function (row) {
4537
- return row.values[column.id];
4538
- }); // Get the columnValues to aggregate
4539
-
4540
- var leafValues = leafRows.map(function (row) {
4541
- 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];
4542
4512
 
4543
- if (!depth && column.aggregateValue) {
4544
- columnValue = column.aggregateValue(columnValue);
4545
- }
4513
+ if (!depth && column.aggregateValue) {
4514
+ columnValue = column.aggregateValue(columnValue);
4515
+ }
4546
4516
 
4547
- return columnValue;
4517
+ return columnValue;
4518
+ });
4519
+ }, function () {
4520
+ return groupedRows.map(function (row) {
4521
+ return row.values[column.id];
4522
+ });
4548
4523
  });
4549
- values[column.id] = aggregateFn(leafValues, groupedValues);
4550
4524
  } else if (column.aggregationType) {
4551
4525
  console.info({
4552
4526
  column: column
@@ -4589,7 +4563,7 @@ function groupRowsFn(instance, sortedRowModel) {
4589
4563
  var subRows = groupUpRecursively(groupedRows, depth + 1, id); // Flatten the leaf rows of the rows in this group
4590
4564
 
4591
4565
  var leafRows = depth ? flattenBy(groupedRows, function (row) {
4592
- return row.leafRows;
4566
+ return row.subRows;
4593
4567
  }) : groupedRows;
4594
4568
  var values = aggregateRowsToValues(leafRows, groupedRows, depth);
4595
4569
  var row = instance.createRow(id, undefined, index, depth, values);