@tanstack/table-core 8.0.0-beta.2 → 8.0.0-beta.5

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 (40) hide show
  1. package/build/cjs/core/cell.js +7 -1
  2. package/build/cjs/core/cell.js.map +1 -1
  3. package/build/cjs/core/instance.js +2 -2
  4. package/build/cjs/core/instance.js.map +1 -1
  5. package/build/cjs/features/Filters.js +1 -2
  6. package/build/cjs/features/Filters.js.map +1 -1
  7. package/build/cjs/features/Grouping.js +19 -6
  8. package/build/cjs/features/Grouping.js.map +1 -1
  9. package/build/cjs/features/RowSelection.js +3 -3
  10. package/build/cjs/features/RowSelection.js.map +1 -1
  11. package/build/cjs/features/Sorting.js +27 -9
  12. package/build/cjs/features/Sorting.js.map +1 -1
  13. package/build/cjs/utils/getGroupedRowModel.js +0 -5
  14. package/build/cjs/utils/getGroupedRowModel.js.map +1 -1
  15. package/build/cjs/utils/getPaginationRowModel.js +19 -5
  16. package/build/cjs/utils/getPaginationRowModel.js.map +1 -1
  17. package/build/esm/index.js +78 -33
  18. package/build/esm/index.js.map +1 -1
  19. package/build/stats-html.html +1 -1
  20. package/build/stats-react.json +322 -322
  21. package/build/types/core/instance.d.ts +1 -0
  22. package/build/types/features/Filters.d.ts +0 -3
  23. package/build/types/features/Grouping.d.ts +0 -3
  24. package/build/types/features/RowSelection.d.ts +2 -2
  25. package/build/types/features/Sorting.d.ts +1 -0
  26. package/build/types/types.d.ts +1 -1
  27. package/build/umd/index.development.js +78 -33
  28. package/build/umd/index.development.js.map +1 -1
  29. package/build/umd/index.production.js +1 -1
  30. package/build/umd/index.production.js.map +1 -1
  31. package/package.json +1 -1
  32. package/src/core/cell.ts +4 -1
  33. package/src/core/instance.ts +2 -1
  34. package/src/features/Filters.ts +5 -7
  35. package/src/features/Grouping.ts +19 -10
  36. package/src/features/RowSelection.ts +7 -5
  37. package/src/features/Sorting.ts +27 -12
  38. package/src/types.ts +1 -1
  39. package/src/utils/getGroupedRowModel.ts +0 -7
  40. package/src/utils/getPaginationRowModel.ts +21 -6
@@ -1094,7 +1094,6 @@ const Filters = {
1094
1094
  },
