@tanstack/react-table 8.0.0-alpha.86 → 8.0.0-alpha.89

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.
@@ -124,7 +124,7 @@ function createColumn(instance, columnDef, depth, parent) {
124
124
  throw new Error();
125
125
  }
126
126
 
127
- let column = { ...columnDef,
127
+ let column = {
128
128
  id: "" + id,
129
129
  accessorFn,
130
130
  parent: parent,
@@ -888,8 +888,12 @@ const Expanding = {
888
888
  getIsAllRowsExpanded: () => {
889
889
  const expanded = instance.getState().expanded; // If expanded is true, save some cycles and return true
890
890
 
891
- if (expanded === true) {
892
- return true;
891
+ if (typeof expanded === 'boolean') {
892
+ return expanded === true;
893
+ }
894
+
895
+ if (!Object.keys(expanded).length) {
896
+ return false;
893
897
  } // If any row is not expanded, return false
894
898
 
895
899
 
@@ -2344,21 +2348,54 @@ function isRowSelected(row, selection, instance) {
2344
2348
  }
2345
2349
 
2346
2350
  const reSplitAlphaNumeric = /([0-9]+)/gm;
2347
- const sortingFns = {
2348
- alphanumeric,
2349
- alphanumericCaseSensitive,
2350
- text,
2351
- textCaseSensitive,
2352
- datetime,
2353
- basic
2354
- };
2355
2351
 
2356
- function alphanumeric(rowA, rowB, columnId) {
2352
+ const alphanumeric = (rowA, rowB, columnId) => {
2357
2353
  return compareAlphanumeric(toString(rowA.getValue(columnId)).toLowerCase(), toString(rowB.getValue(columnId)).toLowerCase());
2358
- }
2354
+ };
2359
2355
 
2360
- function alphanumericCaseSensitive(rowA, rowB, columnId) {
2356
+ const alphanumericCaseSensitive = (rowA, rowB, columnId) => {
2361
2357
  return compareAlphanumeric(toString(rowA.getValue(columnId)), toString(rowB.getValue(columnId)));
2358
+ }; // The text filter is more basic (less numeric support)
2359
+ // but is much faster
2360
+
2361
+
2362
+ const text = (rowA, rowB, columnId) => {
2363
+ return compareBasic(toString(rowA.getValue(columnId)).toLowerCase(), toString(rowB.getValue(columnId)).toLowerCase());
2364
+ }; // The text filter is more basic (less numeric support)
2365
+ // but is much faster
2366
+
2367
+
2368
+ const textCaseSensitive = (rowA, rowB, columnId) => {
2369
+ return compareBasic(toString(rowA.getValue(columnId)), toString(rowB.getValue(columnId)));
2370
+ };
2371
+
2372
+ const datetime = (rowA, rowB, columnId) => {
2373
+ return compareBasic(rowA.getValue(columnId).getTime(), rowB.getValue(columnId).getTime());
2374
+ };
2375
+
2376
+ const basic = (rowA, rowB, columnId) => {
2377
+ return compareBasic(rowA.getValue(columnId), rowB.getValue(columnId));
2378
+ }; // Utils
2379
+
2380
+
2381
+ function compareBasic(a, b) {
2382
+ return a === b ? 0 : a > b ? 1 : -1;
2383
+ }
2384
+
2385
+ function toString(a) {
2386
+ if (typeof a === 'number') {
2387
+ if (isNaN(a) || a === Infinity || a === -Infinity) {
2388
+ return '';
2389
+ }
2390
+
2391
+ return String(a);
2392
+ }
2393
+
2394
+ if (typeof a === 'string') {
2395
+ return a;
2396
+ }
2397
+
2398
+ return '';
2362
2399
  } // Mixed sorting is slow, but very inclusive of many edge cases.
2363
2400
  // It handles numbers, mixed alphanumeric combinations, and even
2364
2401
  // null, undefined, and Infinity
@@ -2405,48 +2442,17 @@ function compareAlphanumeric(aStr, bStr) {
2405
2442
  }
2406
2443
 
2407
2444
  return a.length - b.length;
2408
- } // The text filter is more basic (less numeric support)
2409
- // but is much faster
2410
-
2411
-
2412
- function text(rowA, rowB, columnId) {
2413
- return compareBasic(toString(rowA.getValue(columnId)).toLowerCase(), toString(rowB.getValue(columnId)).toLowerCase());
2414
- } // The text filter is more basic (less numeric support)
2415
- // but is much faster
2416
-
2417
-
2418
- function textCaseSensitive(rowA, rowB, columnId) {
2419
- return compareBasic(toString(rowA.getValue(columnId)), toString(rowB.getValue(columnId)));
2420
- }
2421
-
2422
- function datetime(rowA, rowB, columnId) {
2423
- return compareBasic(rowA.getValue(columnId).getTime(), rowB.getValue(columnId).getTime());
2424
- }
2425
-
2426
- function basic(rowA, rowB, columnId) {
2427
- return compareBasic(rowA.getValue(columnId), rowB.getValue(columnId));
2428
- } // Utils
2429
-
2430
-
2431
- function compareBasic(a, b) {
2432
- return a === b ? 0 : a > b ? 1 : -1;
2433
- }
2445
+ } // Exports
2434
2446
 
2435
- function toString(a) {
2436
- if (typeof a === 'number') {
2437
- if (isNaN(a) || a === Infinity || a === -Infinity) {
2438
- return '';
2439
- }
2440
-
2441
- return String(a);
2442
- }
2443
2447
 
2444
- if (typeof a === 'string') {
2445
- return a;
2446
- }
2447
-
2448
- return '';
2449
- }
2448
+ const sortingFns = {
2449
+ alphanumeric,
2450
+ alphanumericCaseSensitive,
2451
+ text,
2452
+ textCaseSensitive,
2453
+ datetime,
2454
+ basic
2455
+ };
2450
2456
 
2451
2457
  //
2452
2458
  const Sorting = {
@@ -2527,8 +2533,10 @@ const Sorting = {
2527
2533
  // })
2528
2534
  // return
2529
2535
  // }
2536
+ // this needs to be outside of instance.setSorting to be in sync with rerender
2537
+ const nextSortingOrder = column.getNextSortingOrder();
2530
2538
  instance.setSorting(old => {
2531
- var _ref2, _column$columnDef$sor, _instance$options$ena, _instance$options$ena2;
2539
+ var _instance$options$ena, _instance$options$ena2;
2532
2540
 
2533
2541
  // Find any existing sorting for this column
2534
2542
  const existingSorting = old == null ? void 0 : old.find(d => d.id === column.id);
@@ -2553,30 +2561,29 @@ const Sorting = {
2553
2561
  } else {
2554
2562
  sortAction = 'replace';
2555
2563
  }
2556
- }
2564
+ } // Handle toggle states that will remove the sorting
2557
2565
 
2558
- 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
2559
2566
 
2560
2567
  if (sortAction === 'toggle' && ( // Must be toggling
2561
2568
  (_instance$options$ena = instance.options.enableSortingRemoval) != null ? _instance$options$ena : true) && // If enableSortRemove, enable in general
2562
2569
  !hasDescDefined && ( // Must not be setting desc
2563
- multi ? (_instance$options$ena2 = instance.options.enableMultiRemove) != null ? _instance$options$ena2 : true : true) && ( // If multi, don't allow if enableMultiRemove
2564
- existingSorting != null && existingSorting.desc // Finally, detect if it should indeed be removed
2565
- ? !sortDescFirst : sortDescFirst)) {
2570
+ multi ? (_instance$options$ena2 = instance.options.enableMultiRemove) != null ? _instance$options$ena2 : true : true) && // If multi, don't allow if enableMultiRemove
2571
+ !nextSortingOrder // Finally, detect if it should indeed be removed
2572
+ ) {
2566
2573
  sortAction = 'remove';
2567
2574
  }
2568
2575
 
2569
2576
  if (sortAction === 'replace') {
2570
2577
  newSorting = [{
2571
2578
  id: column.id,
2572
- desc: hasDescDefined ? desc : !!sortDescFirst
2579
+ desc: hasDescDefined ? desc : nextSortingOrder === 'desc'
2573
2580
  }];
2574
2581
  } else if (sortAction === 'add' && old != null && old.length) {
2575
2582
  var _instance$options$max;
2576
2583
 
2577
2584
  newSorting = [...old, {
2578
2585
  id: column.id,
2579
- desc: hasDescDefined ? desc : !!sortDescFirst
2586
+ desc: hasDescDefined ? desc : nextSortingOrder === 'desc'
2580
2587
  }]; // Take latest n columns
2581
2588
 
2582
2589
  newSorting.splice(0, newSorting.length - ((_instance$options$max = instance.options.maxMultiSortColCount) != null ? _instance$options$max : Number.MAX_SAFE_INTEGER));
@@ -2585,7 +2592,7 @@ const Sorting = {
2585
2592
  newSorting = old.map(d => {
2586
2593
  if (d.id === column.id) {
2587
2594
  return { ...d,
2588
- desc: hasDescDefined ? desc : !(existingSorting != null && existingSorting.desc)
2595
+ desc: hasDescDefined ? desc : nextSortingOrder === 'desc'
2589
2596
  };
2590
2597
  }
2591
2598
 
@@ -2598,6 +2605,23 @@ const Sorting = {
2598
2605
  return newSorting;
2599
2606
  });
2600
2607
  },
2608
+ getNextSortingOrder: () => {
2609
+ var _ref2, _column$columnDef$sor;
2610
+
2611
+ const sortDescFirst = (_ref2 = (_column$columnDef$sor = column.columnDef.sortDescFirst) != null ? _column$columnDef$sor : instance.options.sortDescFirst) != null ? _ref2 : column.getAutoSortDir() === 'desc';
2612
+ const firstSortDirection = sortDescFirst ? 'desc' : 'asc';
2613
+ const isSorted = column.getIsSorted();
2614
+
2615
+ if (!isSorted) {
2616
+ return firstSortDirection;
2617
+ }
2618
+
2619
+ if (isSorted === firstSortDirection) {
2620
+ return isSorted === 'desc' ? 'asc' : 'desc';
2621
+ } else {
2622
+ return false;
2623
+ }
2624
+ },
2601
2625
  getCanSort: () => {
2602
2626
  var _column$columnDef$ena, _instance$options$ena3;
2603
2627
 
@@ -2698,8 +2722,8 @@ const Visibility = {
2698
2722
  },
2699
2723
  createRow: (row, instance) => {
2700
2724
  return {
2701
- _getAllVisibleCells: memo(() => [row.getAllCells().filter(cell => cell.column.getIsVisible()).map(d => d.id).join('_')], _ => {
2702
- return row.getAllCells().filter(cell => cell.column.getIsVisible());
2725
+ _getAllVisibleCells: memo(() => [row.getAllCells(), instance.getState().columnVisibility], cells => {
2726
+ return cells.filter(cell => cell.column.getIsVisible());
2703
2727
  }, {
2704
2728
  key: process.env.NODE_ENV === 'production' && 'row._getAllVisibleCells',
2705
2729
  debug: () => {
@@ -3052,13 +3076,15 @@ function createCell(instance, row, column, columnId) {
3052
3076
  row,
3053
3077
  column,
3054
3078
  getValue: () => row.getValue(columnId),
3055
- renderCell: () => column.columnDef.cell ? instance._render(column.columnDef.cell, {
3056
- instance,
3057
- column,
3058
- row,
3059
- cell: cell,
3060
- getValue: cell.getValue
3061
- }) : null
3079
+ renderCell: () => {
3080
+ return column.columnDef.cell ? instance._render(column.columnDef.cell, {
3081
+ instance,
3082
+ column,
3083
+ row,
3084
+ cell: cell,
3085
+ getValue: cell.getValue
3086
+ }) : null;
3087
+ }
3062
3088
  };
3063
3089
 
3064
3090
  instance._features.forEach(feature => {
@@ -3133,27 +3159,23 @@ function getCoreRowModel() {
3133
3159
  flatRows: [],
3134
3160
  rowsById: {}
3135
3161
  };
3136
- let rows;
3137
- let row;
3138
- let originalRow;
3139
3162
 
3140
3163
  const accessRows = function (originalRows, depth, parent) {
3141
3164
  if (depth === void 0) {
3142
3165
  depth = 0;
3143
3166
  }
3144
3167
 
3145
- rows = [];
3168
+ const rows = [];
3146
3169
 
3147
3170
  for (let i = 0; i < originalRows.length; i++) {
3148
- originalRow = originalRows[i]; // This could be an expensive check at scale, so we should move it somewhere else, but where?
3171
+ // This could be an expensive check at scale, so we should move it somewhere else, but where?
3149
3172
  // if (!id) {
3150
3173
  // if (process.env.NODE_ENV !== 'production') {
3151
3174
  // throw new Error(`getRowId expected an ID, but got ${id}`)
3152
3175
  // }
3153
3176
  // }
3154
3177
  // Make the row
3155
-
3156
- row = createRow(instance, instance._getRowId(originalRow, i, parent), originalRow, i, depth); // Keep track of every row in a flat array
3178
+ const row = createRow(instance, instance._getRowId(originalRows[i], i, parent), originalRows[i], i, depth); // Keep track of every row in a flat array
3157
3179
 
3158
3180
  rowModel.flatRows.push(row); // Also keep track of every row by its ID
3159
3181
 
@@ -3164,7 +3186,7 @@ function getCoreRowModel() {
3164
3186
  if (instance.options.getSubRows) {
3165
3187
  var _row$originalSubRows;
3166
3188
 
3167
- row.originalSubRows = instance.options.getSubRows(originalRow, i); // Then recursively access them
3189
+ row.originalSubRows = instance.options.getSubRows(originalRows[i], i); // Then recursively access them
3168
3190
 
3169
3191
  if ((_row$originalSubRows = row.originalSubRows) != null && _row$originalSubRows.length) {
3170
3192
  row.subRows = accessRows(row.originalSubRows, depth + 1, row);