1095
1095
  createColumn: (column, instance) => {
1096
1096
  return {
1097
- filterFn: column.filterFn,
1098
1097
  getAutoFilterFn: () => {
1099
1098
  const firstRow = instance.getCoreRowModel().flatRows[0];
1100
1099
  const value = firstRow == null ? void 0 : firstRow.getValue(column.id);
@@ -1125,7 +1124,7 @@ const Filters = {
1125
1124
  var _ref;
1126
1125
 
1127
1126
  const userFilterFns = instance.options.filterFns;
1128
- return isFunction(column.filterFn) ? column.filterFn : column.filterFn === 'auto' ? column.getAutoFilterFn() : (_ref = userFilterFns == null ? void 0 : userFilterFns[column.filterFn]) != null ? _ref : filterFns[column.filterFn];
1127
+ return isFunction(column.columnDef.filterFn) ? column.columnDef.filterFn : column.columnDef.filterFn === 'auto' ? column.getAutoFilterFn() : (_ref = userFilterFns == null ? void 0 : userFilterFns[column.columnDef.filterFn]) != null ? _ref : filterFns[column.columnDef.filterFn];
1129
1128
  },
1130
1129
  getCanFilter: () => {
1131
1130
  var _column$columnDef$ena, _instance$options$ena, _instance$options$ena2;
@@ -1414,6 +1413,11 @@ const aggregationFns = {
1414
1413
  const Grouping = {
1415
1414
  getDefaultColumnDef: () => {
1416
1415
  return {
1416
+ aggregatedCell: props => {
1417
+ var _props$getValue$toStr, _props$getValue;
1418
+
1419
+ return (_props$getValue$toStr = (_props$getValue = props.getValue()) == null ? void 0 : _props$getValue.toString == null ? void 0 : _props$getValue.toString()) != null ? _props$getValue$toStr : null;
1420
+ },
1417
1421
  aggregationFn: 'auto'
1418
1422
  };
1419
1423
  },
@@ -1474,8 +1478,6 @@ const Grouping = {
1474
1478
  if (Object.prototype.toString.call(value) === '[object Date]') {
1475
1479
  return aggregationFns.extent;
1476
1480
  }
1477
-
1478
- return aggregationFns.count;
1479
1481
  },
1480
1482
  getAggregationFn: () => {
1481
1483
  var _ref4;
@@ -1486,7 +1488,7 @@ const Grouping = {
1486
1488
  throw new Error();
1487
1489
  }
1488
1490
 
1489
- return isFunction(column.aggregationFn) ? column.aggregationFn : column.aggregationFn === 'auto' ? column.getAutoAggregationFn() : (_ref4 = userAggregationFns == null ? void 0 : userAggregationFns[column.aggregationFn]) != null ? _ref4 : aggregationFns[column.aggregationFn];
1491
+ return isFunction(column.columnDef.aggregationFn) ? column.columnDef.aggregationFn : column.columnDef.aggregationFn === 'auto' ? column.getAutoAggregationFn() : (_ref4 = userAggregationFns == null ? void 0 : userAggregationFns[column.columnDef.aggregationFn]) != null ? _ref4 : aggregationFns[column.columnDef.aggregationFn];
1490
1492
  }
1491
1493
  };
1492
1494
  },
@@ -1519,6 +1521,12 @@ const Grouping = {
1519
1521
  };
1520
1522
  },
1521
1523
  createCell: (cell, column, row, instance) => {
1524
+ const getRenderValue = () => {
1525
+ var _cell$getValue;
1526
+
1527
+ return (_cell$getValue = cell.getValue()) != null ? _cell$getValue : instance.options.renderFallbackValue;
1528
+ };
1529
+
1522
1530
  return {
1523
1531
  getIsGrouped: () => column.getIsGrouped() && column.id === row.groupingColumnId,
1524
1532
  getIsPlaceholder: () => !cell.getIsGrouped() && column.getIsGrouped(),
@@ -1528,15 +1536,19 @@ const Grouping = {
1528
1536
  return !cell.getIsGrouped() && !cell.getIsPlaceholder() && ((_row$subRows = row.subRows) == null ? void 0 : _row$subRows.length) > 1;
1529
1537
  },
1530
1538
  renderAggregatedCell: () => {
1531
- var _column$columnDef$agg;
1539
+ if (process.env.NODE_ENV === 'development') {
1540
+ if (!column.columnDef.aggregatedCell) {
1541
+ console.warn('A columnDef.aggregatedCell template is recommended for displaying aggregated values.');
1542
+ }
1543
+ }
1532
1544
 
1533
- const template = (_column$columnDef$agg = column.columnDef.aggregatedCell) != null ? _column$columnDef$agg : column.columnDef.cell;
1545
+ const template = column.columnDef.aggregatedCell || column.columnDef.cell;
1534
1546
  return template ? instance._render(template, {
1535
1547
  instance,
1536
1548
  column,
1537
1549
  row,
1538
1550
  cell,
1539
- getValue: cell.getValue
1551
+ getValue: getRenderValue
1540
1552
  }) : null;
1541
1553
  }
1542
1554
  };
@@ -2006,11 +2018,11 @@ const RowSelection = {
2006
2018
  });
2007
2019
  },
2008
2020
  toggleAllPageRowsSelected: value => instance.setRowSelection(old => {
2009
- typeof value !== 'undefined' ? value : !instance.getIsAllPageRowsSelected();
2021
+ const resolvedValue = typeof value !== 'undefined' ? value : !instance.getIsAllPageRowsSelected();
2010
2022
  const rowSelection = { ...old
2011
2023
  };
2012
2024
  instance.getRowModel().rows.forEach(row => {
2013
- mutateRowIsSelected(rowSelection, row.id, value, instance);
2025
+ mutateRowIsSelected(rowSelection, row.id, resolvedValue, instance);
2014
2026
  });
2015
2027
  return rowSelection;
2016
2028
  }),
@@ -2165,7 +2177,7 @@ const RowSelection = {
2165
2177
  },
2166
2178
  getIsSomePageRowsSelected: () => {
2167
2179
  const paginationFlatRows = instance.getPaginationRowModel().flatRows;
2168
- return instance.getIsAllPageRowsSelected() ? false : !!(paginationFlatRows != null && paginationFlatRows.length);
2180
+ return instance.getIsAllPageRowsSelected() ? false : paginationFlatRows.some(d => d.getIsSelected() || d.getIsSomeSelected());
2169
2181
  },
2170
2182
  getToggleAllRowsSelectedHandler: () => {
2171
2183
  return e => {
@@ -2519,8 +2531,10 @@ const Sorting = {
2519
2531
  // })
2520
2532
  // return
2521
2533
  // }
2534
+ // this needs to be outside of instance.setSorting to be in sync with rerender
2535
+ const nextSortingOrder = column.getNextSortingOrder();
2522
2536
  instance.setSorting(old => {
2523
- var _ref2, _column$columnDef$sor, _instance$options$ena, _instance$options$ena2;
2537
+ var _instance$options$ena, _instance$options$ena2;
2524
2538
 
2525
2539
  // Find any existing sorting for this column
2526
2540
  const existingSorting = old == null ? void 0 : old.find(d => d.id === column.id);
@@ -2545,30 +2559,29 @@ const Sorting = {
2545
2559
  } else {
2546
2560
  sortAction = 'replace';
2547
2561
  }
2548
- }
2562
+ } // Handle toggle states that will remove the sorting
2549
2563
 
2550
- const sortDescFirst = (_ref2 = (_column$columnDef$sor = column.columnDef.sortDescFirst) != null ? _column$columnDef$sor : instance.options.sortDescFirst) != null ? _ref2 : column.getAutoSortDir() === 'desc'; // Handle toggle states that will remove the sorting
2551
2564
 
2552
2565
  if (sortAction === 'toggle' && ( // Must be toggling
2553
2566
  (_instance$options$ena = instance.options.enableSortingRemoval) != null ? _instance$options$ena : true) && // If enableSortRemove, enable in general
2554
2567
  !hasDescDefined && ( // Must not be setting desc
2555
- multi ? (_instance$options$ena2 = instance.options.enableMultiRemove) != null ? _instance$options$ena2 : true : true) && ( // If multi, don't allow if enableMultiRemove
2556
- existingSorting != null && existingSorting.desc // Finally, detect if it should indeed be removed
2557
- ? !sortDescFirst : sortDescFirst)) {
2568
+ multi ? (_instance$options$ena2 = instance.options.enableMultiRemove) != null ? _instance$options$ena2 : true : true) && // If multi, don't allow if enableMultiRemove
2569
+ !nextSortingOrder // Finally, detect if it should indeed be removed
2570
+ ) {
2558
2571
  sortAction = 'remove';
2559
2572
  }
2560
2573
 
2561
2574
  if (sortAction === 'replace') {
2562
2575
  newSorting = [{
2563
2576
  id: column.id,
2564
- desc: hasDescDefined ? desc : !!sortDescFirst
2577
+ desc: hasDescDefined ? desc : nextSortingOrder === 'desc'
2565
2578
  }];
2566
2579
  } else if (sortAction === 'add' && old != null && old.length) {
2567
2580
  var _instance$options$max;
2568
2581
 
2569
2582
  newSorting = [...old, {
2570
2583
  id: column.id,
2571
- desc: hasDescDefined ? desc : !!sortDescFirst
2584
+ desc: hasDescDefined ? desc : nextSortingOrder === 'desc'
2572
2585
  }]; // Take latest n columns
2573
2586
 
2574
2587
  newSorting.splice(0, newSorting.length - ((_instance$options$max = instance.options.maxMultiSortColCount) != null ? _instance$options$max : Number.MAX_SAFE_INTEGER));
@@ -2577,7 +2590,7 @@ const Sorting = {
2577
2590
  newSorting = old.map(d => {
2578
2591
  if (d.id === column.id) {
2579
2592
  return { ...d,
2580
- desc: hasDescDefined ? desc : !(existingSorting != null && existingSorting.desc)
2593
+ desc: hasDescDefined ? desc : nextSortingOrder === 'desc'
2581
2594
  };
2582
2595
  }
2583
2596
 
@@ -2590,6 +2603,23 @@ const Sorting = {
2590
2603
  return newSorting;
2591
2604
  });
2592
2605
  },
2606
+ getNextSortingOrder: () => {
2607
+ var _ref2, _column$columnDef$sor;
2608
+
2609
+ const sortDescFirst = (_ref2 = (_column$columnDef$sor = column.columnDef.sortDescFirst) != null ? _column$columnDef$sor : instance.options.sortDescFirst) != null ? _ref2 : column.getAutoSortDir() === 'desc';
2610
+ const firstSortDirection = sortDescFirst ? 'desc' : 'asc';
2611
+ const isSorted = column.getIsSorted();
2612
+
2613
+ if (!isSorted) {
2614
+ return firstSortDirection;
2615
+ }
2616
+
2617
+ if (isSorted === firstSortDirection) {
2618
+ return isSorted === 'desc' ? 'asc' : 'desc';
2619
+ } else {
2620
+ return false;
2621
+ }
2622
+ },
2593
2623
  getCanSort: () => {
2594
2624
  var _column$columnDef$ena, _instance$options$ena3;
2595
2625
 
@@ -2883,9 +2913,9 @@ function createTableInstance(options) {
2883
2913
  header: props => props.header.column.id,
2884
2914
  footer: props => props.header.column.id,
2885
2915
  cell: props => {
2886
- var _props$getValue$toStr, _props$getValue$toStr2, _props$getValue;
2916
+ var _props$getValue$toStr, _props$getValue;
2887
2917
 
2888
- return (_props$getValue$toStr = (_props$getValue$toStr2 = (_props$getValue = props.getValue()).toString) == null ? void 0 : _props$getValue$toStr2.call(_props$getValue)) != null ? _props$getValue$toStr : null;
2918
+ return (_props$getValue$toStr = (_props$getValue = props.getValue()) == null ? void 0 : _props$getValue.toString == null ? void 0 : _props$getValue.toString()) != null ? _props$getValue$toStr : null;
2889
2919
  },
2890
2920
  ...instance._features.reduce((obj, feature) => {
2891
2921
  return Object.assign(obj, feature.getDefaultColumnDef == null ? void 0 : feature.getDefaultColumnDef());
@@ -3039,6 +3069,12 @@ function createTable(_, __, options) {
3039
3069
  }
3040
3070
 
3041
3071
  function createCell(instance, row, column, columnId) {
3072
+ const getRenderValue = () => {
3073
+ var _cell$getValue;
3074
+
3075
+ return (_cell$getValue = cell.getValue()) != null ? _cell$getValue : instance.options.renderFallbackValue;
3076
+ };
3077
+
3042
3078
  const cell = {
3043
3079
  id: row.id + "_" + column.id,
3044
3080
  row,
@@ -3050,7 +3086,7 @@ function createCell(instance, row, column, columnId) {
3050
3086
  column,
3051
3087
  row,
3052
3088
  cell: cell,
3053
- getValue: cell.getValue
3089
+ getValue: getRenderValue
3054
3090
  }) : null;
3055
3091
  }
3056
3092
  };
@@ -3656,11 +3692,6 @@ function getGroupedRowModel() {
3656
3692
  if (aggregateFn) {
3657
3693
  row._groupingValuesCache[columnId] = aggregateFn(columnId, leafRows, groupedRows);
3658
3694
  return row._groupingValuesCache[columnId];
3659
- } else if (column.aggregationFn) {
3660
- console.info({
3661
- column
3662
- });
3663
- throw new Error(process.env.NODE_ENV !== 'production' ? "Table: Invalid column.aggregateType option for column listed above" : '');
3664
3695
  }
3665
3696
  }
3666
3697
  });
@@ -3784,20 +3815,34 @@ function getPaginationRowModel(opts) {
3784
3815
  const pageStart = pageSize * pageIndex;
3785
3816
  const pageEnd = pageStart + pageSize;
3786
3817
  rows = rows.slice(pageStart, pageEnd);
3818
+ let paginatedRowModel;
3787
3819
 
3788
3820
  if (!instance.options.paginateExpandedRows) {
3789
- return expandRows({
3821
+ paginatedRowModel = expandRows({
3790
3822
  rows,
3791
3823
  flatRows,
3792
3824
  rowsById
3793
3825
  });
3826
+ } else {
3827
+ paginatedRowModel = {
3828
+ rows,
3829
+ flatRows,
3830
+ rowsById
3831
+ };
3794
3832
  }
3795
3833
 
3796
- return {
3797
- rows,
3798
- flatRows,
3799
- rowsById
3834
+ paginatedRowModel.flatRows = [];
3835
+
3836
+ const handleRow = row => {
3837
+ paginatedRowModel.flatRows.push(row);
3838
+
3839
+ if (row.subRows.length) {
3840
+ row.subRows.forEach(handleRow);
3841
+ }
3800
3842
  };
3843
+
3844
+ paginatedRowModel.rows.forEach(handleRow);
3845
+ return paginatedRowModel;
3801
3846
  }, {
3802
3847
  key: process.env.NODE_ENV === 'development' && 'getPaginationRowModel',
3803
3848
  debug: () => {