@economic/taco 2.46.9 → 2.47.0-server-2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (109) hide show
  1. package/dist/components/Report/Report.d.ts +1 -1
  2. package/dist/components/SearchInput2/SearchInput2.d.ts +2 -0
  3. package/dist/components/Table3/components/Row/Editing/CreateNewRow.d.ts +1 -2
  4. package/dist/components/Table3/components/Row/Editing/TemporaryRow.d.ts +1 -0
  5. package/dist/components/Table3/features/useEditingState.d.ts +11 -11
  6. package/dist/components/Table3/features/useTableEditing.d.ts +13 -13
  7. package/dist/components/Table3/util/editing.d.ts +3 -0
  8. package/dist/esm/index.css +2 -2
  9. package/dist/esm/node_modules/babel-plugin-transform-async-to-promises/helpers.mjs.js +17 -17
  10. package/dist/esm/node_modules/babel-plugin-transform-async-to-promises/helpers.mjs.js.map +1 -1
  11. package/dist/esm/packages/taco/src/charts/components/Donut/Legend.js +1 -0
  12. package/dist/esm/packages/taco/src/charts/components/Donut/Legend.js.map +1 -1
  13. package/dist/esm/packages/taco/src/charts/components/Legend.js +1 -0
  14. package/dist/esm/packages/taco/src/charts/components/Legend.js.map +1 -1
  15. package/dist/esm/packages/taco/src/components/SearchInput2/SearchInput2.js +6 -3
  16. package/dist/esm/packages/taco/src/components/SearchInput2/SearchInput2.js.map +1 -1
  17. package/dist/esm/packages/taco/src/components/Table/hooks/plugins/useRowActions.js +1 -1
  18. package/dist/esm/packages/taco/src/components/Table3/Table3.js +14 -4
  19. package/dist/esm/packages/taco/src/components/Table3/Table3.js.map +1 -1
  20. package/dist/esm/packages/taco/src/components/Table3/components/Columns/Cell/EditingControlCell.js +1 -1
  21. package/dist/esm/packages/taco/src/components/Table3/components/Columns/Cell/EditingControlCell.js.map +1 -1
  22. package/dist/esm/packages/taco/src/components/Table3/components/Editing/Alert.js +14 -9
  23. package/dist/esm/packages/taco/src/components/Table3/components/Editing/Alert.js.map +1 -1
  24. package/dist/esm/packages/taco/src/components/Table3/components/Row/Editing/CreateNewRow.js +2 -4
  25. package/dist/esm/packages/taco/src/components/Table3/components/Row/Editing/CreateNewRow.js.map +1 -1
  26. package/dist/esm/packages/taco/src/components/Table3/components/Row/Editing/TemporaryRow.js +5 -4
  27. package/dist/esm/packages/taco/src/components/Table3/components/Row/Editing/TemporaryRow.js.map +1 -1
  28. package/dist/esm/packages/taco/src/components/Table3/features/useEditingState.js +32 -51
  29. package/dist/esm/packages/taco/src/components/Table3/features/useEditingState.js.map +1 -1
  30. package/dist/esm/packages/taco/src/components/Table3/features/useTableEditing.js +5 -3
  31. package/dist/esm/packages/taco/src/components/Table3/features/useTableEditing.js.map +1 -1
  32. package/dist/esm/packages/taco/src/components/Table3/listeners/useTableEditingListener.js +15 -12
  33. package/dist/esm/packages/taco/src/components/Table3/listeners/useTableEditingListener.js.map +1 -1
  34. package/dist/esm/packages/taco/src/components/Table3/util/editing.js +9 -1
  35. package/dist/esm/packages/taco/src/components/Table3/util/editing.js.map +1 -1
  36. package/dist/esm/packages/taco/src/index.js +1 -0
  37. package/dist/esm/packages/taco/src/index.js.map +1 -1
  38. package/dist/esm/packages/taco/src/primitives/Table/Core/Table.js +2 -1
  39. package/dist/esm/packages/taco/src/primitives/Table/Core/Table.js.map +1 -1
  40. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Columns/Internal/Expansion.js +4 -0
  41. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Columns/Internal/Expansion.js.map +1 -1
  42. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Columns/Internal/Selection.js +7 -4
  43. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Columns/Internal/Selection.js.map +1 -1
  44. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Footer/Footer.js +7 -2
  45. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Footer/Footer.js.map +1 -1
  46. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Footer/Summary.js +7 -5
  47. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Footer/Summary.js.map +1 -1
  48. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Row/BuiltIns/SkeletonRow.js +24 -22
  49. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Row/BuiltIns/SkeletonRow.js.map +1 -1
  50. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Row/Row.js +41 -4
  51. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Row/Row.js.map +1 -1
  52. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Toolbar/components/Print/Print.js +3 -1
  53. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Toolbar/components/Print/Print.js.map +1 -1
  54. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Toolbar/components/Search/Search.js +26 -3
  55. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Toolbar/components/Search/Search.js.map +1 -1
  56. package/dist/esm/packages/taco/src/primitives/Table/Core/features/useTableGlobalShortcuts.js +1 -1
  57. package/dist/esm/packages/taco/src/primitives/Table/Core/features/useTableGlobalShortcuts.js.map +1 -1
  58. package/dist/esm/packages/taco/src/primitives/Table/Core/features/useTableRenderer.js +36 -9
  59. package/dist/esm/packages/taco/src/primitives/Table/Core/features/useTableRenderer.js.map +1 -1
  60. package/dist/esm/packages/taco/src/primitives/Table/Core/useTable.js +1 -1
  61. package/dist/esm/packages/taco/src/primitives/Table/Core/useTable.js.map +1 -1
  62. package/dist/esm/packages/taco/src/primitives/Table/types.js.map +1 -1
  63. package/dist/esm/packages/taco/src/primitives/Table/useTableDataLoader.js +5 -7
  64. package/dist/esm/packages/taco/src/primitives/Table/useTableDataLoader.js.map +1 -1
  65. package/dist/esm/packages/taco/src/primitives/Table/useTableDataLoader2.js +249 -0
  66. package/dist/esm/packages/taco/src/primitives/Table/useTableDataLoader2.js.map +1 -0
  67. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/features/useTableRowActive.js +1 -1
  68. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/features/useTableRowActive.js.map +1 -1
  69. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/features/useTableRowExpansion.js +2 -1
  70. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/features/useTableRowExpansion.js.map +1 -1
  71. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/features/useTableSearch.js +3 -2
  72. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/features/useTableSearch.js.map +1 -1
  73. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/features/useTableServerLoading.js +4 -2
  74. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/features/useTableServerLoading.js.map +1 -1
  75. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/listeners/useTableFilterListener.js +3 -1
  76. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/listeners/useTableFilterListener.js.map +1 -1
  77. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/listeners/useTableRowSelectionListener.js +4 -4
  78. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/listeners/useTableRowSelectionListener.js.map +1 -1
  79. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/listeners/useTableSearchListener.js +14 -13
  80. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/listeners/useTableSearchListener.js.map +1 -1
  81. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/listeners/useTableServerLoadingListener.js +7 -3
  82. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/listeners/useTableServerLoadingListener.js.map +1 -1
  83. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/useTableManager.js +4 -4
  84. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/useTableManager.js.map +1 -1
  85. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/util/columns.js +4 -1
  86. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/util/columns.js.map +1 -1
  87. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/util/presets.js +7 -1
  88. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/util/presets.js.map +1 -1
  89. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/util/setup.js +6 -0
  90. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/util/setup.js.map +1 -1
  91. package/dist/hooks/useLazyDebouncedEffect.d.ts +2 -0
  92. package/dist/index.css +2 -2
  93. package/dist/index.d.ts +1 -0
  94. package/dist/primitives/Table/Core/Table.d.ts +1 -0
  95. package/dist/primitives/Table/Core/components/Row/BuiltIns/SkeletonRow.d.ts +2 -2
  96. package/dist/primitives/Table/Core/components/Row/Row.d.ts +2 -0
  97. package/dist/primitives/Table/Core/features/useTableRenderer.d.ts +1 -1
  98. package/dist/primitives/Table/types.d.ts +11 -6
  99. package/dist/primitives/Table/useTableDataLoader2.d.ts +23 -0
  100. package/dist/primitives/Table/useTableManager/features/useTableRowExpansion.d.ts +2 -1
  101. package/dist/primitives/Table/useTableManager/features/useTableSearch.d.ts +4 -2
  102. package/dist/primitives/Table/useTableManager/features/useTableServerLoading.d.ts +3 -1
  103. package/dist/primitives/Table/useTableManager/listeners/useTableSearchListener.d.ts +1 -2
  104. package/dist/primitives/Table/useTableManager/util/columns.d.ts +2 -1
  105. package/dist/taco.cjs.development.js +607 -229
  106. package/dist/taco.cjs.development.js.map +1 -1
  107. package/dist/taco.cjs.production.min.js +1 -1
  108. package/dist/taco.cjs.production.min.js.map +1 -1
  109. package/package.json +2 -3
@@ -31,12 +31,12 @@ var reactPortal = require('@radix-ui/react-portal');
31
31
  var reactTable = require('@tanstack/react-table');
32
32
  var get = _interopDefault(require('lodash/get'));
33
33
  var reactVirtual = require('@tanstack/react-virtual');
34
- var reactIntersectionObserver = require('react-intersection-observer');
35
34
  var core = require('@dnd-kit/core');
36
35
  var modifiers = require('@dnd-kit/modifiers');
37
36
  var SortablePrimitive = require('@dnd-kit/sortable');
38
37
  var utilities = require('@dnd-kit/utilities');
39
38
  var reactTable$1 = require('react-table');
39
+ var reactIntersectionObserver = require('react-intersection-observer');
40
40
  var reactWindow = require('react-window');
41
41
  var InfiniteLoader = _interopDefault(require('react-window-infinite-loader'));
42
42
  var set = _interopDefault(require('lodash/set'));
@@ -10187,6 +10187,9 @@ function unfreezeAllExternalColumns(leftPinnedState) {
10187
10187
  function freezeUptoExternalColumn(index, columns) {
10188
10188
  return columns.slice(0, index + 1);
10189
10189
  }
10190
+ function getHiddenColumns(columnVisibility = {}) {
10191
+ return Object.keys(columnVisibility).filter(c => columnVisibility[c] === false);
10192
+ }
10190
10193
 
10191
10194
  function getSettings(table) {
10192
10195
  const meta = table.options.meta;
@@ -10468,6 +10471,12 @@ function configureReactTableOptions(options, props, localization) {
10468
10471
  var _column$columnDef$met;
10469
10472
  return ((_column$columnDef$met = column.columnDef.meta) === null || _column$columnDef$met === void 0 ? void 0 : _column$columnDef$met.enableSearch) !== false && column.getIsVisible();
10470
10473
  };
10474
+ // enter controlled search mode (controlled could be local state, but usually the server)
10475
+ if (props.onChangeSearch) {
10476
+ if (props._experimentalDataLoader2) {
10477
+ tableOptions.manualFiltering = true;
10478
+ }
10479
+ }
10471
10480
  }
10472
10481
  if (tableOptions.enableSorting) {
10473
10482
  // enter controlled sort mode (controlled could be local state, but usually the server)
@@ -10525,6 +10534,7 @@ const DEFAULT_PRESET = {
10525
10534
  enableColumnHiding: false,
10526
10535
  enableColumnResizing: false,
10527
10536
  enableRowExpansion: false,
10537
+ enableRowExpansionAll: true,
10528
10538
  enableRowSelection: false,
10529
10539
  // custom -- common between all table types
10530
10540
  enableColumnOrdering: false,
@@ -10551,6 +10561,7 @@ const presets = {
10551
10561
  enableColumnHiding: true,
10552
10562
  enableColumnResizing: true,
10553
10563
  enableRowExpansion: true,
10564
+ enableRowExpansionAll: true,
10554
10565
  enableRowSelection: true,
10555
10566
  // custom -- common between all table types
10556
10567
  enableColumnOrdering: true,
@@ -10576,6 +10587,7 @@ const presets = {
10576
10587
  enableColumnHiding: false,
10577
10588
  enableColumnResizing: false,
10578
10589
  enableRowExpansion: true,
10590
+ enableRowExpansionAll: true,
10579
10591
  enableRowSelection: true,
10580
10592
  // custom -- common between all table types
10581
10593
  enableColumnOrdering: false,
@@ -10601,6 +10613,7 @@ const presets = {
10601
10613
  enableColumnHiding: false,
10602
10614
  enableColumnResizing: false,
10603
10615
  enableRowExpansion: true,
10616
+ enableRowExpansionAll: true,
10604
10617
  enableRowSelection: false,
10605
10618
  // custom -- common between all table types
10606
10619
  enableColumnOrdering: false,
@@ -10618,7 +10631,7 @@ const presets = {
10618
10631
  }
10619
10632
  };
10620
10633
  function getTableFeaturePreset(props) {
10621
- var _props$enableRowActio, _props$enableRowClick, _props$enableRowDrag, _props$enableRowDrop, _props$enableRowGoto, _props$enableRowExpan, _props$enableRowSelec, _props$enableFilterin, _props$enableSearch, _props$enableSorting, _props$enableColumnFr, _props$enableColumnHi, _props$enableColumnRe, _props$enableColumnOr, _props$enableFontSize, _props$enableFooter, _props$enablePrinting, _props$enableRowActiv, _props$rowActions, _props$enableRowHeigh, _props$enableSaveSett;
10634
+ var _props$enableRowActio, _props$enableRowClick, _props$enableRowDrag, _props$enableRowDrop, _props$enableRowGoto, _props$enableRowExpan, _props$enableRowExpan2, _props$enableRowSelec, _props$enableFilterin, _props$enableSearch, _props$enableSorting, _props$enableColumnFr, _props$enableColumnHi, _props$enableColumnRe, _props$enableColumnOr, _props$enableFontSize, _props$enableFooter, _props$enablePrinting, _props$enableRowActiv, _props$rowActions, _props$enableRowHeigh, _props$enableSaveSett;
10622
10635
  const presetOptions = props.preset ? presets[props.preset] : DEFAULT_PRESET;
10623
10636
  const enableRowActions = (_props$enableRowActio = props.enableRowActions) !== null && _props$enableRowActio !== void 0 ? _props$enableRowActio : presetOptions.enableRowActions;
10624
10637
  const enableRowClick = (_props$enableRowClick = props.enableRowClick) !== null && _props$enableRowClick !== void 0 ? _props$enableRowClick : presetOptions.enableRowClick;
@@ -10626,6 +10639,7 @@ function getTableFeaturePreset(props) {
10626
10639
  const enableRowDrop = (_props$enableRowDrop = props.enableRowDrop) !== null && _props$enableRowDrop !== void 0 ? _props$enableRowDrop : presetOptions.enableRowDrop;
10627
10640
  const enableRowGoto = (_props$enableRowGoto = props.enableRowGoto) !== null && _props$enableRowGoto !== void 0 ? _props$enableRowGoto : presetOptions.enableRowGoto;
10628
10641
  const enableRowExpansion = (_props$enableRowExpan = props.enableRowExpansion) !== null && _props$enableRowExpan !== void 0 ? _props$enableRowExpan : presetOptions.enableRowExpansion;
10642
+ const enableRowExpansionAll = (_props$enableRowExpan2 = props.enableRowExpansionAll) !== null && _props$enableRowExpan2 !== void 0 ? _props$enableRowExpan2 : presetOptions.enableRowExpansionAll;
10629
10643
  const enableRowSelection = (_props$enableRowSelec = props.enableRowSelection) !== null && _props$enableRowSelec !== void 0 ? _props$enableRowSelec : presetOptions.enableRowSelection;
10630
10644
  return {
10631
10645
  // react-table built-in
@@ -10650,6 +10664,7 @@ function getTableFeaturePreset(props) {
10650
10664
  enableRowDrag: enableRowDrag && !!props.onRowDrag,
10651
10665
  enableRowDrop: enableRowDrop && !!props.onRowDrop,
10652
10666
  enableRowGoto: enableRowGoto && !!props.onRowGoto,
10667
+ enableRowExpansionAll: enableRowExpansion && enableRowExpansionAll && !!props.rowExpansionRenderer,
10653
10668
  enableRowHeight: (_props$enableRowHeigh = props.enableRowHeight) !== null && _props$enableRowHeigh !== void 0 ? _props$enableRowHeigh : presetOptions.enableRowHeight,
10654
10669
  enableSaveSettings: (_props$enableSaveSett = props.enableSaveSettings) !== null && _props$enableSaveSett !== void 0 ? _props$enableSaveSett : presetOptions.enableSaveSettings
10655
10670
  };
@@ -10845,7 +10860,7 @@ function useTableRowActive(isEnabled = false, initialRowActiveIndex) {
10845
10860
  return index;
10846
10861
  });
10847
10862
  }
10848
- }, [rowActiveIndex, length, isEnabled]);
10863
+ }, [rowActiveIndex, isEnabled]);
10849
10864
  return {
10850
10865
  isEnabled,
10851
10866
  rowActiveIndex,
@@ -10894,9 +10909,10 @@ function useTableRowClick(isEnabled = false, onRowClick) {
10894
10909
  };
10895
10910
  }
10896
10911
 
10897
- function useTableRowExpansion(isEnabled = false, rowExpansionRenderer) {
10912
+ function useTableRowExpansion(isEnabled = false, canExpandAll = true, rowExpansionRenderer) {
10898
10913
  return {
10899
10914
  isEnabled,
10915
+ canExpandAll,
10900
10916
  rowExpansionRenderer: isEnabled ? rowExpansionRenderer : undefined
10901
10917
  };
10902
10918
  }
@@ -10960,7 +10976,7 @@ function useTableRowSelection(isEnabled = false) {
10960
10976
  - Highlighting search results, this is custom and only uses the state part of globalFilter (to store the search query)
10961
10977
  - Filtering of results, this is essentially the built in filtering, and relies on enableGlobalFilter being on or off
10962
10978
  */
10963
- function useTableSearch(isEnabled = false, defaultEnableGlobalFilter = false) {
10979
+ function useTableSearch(isEnabled = false, onChangeSearch, defaultEnableGlobalFilter = false) {
10964
10980
  const [enableGlobalFilter, _setEnableGlobalFilter] = React__default.useState(defaultEnableGlobalFilter);
10965
10981
  function setEnableGlobalFilter(enabled, instance) {
10966
10982
  _setEnableGlobalFilter(enabled);
@@ -10985,18 +11001,19 @@ function useTableSearch(isEnabled = false, defaultEnableGlobalFilter = false) {
10985
11001
  highlightedColumnIndexes,
10986
11002
  setHighlightedColumnIndexes,
10987
11003
  currentHighlightColumnIndex,
10988
- setCurrentHighlightColumnIndex
11004
+ setCurrentHighlightColumnIndex,
11005
+ handleSearch: isEnabled && typeof onChangeSearch === 'function' ? onChangeSearch : undefined
10989
11006
  };
10990
11007
  }
10991
11008
 
10992
11009
  // A type of promise-like that resolves synchronously and supports only one observer
10993
- const _Pact = /*#__PURE__*/function () {
11010
+ var _Pact = /*#__PURE__*/function () {
10994
11011
  function _Pact() {}
10995
11012
  _Pact.prototype.then = function (onFulfilled, onRejected) {
10996
- const result = new _Pact();
10997
- const state = this.s;
11013
+ var result = new _Pact();
11014
+ var state = this.s;
10998
11015
  if (state) {
10999
- const callback = state & 1 ? onFulfilled : onRejected;
11016
+ var callback = state & 1 ? onFulfilled : onRejected;
11000
11017
  if (callback) {
11001
11018
  try {
11002
11019
  _settle(result, 1, callback(this.v));
@@ -11010,7 +11027,7 @@ const _Pact = /*#__PURE__*/function () {
11010
11027
  }
11011
11028
  this.o = function (_this) {
11012
11029
  try {
11013
- const value = _this.v;
11030
+ var value = _this.v;
11014
11031
  if (_this.s & 1) {
11015
11032
  _settle(result, 1, onFulfilled ? onFulfilled(value) : value);
11016
11033
  } else if (onRejected) {
@@ -11047,7 +11064,7 @@ function _settle(pact, state, value) {
11047
11064
  }
11048
11065
  pact.s = state;
11049
11066
  pact.v = value;
11050
- const observer = pact.o;
11067
+ var observer = pact.o;
11051
11068
  if (observer) {
11052
11069
  observer(pact);
11053
11070
  }
@@ -11087,17 +11104,13 @@ function _forTo(array, body, check) {
11087
11104
  _cycle();
11088
11105
  return pact;
11089
11106
  }
11090
- const _iteratorSymbol = /*#__PURE__*/typeof Symbol !== "undefined" ? Symbol.iterator || (Symbol.iterator = /*#__PURE__*/Symbol("Symbol.iterator")) : "@@iterator";
11107
+ var _iteratorSymbol = /*#__PURE__*/typeof Symbol !== "undefined" ? Symbol.iterator || (Symbol.iterator = /*#__PURE__*/Symbol("Symbol.iterator")) : "@@iterator";
11091
11108
 
11092
11109
  // Asynchronously iterate through an object's values
11093
11110
  // Uses for...of if the runtime supports it, otherwise iterates until length on a copy
11094
11111
  function _forOf(target, body, check) {
11095
11112
  if (typeof target[_iteratorSymbol] === "function") {
11096
- var iterator = target[_iteratorSymbol](),
11097
- step,
11098
- pact,
11099
- reject;
11100
- function _cycle(result) {
11113
+ var _cycle = function _cycle(result) {
11101
11114
  try {
11102
11115
  while (!(step = iterator.next()).done && (!check || !check())) {
11103
11116
  result = body(step.value);
@@ -11118,13 +11131,17 @@ function _forOf(target, body, check) {
11118
11131
  } catch (e) {
11119
11132
  _settle(pact || (pact = new _Pact()), 2, e);
11120
11133
  }
11121
- }
11134
+ };
11135
+ var iterator = target[_iteratorSymbol](),
11136
+ step,
11137
+ pact,
11138
+ reject;
11122
11139
  _cycle();
11123
- if (iterator.return) {
11124
- var _fixup = function (value) {
11140
+ if (iterator["return"]) {
11141
+ var _fixup = function _fixup(value) {
11125
11142
  try {
11126
11143
  if (!step.done) {
11127
- iterator.return();
11144
+ iterator["return"]();
11128
11145
  }
11129
11146
  } catch (e) {}
11130
11147
  return value;
@@ -11151,7 +11168,7 @@ function _forOf(target, body, check) {
11151
11168
  return body(values[i]);
11152
11169
  }, check);
11153
11170
  }
11154
- const _asyncIteratorSymbol = /*#__PURE__*/typeof Symbol !== "undefined" ? Symbol.asyncIterator || (Symbol.asyncIterator = /*#__PURE__*/Symbol("Symbol.asyncIterator")) : "@@asyncIterator";
11171
+ var _asyncIteratorSymbol = /*#__PURE__*/typeof Symbol !== "undefined" ? Symbol.asyncIterator || (Symbol.asyncIterator = /*#__PURE__*/Symbol("Symbol.asyncIterator")) : "@@asyncIterator";
11155
11172
 
11156
11173
  // Asynchronously call a function and send errors to recovery continuation
11157
11174
  function _catch(body, recover) {
@@ -11232,7 +11249,7 @@ function useTableDataLoader(fetchPage, fetchAll, options = {
11232
11249
  length.current = response.length;
11233
11250
  nextData = Array(length.current).fill(undefined);
11234
11251
  } else {
11235
- nextData = [...currentData];
11252
+ nextData = [].concat(currentData);
11236
11253
  }
11237
11254
  const startIndex = pageIndex * pageSize;
11238
11255
  nextData.splice(startIndex, pageSize, ...response.data);
@@ -11298,13 +11315,12 @@ function useTableDataLoader(fetchPage, fetchAll, options = {
11298
11315
  try {
11299
11316
  if (_lastUsedSearch.current) {
11300
11317
  // we're searching, which means we need to refetch all with the correct sorting applied
11301
- loadAll(sorting, _lastUsedFilters.current);
11318
+ return loadAll(sorting, _lastUsedFilters.current);
11302
11319
  } else {
11303
11320
  var _lastUsedPageIndex$cu2;
11304
11321
  // load the last page that we scrolled to
11305
- loadPage((_lastUsedPageIndex$cu2 = _lastUsedPageIndex.current) !== null && _lastUsedPageIndex$cu2 !== void 0 ? _lastUsedPageIndex$cu2 : 0, sorting, _lastUsedFilters.current);
11322
+ return loadPage((_lastUsedPageIndex$cu2 = _lastUsedPageIndex.current) !== null && _lastUsedPageIndex$cu2 !== void 0 ? _lastUsedPageIndex$cu2 : 0, sorting, _lastUsedFilters.current);
11306
11323
  }
11307
- return Promise.resolve();
11308
11324
  } catch (e) {
11309
11325
  return Promise.reject(e);
11310
11326
  }
@@ -11313,13 +11329,12 @@ function useTableDataLoader(fetchPage, fetchAll, options = {
11313
11329
  try {
11314
11330
  if (_lastUsedSearch.current) {
11315
11331
  // we're searching, which means we need to refetch all with the correct sorting applied
11316
- loadAll(_lastUsedSorting.current, filters);
11332
+ return loadAll(_lastUsedSorting.current, filters);
11317
11333
  } else {
11318
11334
  var _lastUsedPageIndex$cu3;
11319
11335
  // load the last page that we scrolled to
11320
- loadPage((_lastUsedPageIndex$cu3 = _lastUsedPageIndex.current) !== null && _lastUsedPageIndex$cu3 !== void 0 ? _lastUsedPageIndex$cu3 : 0, _lastUsedSorting.current, filters);
11336
+ return loadPage((_lastUsedPageIndex$cu3 = _lastUsedPageIndex.current) !== null && _lastUsedPageIndex$cu3 !== void 0 ? _lastUsedPageIndex$cu3 : 0, _lastUsedSorting.current, filters);
11321
11337
  }
11322
- return Promise.resolve();
11323
11338
  } catch (e) {
11324
11339
  return Promise.reject(e);
11325
11340
  }
@@ -11347,7 +11362,7 @@ function useTableDataLoader(fetchPage, fetchAll, options = {
11347
11362
  }, invalidate];
11348
11363
  }
11349
11364
 
11350
- function useTableServerLoading(loadPage, loadAll, pageSize = DEFAULT_PAGE_SIZE) {
11365
+ function useTableServerLoading(loadPage, loadAll, pages, pageSize = DEFAULT_PAGE_SIZE, _experimentalDataLoader2 = false) {
11351
11366
  const isEnabled = !!loadPage && !!loadAll;
11352
11367
  const [isReady, setReady] = React__default.useState(false);
11353
11368
  const [loadAllStatus, setLoadedStatus] = React__default.useState(exports.TableServerLoadAllState.Incomplete);
@@ -11402,13 +11417,15 @@ function useTableServerLoading(loadPage, loadAll, pageSize = DEFAULT_PAGE_SIZE)
11402
11417
  };
11403
11418
  }
11404
11419
  return {
11420
+ pages,
11405
11421
  isEnabled,
11406
11422
  isReady,
11407
11423
  loadPage: _loadPage,
11408
11424
  loadAll: _loadAll,
11409
11425
  loadAllIfNeeded: _loadAllIfNeeded,
11410
11426
  loadAllStatus,
11411
- pageSize
11427
+ pageSize,
11428
+ _experimentalDataLoader2
11412
11429
  };
11413
11430
  }
11414
11431
 
@@ -11505,7 +11522,8 @@ function useTableFilterListener(table, onFilter) {
11505
11522
  const columnFilters = table.getState().columnFilters;
11506
11523
  useLazyEffect(() => {
11507
11524
  if (table.options.enableColumnFilters && typeof onFilter === 'function') {
11508
- onFilter(columnFilters);
11525
+ const hiddenColumns = getHiddenColumns(table.getState().columnVisibility);
11526
+ onFilter(columnFilters, hiddenColumns);
11509
11527
  if (table.options.enableRowSelection) {
11510
11528
  table.resetRowSelection();
11511
11529
  }
@@ -11563,11 +11581,12 @@ function useTableRowHeightListener(table) {
11563
11581
  }
11564
11582
 
11565
11583
  function useTableRowSelectionListener(table, onRowSelect) {
11584
+ // note that the selected row model may not contain all rows in state when using server loading
11566
11585
  const rows = table.getSelectedRowModel().flatRows;
11567
- const rowSelection = React__default.useMemo(() => rows.map(row => row.original), [rows]);
11586
+ const state = table.getState().rowSelection;
11568
11587
  useLazyEffect(() => {
11569
11588
  if (table.options.enableRowSelection && typeof onRowSelect === 'function') {
11570
- onRowSelect(rowSelection);
11589
+ onRowSelect(rows.map(row => row.original), Object.keys(state));
11571
11590
  }
11572
11591
  /**
11573
11592
  * Casting to a boolean, since enableRowSelection can be a function,
@@ -11575,33 +11594,33 @@ function useTableRowSelectionListener(table, onRowSelect) {
11575
11594
  * we only need to know if selection was enabled or disabled, because enableRowSelection function
11576
11595
  * will be applied directly to particular rows.
11577
11596
  */
11578
- }, [!!table.options.enableRowSelection, JSON.stringify(rowSelection)]);
11597
+ }, [!!table.options.enableRowSelection, state]);
11579
11598
  }
11580
11599
 
11581
- function useTableSearchListener(table, onChangeSearch) {
11600
+ function useTableSearchListener(table) {
11582
11601
  const meta = table.options.meta;
11583
11602
  const localization = useLocalization();
11584
- const visibleColumns = table.getVisibleFlatColumns();
11603
+ const hiddenColumns = getHiddenColumns(table.getState().columnVisibility);
11604
+ const query = table.getState().globalFilter;
11585
11605
  // Need to re-run search when columns are getting shown/hidden.
11586
- React__default.useEffect(() => {
11587
- if (meta.search.isEnabled && visibleColumns.length > 0) {
11588
- const currentFilter = table.getState().globalFilter;
11606
+ useLazyEffect(() => {
11607
+ if (meta.search.isEnabled) {
11608
+ const currentFilter = query;
11589
11609
  requestAnimationFrame(() => {
11590
11610
  table.resetGlobalFilter();
11591
11611
  table.setGlobalFilter(currentFilter);
11592
11612
  });
11613
+ if (meta.search.handleSearch && meta.search.enableGlobalFilter && query) {
11614
+ meta.search.handleSearch(query, hiddenColumns);
11615
+ }
11593
11616
  }
11594
- }, [visibleColumns.length]);
11617
+ }, [hiddenColumns.length]);
11595
11618
  // recalculates highlighted indexes whenever something important changes
11596
- React__default.useEffect(() => {
11619
+ useLazyEffect(() => {
11597
11620
  if (meta.search.isEnabled) {
11598
- const query = table.getState().globalFilter;
11599
11621
  resetHighlightedColumnIndexes(query, table, localization);
11600
- if (typeof onChangeSearch === 'function') {
11601
- onChangeSearch(query);
11602
- }
11603
11622
  }
11604
- }, [meta.server.loadAllStatus, meta.search.isEnabled, meta.search.enableGlobalFilter, table.getRowModel().rows.length, table.getState().globalFilter, JSON.stringify(table.getState().sorting), onChangeSearch]);
11623
+ }, [meta.server.loadAllStatus, meta.search.isEnabled, meta.search.enableGlobalFilter, table.getRowModel().rows.length, query, JSON.stringify(table.getState().sorting)]);
11605
11624
  }
11606
11625
 
11607
11626
  function useTableSettingsListener(table, onChangeSettings) {
@@ -11685,12 +11704,15 @@ function useTableSortingListener(table, onSort) {
11685
11704
  }
11686
11705
 
11687
11706
  function useTableServerLoadingListener(table, loadPage) {
11688
- const sorting = table.getState().sorting;
11689
- const columnFilters = table.getState().columnFilters;
11707
+ const meta = table.options.meta;
11690
11708
  // trigger load of the first page on mount
11691
11709
  React__default.useEffect(() => {
11692
11710
  if (loadPage) {
11693
- loadPage(0, sorting, columnFilters);
11711
+ const sorting = table.getState().sorting;
11712
+ const columnFilters = table.getState().columnFilters;
11713
+ const search = meta.search.enableGlobalFilter ? table.getState().globalFilter : undefined;
11714
+ const hiddenColumns = getHiddenColumns(table.getState().columnVisibility);
11715
+ loadPage(0, sorting, columnFilters, search, hiddenColumns);
11694
11716
  }
11695
11717
  }, []);
11696
11718
  }
@@ -11737,13 +11759,13 @@ function useTableManager(props, meta, internalColumns) {
11737
11759
  const rowClick = useTableRowClick(options.enableRowClick, props.onRowClick);
11738
11760
  const rowDrag = useTableRowDrag(options.enableRowDrag && !(meta !== null && meta !== void 0 && (_meta$editing = meta.editing) !== null && _meta$editing !== void 0 && _meta$editing.isEditing), props.onRowDrag);
11739
11761
  const rowDrop = useTableRowDrop(options.enableRowDrop, props.onRowDrop);
11740
- const rowExpansion = useTableRowExpansion(options.enableRowExpansion, props.rowExpansionRenderer);
11762
+ const rowExpansion = useTableRowExpansion(options.enableRowExpansion, options.enableRowExpansionAll, props.rowExpansionRenderer);
11741
11763
  const rowGoto = useTableRowGoto(options.enableRowGoto, props.onRowGoto);
11742
11764
  const rowGroups = useTableRowGroups(props.rowActionsForGroup);
11743
11765
  const rowHeight = useTableRowHeight(options.enableRowHeight, settings.rowHeight);
11744
11766
  const rowSelection = useTableRowSelection(!!options.enableRowSelection);
11745
- const search = useTableSearch(options.enableSearch, settings.excludeUnmatchedRecordsInSearch);
11746
- const server = useTableServerLoading(props.loadPage, props.loadAll, props.pageSize);
11767
+ const search = useTableSearch(options.enableSearch, props.onChangeSearch, settings.excludeUnmatchedRecordsInSearch);
11768
+ const server = useTableServerLoading(props.loadPage, props.loadAll, props.pages, props.pageSize, props._experimentalDataLoader2);
11747
11769
  // TODO: memoise
11748
11770
  // convert jsx column components into valid table columns
11749
11771
  const {
@@ -11794,7 +11816,7 @@ function useTableManager(props, meta, internalColumns) {
11794
11816
  useTableFontSizeListener(instance);
11795
11817
  useTableRowHeightListener(instance);
11796
11818
  useTableRowSelectionListener(instance, props.onRowSelect);
11797
- useTableSearchListener(instance, props.onChangeSearch);
11819
+ useTableSearchListener(instance);
11798
11820
  useTableServerLoadingListener(instance, server.loadPage);
11799
11821
  useTableSettingsListener(instance, setSettings);
11800
11822
  useTableShortcutsListener(instance, props.shortcuts);
@@ -12020,7 +12042,7 @@ function useTableGlobalShortcuts(table, tableRef, scrollToIndex) {
12020
12042
  if (isElementInsideOverlay(trigger) && !isSiblingElementInsideSameParentOverlay(trigger, tableRef.current) || isElementInteractive(trigger) && !isElementInsideOrTriggeredFromContainer(trigger, tableRef.current)) {
12021
12043
  return;
12022
12044
  }
12023
- tableMeta.rowActive.handleKeyDown(event, rows.length, scrollToIndex);
12045
+ tableMeta.rowActive.handleKeyDown(event, tableMeta.length, scrollToIndex);
12024
12046
  tableMeta.rowSelection.handleKeyDown(event, table);
12025
12047
  if (tableMeta.rowActive.rowActiveIndex !== undefined) {
12026
12048
  var _rows$tableMeta$rowAc;
@@ -12056,57 +12078,131 @@ const ROW_HEIGHT_ESTIMATES = {
12056
12078
  'extra-tall': 57
12057
12079
  };
12058
12080
 
12081
+ const RowContext = /*#__PURE__*/React__default.createContext({
12082
+ hideInternalColumns: false,
12083
+ hideRowActions: false,
12084
+ isHovered: false,
12085
+ rowIndex: -1
12086
+ });
12087
+
12088
+ const DELAY_BEFORE_LOAD_MS = 250;
12089
+ /* anonymous functions will break the memoisation on each render, wrap handlers in callbacks */
12090
+ function Row(props) {
12091
+ const {
12092
+ renderer: RowRenderer,
12093
+ cellRenderer: CellRenderer,
12094
+ hideInternalColumns = false,
12095
+ hideRowActions = false,
12096
+ scrollDirection,
12097
+ skipPageLoading = false,
12098
+ ...displayRowProps
12099
+ } = props;
12100
+ const tableMeta = props.table.options.meta;
12101
+ const isHovered = tableMeta.rowActive.rowHoverIndex === props.index;
12102
+ // context - it must be here for cells to read it, since they render alongside the row inside DisplayRow
12103
+ const contextValue = React__default.useMemo(() => ({
12104
+ isHovered,
12105
+ rowIndex: props.index,
12106
+ hideInternalColumns,
12107
+ hideRowActions
12108
+ }), [isHovered, props.index, hideInternalColumns, hideRowActions]);
12109
+ React__default.useEffect(() => {
12110
+ let timeout;
12111
+ if (tableMeta.server.isEnabled && tableMeta.server._experimentalDataLoader2 && !skipPageLoading) {
12112
+ const pageIndex = Math.floor(props.index / tableMeta.server.pageSize) * tableMeta.server.pageSize / tableMeta.server.pageSize;
12113
+ const sorting = props.table.getState().sorting;
12114
+ const filters = props.table.getState().columnFilters;
12115
+ const search = props.table.getState().globalFilter;
12116
+ const hiddenColumns = getHiddenColumns(props.table.getState().columnVisibility);
12117
+ const pageIndexesToFetch = [];
12118
+ /*
12119
+ // if there's no direction, it means the scroll bar got dropped un unloaded pages,
12120
+ // in that case, load forward and backward pages to prevent skeletons
12121
+ if (scrollDirection === 'backward' || !scrollDirection) {
12122
+ const backIndex = pageIndex - 1;
12123
+ if (backIndex > -1) {
12124
+ pageIndexesToFetch.push(backIndex);
12125
+ }
12126
+ }
12127
+ */
12128
+ // always load the next page
12129
+ if (scrollDirection === 'forward' || !scrollDirection) {
12130
+ pageIndexesToFetch.push(pageIndex + 1);
12131
+ }
12132
+ // the virtualiser fetches a page ahead, so this won't get called in most cases
12133
+ // but it provides a fallback for some edge cases
12134
+ timeout = setTimeout(() => {
12135
+ pageIndexesToFetch.forEach(index => {
12136
+ var _tableMeta$server$loa, _tableMeta$server;
12137
+ // this can be called by every row within the current page, but loadPage returns early if a pending request exists
12138
+ (_tableMeta$server$loa = (_tableMeta$server = tableMeta.server).loadPage) === null || _tableMeta$server$loa === void 0 ? void 0 : _tableMeta$server$loa.call(_tableMeta$server, index, sorting, filters, tableMeta.search.enableGlobalFilter ? search : undefined, hiddenColumns);
12139
+ });
12140
+ }, DELAY_BEFORE_LOAD_MS);
12141
+ }
12142
+ return () => {
12143
+ clearTimeout(timeout);
12144
+ };
12145
+ }, [tableMeta.server.pages]);
12146
+ return /*#__PURE__*/React__default.createElement(RowContext.Provider, {
12147
+ value: contextValue
12148
+ }, /*#__PURE__*/React__default.createElement(RowRenderer, Object.assign({}, displayRowProps, {
12149
+ cellRenderer: CellRenderer
12150
+ })));
12151
+ }
12152
+
12153
+ const DELAY_BEFORE_LOAD_MS$1 = 150;
12059
12154
  function SkeletonRow(props) {
12060
12155
  const {
12061
12156
  index,
12062
- row,
12063
12157
  table
12064
12158
  } = props;
12065
12159
  const tableMeta = table.options.meta;
12066
12160
  if (tableMeta.server.isEnabled) {
12067
- return /*#__PURE__*/React__default.createElement(RowWithServerLoading, Object.assign({}, props, {
12068
- index: index
12069
- }));
12161
+ return /*#__PURE__*/React__default.createElement(RowWithServerLoading, Object.assign({}, props));
12070
12162
  }
12071
12163
  return /*#__PURE__*/React__default.createElement(Skeleton, {
12072
- cellsCount: row.getVisibleCells().length
12164
+ cellsCount: table.getVisibleFlatColumns().length,
12165
+ index: index
12073
12166
  });
12074
12167
  }
12075
12168
  function RowWithServerLoading(props) {
12076
12169
  var _table$getState$group, _table$getState;
12077
12170
  const {
12078
12171
  index,
12079
- row,
12080
12172
  table
12081
12173
  } = props;
12082
12174
  const tableMeta = table.options.meta;
12083
12175
  const pageIndex = Math.floor(index / tableMeta.server.pageSize) * tableMeta.server.pageSize / tableMeta.server.pageSize;
12084
- const {
12085
- ref,
12086
- inView
12087
- } = reactIntersectionObserver.useInView({
12088
- threshold: 0,
12089
- triggerOnce: true,
12090
- initialInView: pageIndex === 0
12091
- });
12092
12176
  React__default.useEffect(() => {
12093
- if (inView) {
12094
- var _tableMeta$server$loa, _tableMeta$server;
12095
- (_tableMeta$server$loa = (_tableMeta$server = tableMeta.server).loadPage) === null || _tableMeta$server$loa === void 0 ? void 0 : _tableMeta$server$loa.call(_tableMeta$server, pageIndex, table.getState().sorting, table.getState().columnFilters);
12177
+ let timeout;
12178
+ if (tableMeta.server.isEnabled) {
12179
+ const sorting = props.table.getState().sorting;
12180
+ const filters = props.table.getState().columnFilters;
12181
+ const search = props.table.getState().globalFilter;
12182
+ const hiddenColumns = getHiddenColumns(props.table.getState().columnVisibility);
12183
+ timeout = setTimeout(() => {
12184
+ var _tableMeta$server$loa, _tableMeta$server;
12185
+ (_tableMeta$server$loa = (_tableMeta$server = tableMeta.server).loadPage) === null || _tableMeta$server$loa === void 0 ? void 0 : _tableMeta$server$loa.call(_tableMeta$server, pageIndex, sorting, filters, tableMeta.search.enableGlobalFilter ? search : undefined, hiddenColumns);
12186
+ }, DELAY_BEFORE_LOAD_MS$1);
12096
12187
  }
12097
- }, [inView]);
12188
+ return () => {
12189
+ clearTimeout(timeout);
12190
+ };
12191
+ }, []);
12098
12192
  const groupedCellCount = (_table$getState$group = (_table$getState = table.getState()) === null || _table$getState === void 0 ? void 0 : _table$getState.grouping.length) !== null && _table$getState$group !== void 0 ? _table$getState$group : 0;
12099
- const ungroupedCellCount = row.getVisibleCells().length - groupedCellCount;
12193
+ const ungroupedCellCount = table.getVisibleFlatColumns().length - groupedCellCount;
12100
12194
  return /*#__PURE__*/React__default.createElement(Skeleton, {
12101
12195
  cellsCount: ungroupedCellCount,
12102
- ref: ref
12196
+ index: index
12103
12197
  });
12104
12198
  }
12105
12199
  const Skeleton = /*#__PURE__*/React__default.forwardRef(function Skeleton(props, ref) {
12106
12200
  const {
12107
- cellsCount
12201
+ cellsCount,
12202
+ index
12108
12203
  } = props;
12109
12204
  return /*#__PURE__*/React__default.createElement("tr", {
12205
+ "data-row-index": index,
12110
12206
  ref: ref
12111
12207
  }, Array(cellsCount).fill(null).map((_, index) => (/*#__PURE__*/React__default.createElement("td", {
12112
12208
  key: index
@@ -12115,41 +12211,6 @@ const Skeleton = /*#__PURE__*/React__default.forwardRef(function Skeleton(props,
12115
12211
  })))));
12116
12212
  });
12117
12213
 
12118
- const RowContext = /*#__PURE__*/React__default.createContext({
12119
- hideInternalColumns: false,
12120
- hideRowActions: false,
12121
- isHovered: false,
12122
- rowIndex: -1
12123
- });
12124
-
12125
- /* anonymous functions will break the memoisation on each render, wrap handlers in callbacks */
12126
- function Row(props) {
12127
- const {
12128
- renderer: RowRenderer,
12129
- cellRenderer: CellRenderer,
12130
- hideInternalColumns = false,
12131
- hideRowActions = false,
12132
- ...displayRowProps
12133
- } = props;
12134
- const tableMeta = props.table.options.meta;
12135
- const isHovered = tableMeta.rowActive.rowHoverIndex === props.index;
12136
- // context - it must be here for cells to read it, since they render alongside the row inside DisplayRow
12137
- const contextValue = React__default.useMemo(() => ({
12138
- isHovered,
12139
- rowIndex: props.index,
12140
- hideInternalColumns,
12141
- hideRowActions
12142
- }), [isHovered, props.index, hideInternalColumns, hideRowActions]);
12143
- if (props.row.original === undefined) {
12144
- return /*#__PURE__*/React__default.createElement(SkeletonRow, Object.assign({}, props));
12145
- }
12146
- return /*#__PURE__*/React__default.createElement(RowContext.Provider, {
12147
- value: contextValue
12148
- }, /*#__PURE__*/React__default.createElement(RowRenderer, Object.assign({}, displayRowProps, {
12149
- cellRenderer: CellRenderer
12150
- })));
12151
- }
12152
-
12153
12214
  // scroll padding end is designed to always show half of the next row
12154
12215
  function getScrollPaddingEndOffset(table) {
12155
12216
  const tableMeta = table.options.meta;
@@ -12174,7 +12235,7 @@ function getPaddingEndOffset(table, options) {
12174
12235
  const bottomRows = (_table$getBottomRows = table.getBottomRows()) !== null && _table$getBottomRows !== void 0 ? _table$getBottomRows : [];
12175
12236
  return ROW_HEIGHT_ESTIMATES.medium * ((_options$virtualiserP = options === null || options === void 0 ? void 0 : options.virtualiserPaddingEndOffset) !== null && _options$virtualiserP !== void 0 ? _options$virtualiserP : 1) * bottomRows.length;
12176
12237
  }
12177
- function useTableRenderer(renderers, table, tableRef, defaultRowActiveIndex, options) {
12238
+ function useTableRenderer(renderers, table, tableRef, length, defaultRowActiveIndex, options) {
12178
12239
  var _table$getState$group, _table$getCenterRows, _virtualItems$padding, _virtualItems$padding2, _virtualItems$padding3, _ref, _virtualItems;
12179
12240
  const tableMeta = table.options.meta;
12180
12241
  const isTableRowGrouped = !!((_table$getState$group = table.getState().grouping) !== null && _table$getState$group !== void 0 && _table$getState$group.length);
@@ -12188,11 +12249,12 @@ function useTableRenderer(renderers, table, tableRef, defaultRowActiveIndex, opt
12188
12249
  const rangeExtractor = useRowGroupVirtualisation(table);
12189
12250
  // account for thead and tfoot in the scroll area - both are always medium row height
12190
12251
  const scrollPaddingStart = ROW_HEIGHT_ESTIMATES.medium;
12252
+ const count = tableMeta.server.isEnabled && tableMeta.server._experimentalDataLoader2 ? length : rows.length;
12191
12253
  const virtualiser = reactVirtual.useVirtualizer({
12192
- count: rows.length,
12254
+ count,
12193
12255
  estimateSize,
12194
12256
  getScrollElement: () => tableRef.current,
12195
- overscan: tableMeta.printing.isPrinting ? rows.length : undefined,
12257
+ overscan: tableMeta.printing.isPrinting ? count : undefined,
12196
12258
  rangeExtractor,
12197
12259
  // correctly sets the scroll padding offset, e.g. when keyboard navigating rows in the list
12198
12260
  scrollPaddingStart,
@@ -12212,16 +12274,16 @@ function useTableRenderer(renderers, table, tableRef, defaultRowActiveIndex, opt
12212
12274
  if (tableRef.current) {
12213
12275
  if (index === 0) {
12214
12276
  virtualiser.scrollToOffset(0, notSmooth);
12215
- } else if (index === rows.length - 1) {
12277
+ } else if (index === count - 1) {
12216
12278
  // sometimes the last row doesn't fully show, so we just force scroll to the bottom
12217
12279
  tableRef.current.scrollTop = tableRef.current.scrollHeight;
12218
12280
  } else {
12219
12281
  virtualiser.scrollToIndex(index, options);
12220
12282
  }
12221
12283
  }
12222
- }, [virtualItems.length, tableRef.current, totalSize, rows.length]);
12284
+ }, [virtualItems.length, tableRef.current, totalSize, count]);
12223
12285
  // use row 1 not 0, because 0 might be sticky in grouped tables and it's start value will always be 0
12224
- const paddingStartIndex = isTableRowGrouped && rows.length > 1 ? 1 : 0;
12286
+ const paddingStartIndex = isTableRowGrouped && count > 1 ? 1 : 0;
12225
12287
  const startValue = isTableRowGrouped ? ((_virtualItems$padding = virtualItems[paddingStartIndex]) === null || _virtualItems$padding === void 0 ? void 0 : _virtualItems$padding.start) - ((_virtualItems$padding2 = virtualItems[paddingStartIndex]) === null || _virtualItems$padding2 === void 0 ? void 0 : _virtualItems$padding2.size) : (_virtualItems$padding3 = virtualItems[paddingStartIndex]) === null || _virtualItems$padding3 === void 0 ? void 0 : _virtualItems$padding3.start;
12226
12288
  // styling for offsetting rows - this "is" the virtualisation
12227
12289
  const [paddingTop, paddingBottom] = virtualItems.length > 0 ? [Math.max(0, startValue !== null && startValue !== void 0 ? startValue : 0), Math.max(0, (_ref = totalSize - ((_virtualItems = virtualItems[virtualItems.length - 1]) === null || _virtualItems === void 0 ? void 0 : _virtualItems.end)) !== null && _ref !== void 0 ? _ref : 0)] : [0, 0];
@@ -12238,7 +12300,7 @@ function useTableRenderer(renderers, table, tableRef, defaultRowActiveIndex, opt
12238
12300
  let style = {};
12239
12301
  let content = null;
12240
12302
  // bottom rows aren't virtualised (they're sticky) but we need to set the height
12241
- if (rows.length || table.getBottomRows().length) {
12303
+ if (count || table.getBottomRows().length) {
12242
12304
  style = {
12243
12305
  height: totalSize,
12244
12306
  paddingBottom,
@@ -12246,18 +12308,43 @@ function useTableRenderer(renderers, table, tableRef, defaultRowActiveIndex, opt
12246
12308
  };
12247
12309
  }
12248
12310
  // only render non sticky rows
12249
- if (rows.length) {
12311
+ if (count) {
12250
12312
  content = virtualItems.map(virtualRow => {
12313
+ var _row, _virtualiser$scrollDi2;
12251
12314
  // there appears to be a react-virtual bug where it inserts a single `undefined` item at the end of the row, which crashes here
12252
12315
  if (!virtualRow) {
12253
12316
  return null;
12254
12317
  }
12255
- const row = rows[virtualRow.index];
12318
+ let row;
12319
+ if (tableMeta.server.isEnabled && tableMeta.server._experimentalDataLoader2) {
12320
+ var _tableMeta$server$pag, _tableMeta$server$pag2;
12321
+ const currentPageIndex = Math.floor(virtualRow.index / tableMeta.server.pageSize) * tableMeta.server.pageSize / tableMeta.server.pageSize;
12322
+ const pagePosition = (_tableMeta$server$pag = (_tableMeta$server$pag2 = tableMeta.server.pages) === null || _tableMeta$server$pag2 === void 0 ? void 0 : _tableMeta$server$pag2.indexOf(currentPageIndex)) !== null && _tableMeta$server$pag !== void 0 ? _tableMeta$server$pag : -1;
12323
+ if (pagePosition > -1) {
12324
+ // "flatten" row indexes down into the dataloader2 dataset size
12325
+ // for example, with a page size of 100...
12326
+ // row index 14267 is actually one of index 67, 167, 267 etc within the dataset (depending on number of pages stored)
12327
+ const fakeIndex = pagePosition * tableMeta.server.pageSize + virtualRow.index % tableMeta.server.pageSize;
12328
+ row = rows[fakeIndex];
12329
+ }
12330
+ } else {
12331
+ row = rows[virtualRow.index];
12332
+ }
12333
+ if (!((_row = row) !== null && _row !== void 0 && _row.original)) {
12334
+ var _virtualiser$scrollDi;
12335
+ return /*#__PURE__*/React__default.createElement(SkeletonRow, {
12336
+ key: virtualRow.index,
12337
+ index: virtualRow.index,
12338
+ scrollDirection: (_virtualiser$scrollDi = virtualiser.scrollDirection) !== null && _virtualiser$scrollDi !== void 0 ? _virtualiser$scrollDi : undefined,
12339
+ table: table
12340
+ });
12341
+ }
12256
12342
  const measureRow = createRowMeasurer(virtualiser.resizeItem, virtualRow);
12257
12343
  return /*#__PURE__*/React__default.createElement(Row, {
12258
12344
  key: row.id,
12259
12345
  row: row,
12260
12346
  index: virtualRow.index,
12347
+ scrollDirection: (_virtualiser$scrollDi2 = virtualiser.scrollDirection) !== null && _virtualiser$scrollDi2 !== void 0 ? _virtualiser$scrollDi2 : undefined,
12261
12348
  table: table,
12262
12349
  measureRow: measureRow,
12263
12350
  renderer: renderers.row,
@@ -12479,6 +12566,10 @@ function Header$3(context) {
12479
12566
  const {
12480
12567
  table
12481
12568
  } = context;
12569
+ const tableMeta = table.options.meta;
12570
+ if (!tableMeta.rowExpansion.canExpandAll) {
12571
+ return null;
12572
+ }
12482
12573
  const isSomeRowsExpanded = table.getIsSomeRowsExpanded();
12483
12574
  const handleClick = event => {
12484
12575
  event.stopPropagation();
@@ -12560,8 +12651,9 @@ function Header$4(context) {
12560
12651
  }
12561
12652
  const _temp = function () {
12562
12653
  if (tableMeta.server.loadAllIfNeeded) {
12654
+ const hiddenColumns = getHiddenColumns(table.getState().columnVisibility);
12563
12655
  // don't pass the search query because we need all data - not filtered data
12564
- return Promise.resolve(tableMeta.server.loadAllIfNeeded(table.getState().sorting, table.getState().columnFilters)).then(function () {});
12656
+ return Promise.resolve(tableMeta.server.loadAllIfNeeded(table.getState().sorting, table.getState().columnFilters, tableMeta.search.enableGlobalFilter ? table.getState().globalFilter : undefined, hiddenColumns)).then(function () {});
12565
12657
  }
12566
12658
  }();
12567
12659
  // load all data if that is possible
@@ -12620,6 +12712,7 @@ function Cell$3(context) {
12620
12712
  if (event.shiftKey) {
12621
12713
  var _tableMeta$rowSelecti;
12622
12714
  function _temp4() {
12715
+ const selectedRows = table.getRowModel().rows.slice(fromIndex, toIndex + 1);
12623
12716
  table.setRowSelection(currentRowSelection => ({
12624
12717
  ...currentRowSelection,
12625
12718
  ...selectedRows.filter(row => row.getCanSelect()).reduce((state, row) => ({
@@ -12629,11 +12722,11 @@ function Cell$3(context) {
12629
12722
  }));
12630
12723
  }
12631
12724
  const [fromIndex, toIndex] = toggleBetween((_tableMeta$rowSelecti = tableMeta.rowSelection.lastSelectedRowIndex.current) !== null && _tableMeta$rowSelecti !== void 0 ? _tableMeta$rowSelecti : 0, rowIndex);
12632
- const selectedRows = table.getRowModel().rows.slice(fromIndex, toIndex + 1);
12633
12725
  const _temp3 = function () {
12634
- if (tableMeta.server.loadAllIfNeeded && selectedRows.some(row => row.original === undefined)) {
12726
+ if (tableMeta.server.loadAllIfNeeded) {
12727
+ const hiddenColumns = getHiddenColumns(table.getState().columnVisibility);
12635
12728
  // don't pass the search query because we need all data - not filtered data
12636
- return Promise.resolve(tableMeta.server.loadAllIfNeeded(table.getState().sorting, table.getState().columnFilters)).then(function () {});
12729
+ return Promise.resolve(tableMeta.server.loadAllIfNeeded(table.getState().sorting, table.getState().columnFilters, tableMeta.search.enableGlobalFilter ? table.getState().globalFilter : undefined, hiddenColumns)).then(function () {});
12637
12730
  }
12638
12731
  }();
12639
12732
  return _temp3 && _temp3.then ? _temp3.then(_temp4) : _temp4(_temp3);
@@ -12691,7 +12784,7 @@ function useTable(props, externalRef, renderers, meta, options) {
12691
12784
  // configure the table
12692
12785
  const manager = useTableManager(props, meta, INTERNAL_RENDERERS);
12693
12786
  // configure the virtualised renderer
12694
- const renderer = useTableRenderer(renderers, manager.instance, ref, props.defaultRowActiveIndex, options);
12787
+ const renderer = useTableRenderer(renderers, manager.instance, ref, manager.meta.length, props.defaultRowActiveIndex, options);
12695
12788
  // configure dynamic styling
12696
12789
  const {
12697
12790
  style,
@@ -13759,21 +13852,23 @@ function Summary(props) {
13759
13852
  locale,
13760
13853
  texts
13761
13854
  } = useLocalization();
13762
- const length = table.options.meta.length;
13855
+ const tableMeta = table.options.meta;
13856
+ const length = tableMeta.length;
13763
13857
  const currentLength = table.getRowModel().rows.length;
13764
13858
  let label;
13765
13859
  let count;
13766
13860
  // row selection
13767
- const rowsSelectedLength = table.getSelectedRowModel().rows.length;
13861
+ // use table state and not the selected row model because of the way server loading works
13862
+ const rowsSelectedLength = Object.keys(table.getState().rowSelection).length;
13768
13863
  if (rowsSelectedLength > 0) {
13769
13864
  label = texts.table.footer.summary.selected;
13770
13865
  count = /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement("strong", null, new Intl.NumberFormat(locale).format(rowsSelectedLength)), "\u00A0", texts.table.footer.summary.count, "\u00A0", /*#__PURE__*/React__default.createElement("strong", null, new Intl.NumberFormat(locale).format(length)));
13771
- } else if ((_table$getState$colum = table.getState().columnFilters) !== null && _table$getState$colum !== void 0 && _table$getState$colum.length ||
13866
+ } else if (!tableMeta.server.isEnabled && ((_table$getState$colum = table.getState().columnFilters) !== null && _table$getState$colum !== void 0 && _table$getState$colum.length ||
13772
13867
  // filtered data
13773
- !!table.getState().globalFilter && table.options.enableGlobalFilter // search with hide enabled
13868
+ !!table.getState().globalFilter && table.options.enableGlobalFilter) // search with hide enabled
13774
13869
  ) {
13775
13870
  label = texts.table.footer.summary.records;
13776
- count = /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement("strong", null, currentLength), "\u00A0", texts.table.footer.summary.count, "\u00A0", /*#__PURE__*/React__default.createElement("strong", null, new Intl.NumberFormat(locale).format(length)));
13871
+ count = /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement("strong", null, new Intl.NumberFormat(locale).format(currentLength)), "\u00A0", texts.table.footer.summary.count, "\u00A0", /*#__PURE__*/React__default.createElement("strong", null, new Intl.NumberFormat(locale).format(length)));
13777
13872
  } else {
13778
13873
  label = texts.table.footer.summary.records;
13779
13874
  count = /*#__PURE__*/React__default.createElement("strong", null, new Intl.NumberFormat(locale).format(length));
@@ -13785,8 +13880,13 @@ function Summary(props) {
13785
13880
  }
13786
13881
 
13787
13882
  function Foot(props) {
13788
- const nonGroupedHeaders = props.table.getFooterGroups()[0].headers.filter(header => !header.column.getIsGrouped());
13789
- return /*#__PURE__*/React__default.createElement("tfoot", null, /*#__PURE__*/React__default.createElement("tr", null, nonGroupedHeaders.map((header, index) => (/*#__PURE__*/React__default.createElement(Footer$3, {
13883
+ const {
13884
+ children,
13885
+ table,
13886
+ ...attributes
13887
+ } = props;
13888
+ const nonGroupedHeaders = table.getFooterGroups()[0].headers.filter(header => !header.column.getIsGrouped());
13889
+ return /*#__PURE__*/React__default.createElement("tfoot", Object.assign({}, attributes), children, /*#__PURE__*/React__default.createElement("tr", null, nonGroupedHeaders.map((header, index) => (/*#__PURE__*/React__default.createElement(Footer$3, {
13790
13890
  key: header.id,
13791
13891
  header: header,
13792
13892
  index: index
@@ -13868,6 +13968,7 @@ const SearchInput2 = /*#__PURE__*/React__default.forwardRef(function SearchInput
13868
13968
  onClickFindPrevious: handleClickFindPrevious,
13869
13969
  settingsContent,
13870
13970
  shortcut,
13971
+ showTotal = true,
13871
13972
  value,
13872
13973
  ...attributes
13873
13974
  } = props;
@@ -13946,10 +14047,12 @@ const SearchInput2 = /*#__PURE__*/React__default.forwardRef(function SearchInput
13946
14047
  }
13947
14048
  if (hasFind && isActive) {
13948
14049
  postfix = /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement("span", {
13949
- className: "text-grey-700 flex h-4 items-center border-r border-black/[0.25] pr-2"
13950
- }, loading ? /*#__PURE__*/React__default.createElement(Spinner, {
14050
+ className: "text-grey-700 flex h-4 items-center"
14051
+ }, loading ? (/*#__PURE__*/React__default.createElement(Spinner, {
13951
14052
  className: "h-4 w-4"
13952
- }) : `${findCurrent !== null && findCurrent !== void 0 ? findCurrent : 0}/${findTotal !== null && findTotal !== void 0 ? findTotal : 0}`), findCurrent ? (/*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(IconButton, {
14053
+ })) : showTotal ? (/*#__PURE__*/React__default.createElement("span", {
14054
+ className: "border-r border-black/[0.25] pr-2"
14055
+ }, `${findCurrent !== null && findCurrent !== void 0 ? findCurrent : 0}/${findTotal !== null && findTotal !== void 0 ? findTotal : 0}`)) : null), findCurrent ? (/*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(IconButton, {
13953
14056
  "aria-label": texts.searchInput.findPrevious,
13954
14057
  className: "scale-75 !bg-transparent hover:!bg-black/[0.08] [&>svg]:scale-125",
13955
14058
  icon: "chevron-up",
@@ -14053,6 +14156,7 @@ function Search$1(props) {
14053
14156
  const scrollTo = rowIndex => scrollToIndex(rowIndex, {
14054
14157
  align: 'center'
14055
14158
  });
14159
+ const hiddenColumns = getHiddenColumns(table.getState().columnVisibility);
14056
14160
  React__default.useEffect(() => {
14057
14161
  if (tableMeta.search.highlightedColumnIndexes.length) {
14058
14162
  scrollTo(tableMeta.search.highlightedColumnIndexes[0][0]);
@@ -14061,9 +14165,11 @@ function Search$1(props) {
14061
14165
  const handleFocus = function () {
14062
14166
  try {
14063
14167
  const _temp = function () {
14064
- if (tableMeta.server.loadAllIfNeeded) {
14168
+ if (tableMeta.server.loadAllIfNeeded && !tableMeta.server._experimentalDataLoader2) {
14065
14169
  // don't pass the search query because we need all data - not filtered data
14066
- return Promise.resolve(tableMeta.server.loadAllIfNeeded(table.getState().sorting, table.getState().columnFilters)).then(function () {});
14170
+ return Promise.resolve(tableMeta.server.loadAllIfNeeded(table.getState().sorting, table.getState().columnFilters,
14171
+ // the old data loader doesn't have server side search
14172
+ undefined, hiddenColumns)).then(function () {});
14067
14173
  }
14068
14174
  }();
14069
14175
  // load all data if that is possible
@@ -14072,8 +14178,20 @@ function Search$1(props) {
14072
14178
  return Promise.reject(e);
14073
14179
  }
14074
14180
  };
14181
+ const [loading, setLoading] = React__default.useState(false);
14182
+ const searchTimeoutRef = React__default.useRef();
14075
14183
  const handleChange = query => {
14076
14184
  table.setGlobalFilter(String(query !== null && query !== void 0 ? query : ''));
14185
+ if (tableMeta.search.enableGlobalFilter && tableMeta.search.handleSearch) {
14186
+ clearTimeout(searchTimeoutRef.current);
14187
+ searchTimeoutRef.current = setTimeout(() => {
14188
+ var _tableMeta$search$han, _tableMeta$search;
14189
+ setLoading(true);
14190
+ (_tableMeta$search$han = (_tableMeta$search = tableMeta.search).handleSearch) === null || _tableMeta$search$han === void 0 ? void 0 : _tableMeta$search$han.call(_tableMeta$search, query, hiddenColumns).then(() => {
14191
+ setLoading(false);
14192
+ });
14193
+ }, 150);
14194
+ }
14077
14195
  };
14078
14196
  const handleToggleExcludeUnmatchedResults = enabled => {
14079
14197
  tableMeta.search.setEnableGlobalFilter(enabled, table);
@@ -14081,6 +14199,12 @@ function Search$1(props) {
14081
14199
  var _ref$current;
14082
14200
  return (_ref$current = ref.current) === null || _ref$current === void 0 ? void 0 : _ref$current.focus();
14083
14201
  });
14202
+ if (tableMeta.search.handleSearch) {
14203
+ setLoading(true);
14204
+ tableMeta.search.handleSearch(enabled ? query : undefined, hiddenColumns).then(() => {
14205
+ setLoading(false);
14206
+ });
14207
+ }
14084
14208
  };
14085
14209
  const handleNextResult = () => {
14086
14210
  if (!tableMeta.search.highlightedColumnIndexes.length) {
@@ -14124,7 +14248,7 @@ function Search$1(props) {
14124
14248
  return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(SearchInput2, {
14125
14249
  findCurrent: tableMeta.search.currentHighlightColumnIndex !== undefined ? tableMeta.search.currentHighlightColumnIndex + 1 : null,
14126
14250
  findTotal: (_tableMeta$search$hig = (_tableMeta$search$hig2 = tableMeta.search.highlightedColumnIndexes) === null || _tableMeta$search$hig2 === void 0 ? void 0 : _tableMeta$search$hig2.length) !== null && _tableMeta$search$hig !== void 0 ? _tableMeta$search$hig : null,
14127
- loading: tableMeta.server.loadAllStatus === exports.TableServerLoadAllState.Loading,
14251
+ loading: tableMeta.server._experimentalDataLoader2 ? loading : tableMeta.server.loadAllStatus === exports.TableServerLoadAllState.Loading,
14128
14252
  name: "table-search",
14129
14253
  onClickFindPrevious: handlePreviousResult,
14130
14254
  onClickFindNext: handleNextResult,
@@ -14139,6 +14263,7 @@ function Search$1(props) {
14139
14263
  meta: true,
14140
14264
  shift: false
14141
14265
  },
14266
+ showTotal: !tableMeta.server._experimentalDataLoader2,
14142
14267
  value: query
14143
14268
  }));
14144
14269
  }
@@ -16184,8 +16309,9 @@ function Print$1(props) {
16184
16309
  const toastRef = toast.loading(texts.table.print.loading);
16185
16310
  const _temp2 = function () {
16186
16311
  if (tableMeta.server.isEnabled && tableMeta.server.loadAllIfNeeded) {
16312
+ const hiddenColumns = getHiddenColumns(table.getState().columnVisibility);
16187
16313
  const _temp = _catch(function () {
16188
- return Promise.resolve(tableMeta.server.loadAllIfNeeded(table.getState().sorting, table.getState().columnFilters)).then(function () {});
16314
+ return Promise.resolve(tableMeta.server.loadAllIfNeeded(table.getState().sorting, table.getState().columnFilters, tableMeta.search.enableGlobalFilter ? table.getState().globalFilter : undefined, hiddenColumns)).then(function () {});
16189
16315
  }, function (error) {
16190
16316
  const errorMessage = `${texts.table.print.error}: ${error}`;
16191
16317
  console.error(errorMessage);
@@ -16859,6 +16985,7 @@ function TableGrid(props) {
16859
16985
  var _table$state$grouping;
16860
16986
  const {
16861
16987
  enableHorizontalArrowKeyNavigation,
16988
+ footerRows,
16862
16989
  table,
16863
16990
  ...attributes
16864
16991
  } = props;
@@ -16901,7 +17028,7 @@ function TableGrid(props) {
16901
17028
  } : table.renderer.style
16902
17029
  }, table.renderer.rows, props.children), table.meta.footer.isEnabled ? /*#__PURE__*/React__default.createElement(Foot, {
16903
17030
  table: table.instance
16904
- }) : null)))));
17031
+ }, footerRows) : null)))));
16905
17032
  }
16906
17033
 
16907
17034
  function Column$1(_) {
@@ -18493,6 +18620,14 @@ const shortcut = {
18493
18620
  meta: true,
18494
18621
  shift: false
18495
18622
  };
18623
+ function isTableScrolled(ref) {
18624
+ if (ref.current) {
18625
+ var _ref$current, _ref$current$querySel, _ref$current2, _ref$current2$querySe;
18626
+ const height = parseFloat(((_ref$current = ref.current) === null || _ref$current === void 0 ? void 0 : (_ref$current$querySel = _ref$current.querySelector('tbody')) === null || _ref$current$querySel === void 0 ? void 0 : _ref$current$querySel.style.height) || '0') + parseFloat(((_ref$current2 = ref.current) === null || _ref$current2 === void 0 ? void 0 : (_ref$current2$querySe = _ref$current2.querySelector('tbody')) === null || _ref$current2$querySe === void 0 ? void 0 : _ref$current2$querySe.style.paddingBottom) || '0');
18627
+ return height > ref.current.scrollHeight;
18628
+ }
18629
+ return false;
18630
+ }
18496
18631
 
18497
18632
  function useTableEditingListener(table, tableRef, scrollToIndex) {
18498
18633
  const tableMeta = table.options.meta;
@@ -18543,18 +18678,21 @@ function useTableEditingListener(table, tableRef, scrollToIndex) {
18543
18678
  document.addEventListener('click', onClickOutside);
18544
18679
  return () => document.removeEventListener('click', onClickOutside);
18545
18680
  }, [tableMeta.editing.isEditing, tableMeta.editing.saveChanges]);
18546
- const rows = table.getRowModel().rows;
18547
- // make sure pending changes are removed for rows that no longer exist
18548
- useLazyEffect(() => {
18549
- const pendingChanges = tableMeta.editing.getErrorsShownInAlert();
18550
- pendingChanges.forEach(pendingChange => {
18551
- try {
18552
- table.getRow(pendingChange.rowId);
18553
- } catch {
18554
- tableMeta.editing.discardChanges(pendingChange.rowId, table);
18555
- }
18556
- });
18557
- }, [rows.length]);
18681
+ /*
18682
+ const rows = table.getRowModel().rows;
18683
+ // make sure pending changes are removed for rows that no longer exist
18684
+ useLazyEffect(() => {
18685
+ const pendingChanges = tableMeta.editing.getErrorsShownInAlert();
18686
+ pendingChanges.forEach(pendingChange => {
18687
+ try {
18688
+ table.getRow(pendingChange.rowId);
18689
+ } catch {
18690
+ // TODO: this has the potential to remove changes for "unloaded" rows in server loading
18691
+ //tableMeta.editing.discardChanges(pendingChange.rowId, table);
18692
+ }
18693
+ });
18694
+ }, [rows.length]);
18695
+ */
18558
18696
  // shortcuts
18559
18697
  useGlobalKeyDown(tableMeta.editing.isEnabled ? shortcut : undefined, event => {
18560
18698
  event.preventDefault();
@@ -18582,6 +18720,7 @@ function reducer$2(state, action) {
18582
18720
  {
18583
18721
  const {
18584
18722
  columnId,
18723
+ index,
18585
18724
  row,
18586
18725
  value
18587
18726
  } = payload;
@@ -18591,7 +18730,8 @@ function reducer$2(state, action) {
18591
18730
  ...state.changes,
18592
18731
  rows: setWith(state.changes.rows, `${rowId}.${columnId}`, value, Object),
18593
18732
  originals: setWith(state.changes.originals, rowId, row, Object)
18594
- }
18733
+ },
18734
+ indexes: setWith(state.indexes, rowId, index, Object)
18595
18735
  };
18596
18736
  }
18597
18737
  case 'removeCellValue':
@@ -18625,6 +18765,7 @@ function reducer$2(state, action) {
18625
18765
  {
18626
18766
  const {
18627
18767
  cellErrors,
18768
+ index,
18628
18769
  moveReasons,
18629
18770
  original,
18630
18771
  value
@@ -18639,7 +18780,8 @@ function reducer$2(state, action) {
18639
18780
  moveReasons: setWith(state.changes.moveReasons, rowId, moveReasons !== null && moveReasons !== void 0 ? moveReasons : state.changes.moveReasons[rowId], Object),
18640
18781
  // status can be undefined, so don't use ??
18641
18782
  status: setWith(state.changes.status, rowId, undefined, Object)
18642
- }
18783
+ },
18784
+ indexes: setWith(state.indexes, rowId, index, Object)
18643
18785
  };
18644
18786
  }
18645
18787
  case 'removeRow':
@@ -18657,6 +18799,7 @@ function reducer$2(state, action) {
18657
18799
  originals: omit(state.changes.originals, rowId),
18658
18800
  status: omit(state.changes.status, rowId)
18659
18801
  },
18802
+ indexes: omit(state.indexes, rowId),
18660
18803
  temporaryRows: state.temporaryRows.filter(row => row[rowIdentityAccessor] !== rowId)
18661
18804
  };
18662
18805
  }
@@ -18689,6 +18832,7 @@ function reducer$2(state, action) {
18689
18832
  case 'insertTemporaryRow':
18690
18833
  {
18691
18834
  const {
18835
+ index,
18692
18836
  value
18693
18837
  } = payload;
18694
18838
  return {
@@ -18698,7 +18842,8 @@ function reducer$2(state, action) {
18698
18842
  ...state.changes,
18699
18843
  rows: setWith(state.changes.rows, rowId, value, Object),
18700
18844
  originals: setWith(state.changes.originals, rowId, value, Object)
18701
- }
18845
+ },
18846
+ indexes: setWith(state.indexes, rowId, index, Object)
18702
18847
  };
18703
18848
  }
18704
18849
  default:
@@ -18718,10 +18863,10 @@ function usePendingChangesState(handleSave, handleChange, rowIdentityAccessor, v
18718
18863
  [rowId]: state.changes.rows[rowId]
18719
18864
  } : state.changes.rows;
18720
18865
  let completed = true;
18721
- const _temp9 = _forOf(Object.keys(changes), function (rowId) {
18866
+ const _temp7 = _forOf(Object.keys(changes), function (rowId) {
18722
18867
  const status = getRowStatus(rowId);
18723
18868
  return _catch(function () {
18724
- function _temp8(_result) {
18869
+ function _temp6(_result) {
18725
18870
  return _exit ? _result : Promise.resolve(handleSave(changeSet)).then(function () {
18726
18871
  // cleanup changes, we don't need them after saving
18727
18872
  discardChanges(rowId, table);
@@ -18746,7 +18891,7 @@ function usePendingChangesState(handleSave, handleChange, rowIdentityAccessor, v
18746
18891
  delete changeSet[rowIdentityAccessor];
18747
18892
  }
18748
18893
  // re-run validation, maybe a cell is already invalid but has never been blurred
18749
- const _temp7 = function () {
18894
+ const _temp5 = function () {
18750
18895
  if (validator) {
18751
18896
  return Promise.resolve(validator(changeSet)).then(function (errors) {
18752
18897
  if (errors && Object.keys(errors).length) {
@@ -18755,7 +18900,7 @@ function usePendingChangesState(handleSave, handleChange, rowIdentityAccessor, v
18755
18900
  });
18756
18901
  }
18757
18902
  }();
18758
- return _temp7 && _temp7.then ? _temp7.then(_temp8) : _temp8(_temp7); // send new data to the server
18903
+ return _temp5 && _temp5.then ? _temp5.then(_temp6) : _temp6(_temp5); // send new data to the server
18759
18904
  }, function (error) {
18760
18905
  var _error$response;
18761
18906
  if (error instanceof ReferenceError || error instanceof TypeError || (error === null || error === void 0 ? void 0 : (_error$response = error.response) === null || _error$response === void 0 ? void 0 : _error$response.status) >= 500) {
@@ -18795,18 +18940,18 @@ function usePendingChangesState(handleSave, handleChange, rowIdentityAccessor, v
18795
18940
  }, function () {
18796
18941
  return _exit;
18797
18942
  });
18798
- return Promise.resolve(_temp9 && _temp9.then ? _temp9.then(function (_result3) {
18943
+ return Promise.resolve(_temp7 && _temp7.then ? _temp7.then(function (_result3) {
18799
18944
  return _exit ? _result3 : completed;
18800
- }) : _exit ? _temp9 : completed);
18945
+ }) : _exit ? _temp7 : completed);
18801
18946
  } catch (e) {
18802
18947
  return Promise.reject(e);
18803
18948
  }
18804
18949
  };
18805
18950
  const onCellChanged = function (cell, rowIndex, shouldRunUpdaters = true) {
18806
18951
  try {
18807
- function _temp6() {
18952
+ function _temp4() {
18808
18953
  var _state$changes$errors11;
18809
- function _temp4() {
18954
+ function _temp2() {
18810
18955
  // only set errors and move reasons for the cells we're currently acting on
18811
18956
  // why? because the UX is not good if we set them for cells the user hasn't touched yet
18812
18957
  const cellsToActOn = [cell.column.id, ...Object.keys(updatesForOtherCells)];
@@ -18837,6 +18982,7 @@ function usePendingChangesState(handleSave, handleChange, rowIdentityAccessor, v
18837
18982
  rowId: cell.row.id,
18838
18983
  payload: {
18839
18984
  cellErrors: nextCellErrors,
18985
+ index: rowIndex,
18840
18986
  moveReasons: nextMoveReasons,
18841
18987
  value: nextChanges
18842
18988
  }
@@ -18855,19 +19001,19 @@ function usePendingChangesState(handleSave, handleChange, rowIdentityAccessor, v
18855
19001
  };
18856
19002
  // run validation
18857
19003
  let validationErrors = {};
18858
- const _temp3 = function () {
19004
+ const _temp = function () {
18859
19005
  if (validator) {
18860
19006
  const nextRowValue = {
18861
19007
  ...state.changes.originals[cell.row.id],
18862
19008
  ...changes,
18863
19009
  ...updatesForOtherCells
18864
19010
  };
18865
- return Promise.resolve(validator(nextRowValue)).then(function (_validator2) {
18866
- validationErrors = _validator2 !== null && _validator2 !== void 0 ? _validator2 : {};
19011
+ return Promise.resolve(validator(nextRowValue)).then(function (_validator) {
19012
+ validationErrors = _validator !== null && _validator !== void 0 ? _validator : {};
18867
19013
  });
18868
19014
  }
18869
19015
  }();
18870
- return _temp3 && _temp3.then ? _temp3.then(_temp4) : _temp4(_temp3);
19016
+ return _temp && _temp.then ? _temp.then(_temp2) : _temp2(_temp);
18871
19017
  }
18872
19018
  const changes = state.changes.rows[cell.row.id];
18873
19019
  if (!changes) {
@@ -18875,7 +19021,7 @@ function usePendingChangesState(handleSave, handleChange, rowIdentityAccessor, v
18875
19021
  }
18876
19022
  let updatesForOtherCells = {};
18877
19023
  // run the updater handler if there is one, to see if there are any other cells to update
18878
- const _temp5 = function () {
19024
+ const _temp3 = function () {
18879
19025
  if (typeof handleChange === 'function' && shouldRunUpdaters) {
18880
19026
  const previousRowValue = {
18881
19027
  ...state.changes.originals[cell.row.id]
@@ -18889,42 +19035,11 @@ function usePendingChangesState(handleSave, handleChange, rowIdentityAccessor, v
18889
19035
  });
18890
19036
  }
18891
19037
  }();
18892
- return Promise.resolve(_temp5 && _temp5.then ? _temp5.then(_temp6) : _temp6(_temp5));
19038
+ return Promise.resolve(_temp3 && _temp3.then ? _temp3.then(_temp4) : _temp4(_temp3));
18893
19039
  } catch (e) {
18894
19040
  return Promise.reject(e);
18895
19041
  }
18896
19042
  }; // general
18897
- // rows
18898
- const setRowValue = function (rowId, original, value) {
18899
- try {
18900
- function _temp2() {
18901
- dispatch({
18902
- type: 'updateRow',
18903
- rowId,
18904
- payload: {
18905
- cellErrors,
18906
- original,
18907
- value
18908
- }
18909
- });
18910
- }
18911
- let cellErrors;
18912
- const _temp = function () {
18913
- if (validator) {
18914
- const row = {
18915
- ...original,
18916
- ...value
18917
- };
18918
- return Promise.resolve(validator(row)).then(function (_validator) {
18919
- cellErrors = _validator !== null && _validator !== void 0 ? _validator : {};
18920
- });
18921
- }
18922
- }();
18923
- return Promise.resolve(_temp && _temp.then ? _temp.then(_temp2) : _temp2(_temp));
18924
- } catch (e) {
18925
- return Promise.reject(e);
18926
- }
18927
- };
18928
19043
  const localization = useLocalization();
18929
19044
  const [state, dispatch] = React__default.useReducer(reducer$2, {
18930
19045
  changes: {
@@ -18934,8 +19049,10 @@ function usePendingChangesState(handleSave, handleChange, rowIdentityAccessor, v
18934
19049
  originals: {},
18935
19050
  status: {}
18936
19051
  },
19052
+ indexes: {},
18937
19053
  temporaryRows: []
18938
19054
  });
19055
+ // rows
18939
19056
  function getRowValue(rowId) {
18940
19057
  var _state$changes$rows$r, _state$changes$rows;
18941
19058
  return (_state$changes$rows$r = (_state$changes$rows = state.changes.rows) === null || _state$changes$rows === void 0 ? void 0 : _state$changes$rows[rowId]) !== null && _state$changes$rows$r !== void 0 ? _state$changes$rows$r : undefined;
@@ -18973,7 +19090,7 @@ function usePendingChangesState(handleSave, handleChange, rowIdentityAccessor, v
18973
19090
  }
18974
19091
  });
18975
19092
  }
18976
- function insertTemporaryRow(data) {
19093
+ function insertTemporaryRow(data, rowIndex) {
18977
19094
  const newRowId = `${TEMPORARY_ROW_ID_PREFIX}${uuid.v4()}`;
18978
19095
  const value = {
18979
19096
  ...data,
@@ -18983,13 +19100,14 @@ function usePendingChangesState(handleSave, handleChange, rowIdentityAccessor, v
18983
19100
  type: 'insertTemporaryRow',
18984
19101
  rowId: newRowId,
18985
19102
  payload: {
19103
+ index: rowIndex,
18986
19104
  value
18987
19105
  }
18988
19106
  });
18989
19107
  return newRowId;
18990
19108
  }
18991
19109
  // cells
18992
- function setCellValue(cell, value) {
19110
+ function setCellValue(cell, rowIndex, value) {
18993
19111
  const rowId = cell.row.id;
18994
19112
  const columnId = cell.column.id;
18995
19113
  // update if the change is different to the original value
@@ -18999,6 +19117,7 @@ function usePendingChangesState(handleSave, handleChange, rowIdentityAccessor, v
18999
19117
  rowId,
19000
19118
  payload: {
19001
19119
  columnId,
19120
+ index: rowIndex,
19002
19121
  row: cell.row.original,
19003
19122
  value
19004
19123
  }
@@ -19031,6 +19150,7 @@ function usePendingChangesState(handleSave, handleChange, rowIdentityAccessor, v
19031
19150
  }
19032
19151
  return rowsWithErrors.filter(hasRowErrorsShownInAlert).map(rowId => ({
19033
19152
  rowId,
19153
+ index: state.indexes[rowId],
19034
19154
  changes: state.changes.rows[rowId],
19035
19155
  errors: state.changes.errors[rowId]
19036
19156
  }));
@@ -19054,7 +19174,6 @@ function usePendingChangesState(handleSave, handleChange, rowIdentityAccessor, v
19054
19174
  }
19055
19175
  return {
19056
19176
  // row
19057
- setRowValue,
19058
19177
  getRowValue,
19059
19178
  getRowMoveReason,
19060
19179
  hasRowErrors,
@@ -19093,11 +19212,11 @@ function useTableEditing(isEnabled = false, handleSave, handleChange, handleCrea
19093
19212
  const changeset = row !== null && row !== void 0 ? row : handleCreate();
19094
19213
  try {
19095
19214
  if (changeset) {
19096
- const rowId = pendingChangesFns.insertTemporaryRow(changeset);
19097
- table.getRow(rowId).pin('bottom');
19098
19215
  // set the active row to the new row before toggling editing on
19099
19216
  const temporaryRows = tableMeta.editing.temporaryRows;
19100
19217
  const nextRowIndex = temporaryRows.length ? tableMeta.length + 1 : tableMeta.length;
19218
+ const rowId = pendingChangesFns.insertTemporaryRow(changeset, nextRowIndex);
19219
+ table.getRow(rowId).pin('bottom');
19101
19220
  tableMeta.rowActive.setRowActiveIndex(nextRowIndex);
19102
19221
  toggleEditing(true, table, scrollToIndex);
19103
19222
  setLastFocusedCellIndex(undefined);
@@ -19135,7 +19254,9 @@ function useTableEditing(isEnabled = false, handleSave, handleChange, handleCrea
19135
19254
  tableMeta.rowActive.setRowActiveIndex(index);
19136
19255
  }
19137
19256
  setEditing(enabled);
19138
- if (!isTemporaryRow((_table$getRowModel$ro = table.getRowModel().rows[index]) === null || _table$getRowModel$ro === void 0 ? void 0 : _table$getRowModel$ro.id)) {
19257
+ const row = (_table$getRowModel$ro = table.getRowModel().rows[index]) === null || _table$getRowModel$ro === void 0 ? void 0 : _table$getRowModel$ro.id;
19258
+ if (row && !isTemporaryRow(row)) {
19259
+ console.log('hmm');
19139
19260
  scrollToIndex(index);
19140
19261
  }
19141
19262
  }
@@ -19406,7 +19527,7 @@ function EditingControlCell(props) {
19406
19527
  }, [cellRef.current]);
19407
19528
  const handleChange = nextValue => {
19408
19529
  if (nextValue !== value) {
19409
- tableMeta.editing.setCellValue(cell, nextValue);
19530
+ tableMeta.editing.setCellValue(cell, rowIndex, nextValue);
19410
19531
  if (hasNonTextControl) {
19411
19532
  tableMeta.editing.onCellChanged(cell, rowIndex);
19412
19533
  }
@@ -19917,20 +20038,21 @@ function Alert$1(props) {
19917
20038
  const visibleColumns = table.getVisibleFlatColumns().map(c => c.id);
19918
20039
  const rowIdentityColumn = tableMeta.rowIdentityAccessor && visibleColumns.includes(String(tableMeta.rowIdentityAccessor)) ? table.getColumn(String(tableMeta.rowIdentityAccessor)) : undefined;
19919
20040
  pendingChangesWithErrors.forEach((pendingChangeWithError, index) => {
20041
+ var _row;
19920
20042
  // if appropriate, concatenate the item with the text "and"
19921
20043
  if (pendingChangesWithErrors.length > 1 && index === pendingChangesWithErrors.length - 1) {
19922
20044
  // Add space before and after `messageAnd` text
19923
20045
  links.push(` ${validationTexts.alert.messageAnd} `);
19924
20046
  }
19925
- const rowIndex = table.getRowModel().rows.findIndex(row => row.id === pendingChangeWithError.rowId);
19926
20047
  const handleClick = () => {
19927
20048
  // if row is visible
19928
- if (rowIndex > -1) {
19929
- scrollToRow(rowIndex);
20049
+ if (pendingChangeWithError.index > -1) {
20050
+ scrollToRow(pendingChangeWithError.index);
20051
+ tableMeta.rowActive.setRowActiveIndex(pendingChangeWithError.index);
19930
20052
  }
19931
20053
  // if row is filtered out
19932
20054
  else {
19933
- setShowFilterResetDialog(pendingChangeWithError.rowId);
20055
+ setShowFilterResetDialog(pendingChangeWithError.index);
19934
20056
  }
19935
20057
  };
19936
20058
  let tooltip;
@@ -19942,7 +20064,12 @@ function Alert$1(props) {
19942
20064
  const columnName = (_table$getAllColumns$ = table.getAllColumns().find(column => column.id === firstCellErrorColumnId)) === null || _table$getAllColumns$ === void 0 ? void 0 : (_table$getAllColumns$2 = _table$getAllColumns$.columnDef.meta) === null || _table$getAllColumns$2 === void 0 ? void 0 : _table$getAllColumns$2.header;
19943
20065
  tooltip = `${columnName}: ${pendingChangeWithError.errors.cells[firstCellErrorColumnId]}`;
19944
20066
  }
19945
- const row = table.getRow(pendingChangeWithError.rowId).original;
20067
+ let row;
20068
+ try {
20069
+ row = table.getRow(pendingChangeWithError.rowId).original;
20070
+ } catch {
20071
+ // because of server loading, some rows may not be accessible
20072
+ }
19946
20073
  links.push(/*#__PURE__*/React__default.createElement(Tooltip, {
19947
20074
  key: pendingChangeWithError.rowId,
19948
20075
  title: tooltip
@@ -19950,7 +20077,7 @@ function Alert$1(props) {
19950
20077
  className: "text-blue",
19951
20078
  onClick: handleClick,
19952
20079
  role: "button"
19953
- }, rowIdentityColumn ? row[rowIdentityColumn.id] : rowIndex + 1)));
20080
+ }, rowIdentityColumn ? (_row = row) === null || _row === void 0 ? void 0 : _row[rowIdentityColumn.id] : pendingChangeWithError.index + 1)));
19954
20081
  // if appropriate, concatenate the item with the text ","
19955
20082
  if (pendingChangesWithErrors.length > 2 && index < pendingChangesWithErrors.length - 2) {
19956
20083
  links.push(', ');
@@ -19971,9 +20098,8 @@ function Alert$1(props) {
19971
20098
  table.resetGlobalFilter();
19972
20099
  table.resetColumnFilters();
19973
20100
  requestAnimationFrame(() => {
19974
- const rowIndex = table.getRowModel().rows.findIndex(row => row.id === showFilterResetDialog);
19975
- if (rowIndex > -1) {
19976
- scrollToRow(rowIndex);
20101
+ if (showFilterResetDialog && showFilterResetDialog > -1) {
20102
+ scrollToRow(showFilterResetDialog);
19977
20103
  }
19978
20104
  setShowFilterResetDialog(false);
19979
20105
  });
@@ -20037,10 +20163,10 @@ function CreateNewRow(props) {
20037
20163
  var _temporaryRows$0$tabl, _temporaryRows$, _table$getState$colum;
20038
20164
  const {
20039
20165
  buttonRef,
20166
+ isScrolled,
20040
20167
  scrollToIndex,
20041
20168
  table,
20042
- tableMeta,
20043
- tableRef
20169
+ tableMeta
20044
20170
  } = props;
20045
20171
  const {
20046
20172
  texts
@@ -20073,11 +20199,9 @@ function CreateNewRow(props) {
20073
20199
  keys: shortcut
20074
20200
  });
20075
20201
  }
20076
- const isScrolled = tableRef.current ? tableRef.current.scrollHeight > tableRef.current.clientHeight : false;
20077
20202
  const className = cn('group/row border-grey-300 !sticky z-[21]', {
20078
20203
  'bottom-10': tableMeta.footer.isEnabled,
20079
20204
  'bottom-0': !tableMeta.footer.isEnabled,
20080
- 'border-t-2': isScrolled,
20081
20205
  'border-b': !isScrolled
20082
20206
  });
20083
20207
  return /*#__PURE__*/React__default.createElement("tr", {
@@ -20102,6 +20226,7 @@ function CreateNewRow(props) {
20102
20226
  function TemporaryRow(props) {
20103
20227
  const {
20104
20228
  createRowButtonRef,
20229
+ isScrolled,
20105
20230
  table,
20106
20231
  tableMeta,
20107
20232
  tableRef
@@ -20164,10 +20289,9 @@ function TemporaryRow(props) {
20164
20289
  }
20165
20290
  }
20166
20291
  };
20167
- const isScrolled = tableRef.current ? tableRef.current.scrollHeight > tableRef.current.clientHeight : false;
20168
20292
  const className = cn('group/row border-grey-300 !sticky z-[22]', {
20169
- 'bottom-[calc(5rem_+_3px)] data-[row-editing-move]:bottom-[calc(5rem_+_2px)]': tableMeta.footer.isEnabled,
20170
- 'bottom-[calc(2.5rem_+_3px)] data-[row-editing-move]:bottom-[calc(2.5rem_+_2px)]': !tableMeta.footer.isEnabled,
20293
+ 'bottom-[calc(5rem_+_2px)] data-[row-editing-move]:bottom-[calc(5rem_+_2px)]': tableMeta.footer.isEnabled,
20294
+ 'bottom-[calc(2.5rem_+_2px)] data-[row-editing-move]:bottom-[calc(2.5rem_+_2px)]': !tableMeta.footer.isEnabled,
20171
20295
  'border-t-2 shadow-[0px_-5px_20px_0px_rgba(0,0,0,0.1)] [&>td]:!border-b-0': isScrolled
20172
20296
  });
20173
20297
  return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, table.getBottomRows().map(row => (/*#__PURE__*/React__default.createElement(Row, {
@@ -20182,7 +20306,8 @@ function TemporaryRow(props) {
20182
20306
  onKeyDown: handleKeyDown,
20183
20307
  onKeyDownCapture: handleKeyDownCapture,
20184
20308
  hideInternalColumns: true,
20185
- hideRowActions: !tableMeta.editing.isEditing
20309
+ hideRowActions: !tableMeta.editing.isEditing,
20310
+ skipPageLoading: true
20186
20311
  }))));
20187
20312
  }
20188
20313
 
@@ -20203,6 +20328,7 @@ const BaseTable3 = /*#__PURE__*/fixedForwardRef(function BaseTable3(props, ref)
20203
20328
  };
20204
20329
  const hasAlertErrors = table3.meta.editing.getErrorsShownInAlert().length;
20205
20330
  const hasCreateWorkflow = table3.meta.editing.isEnabled && props.onEditingCreate;
20331
+ const isScrolled = isTableScrolled(table3.ref);
20206
20332
  return /*#__PURE__*/React__default.createElement(Table, null, /*#__PURE__*/React__default.createElement(Table.Toolbar, {
20207
20333
  table: table3
20208
20334
  }, table3.meta.editing.isEnabled ? (/*#__PURE__*/React__default.createElement(Editing, {
@@ -20215,19 +20341,27 @@ const BaseTable3 = /*#__PURE__*/fixedForwardRef(function BaseTable3(props, ref)
20215
20341
  tableRef: table3.ref
20216
20342
  })) : null, /*#__PURE__*/React__default.createElement(Table.Grid, Object.assign({}, gridAttributes, {
20217
20343
  "data-taco": "table3",
20344
+ footerRows: hasCreateWorkflow && isScrolled ? (/*#__PURE__*/React__default.createElement(CreateNewRow, {
20345
+ buttonRef: table3.meta.editing.createRowButtonRef,
20346
+ isScrolled: isScrolled,
20347
+ scrollToIndex: table3.renderer.scrollToIndex,
20348
+ table: table3.instance,
20349
+ tableMeta: table3.meta
20350
+ })) : undefined,
20218
20351
  table: table3
20219
20352
  }), hasCreateWorkflow ? (/*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(TemporaryRow, {
20220
20353
  createRowButtonRef: table3.meta.editing.createRowButtonRef,
20354
+ isScrolled: isScrolled,
20221
20355
  table: table3.instance,
20222
20356
  tableMeta: table3.meta,
20223
20357
  tableRef: table3.ref
20224
- }), /*#__PURE__*/React__default.createElement(CreateNewRow, {
20358
+ }), !isScrolled ? (/*#__PURE__*/React__default.createElement(CreateNewRow, {
20225
20359
  buttonRef: table3.meta.editing.createRowButtonRef,
20360
+ isScrolled: isScrolled,
20226
20361
  scrollToIndex: table3.renderer.scrollToIndex,
20227
20362
  table: table3.instance,
20228
- tableMeta: table3.meta,
20229
- tableRef: table3.ref
20230
- }))) : null));
20363
+ tableMeta: table3.meta
20364
+ })) : null)) : null));
20231
20365
  });
20232
20366
  const Table3 = /*#__PURE__*/fixedForwardRef(function Table3(props, ref) {
20233
20367
  const stringifiedChildren = String(props.children);
@@ -21964,6 +22098,249 @@ Navigation2.Link = Link$3;
21964
22098
  Navigation2.Section = Section;
21965
22099
  Navigation2.Content = Content$a;
21966
22100
 
22101
+ const DATASET_SIZE_MULTIPLIER = 15;
22102
+ function useTableDataLoader2(fetchPage, fetchAll, options = {
22103
+ pageSize: DEFAULT_PAGE_SIZE
22104
+ }) {
22105
+ const loadPage = function (pageIndex, sorting, filters, search, hiddenColumns, reset = false) {
22106
+ try {
22107
+ if (_hasFetchedAll.current) {
22108
+ return Promise.resolve();
22109
+ }
22110
+ // if page is already loading, abort, otherwise mark it as loading
22111
+ if (_pendingPageRequests.current[pageIndex]) {
22112
+ return Promise.resolve();
22113
+ } else {
22114
+ _pendingPageRequests.current[pageIndex] = true;
22115
+ }
22116
+ // if the page is already loaded and has actual rows, abort
22117
+ if (data.pages.includes(pageIndex)) {
22118
+ const position = data.pages.indexOf(pageIndex);
22119
+ if (data.rows[position * pageSize] !== undefined) {
22120
+ return Promise.resolve();
22121
+ }
22122
+ }
22123
+ // set the sorting so we can track if it changed between loads
22124
+ _lastUsedSorting.current = sorting;
22125
+ // set the filters so we can track if it changed between loads
22126
+ _lastUsedFilters.current = filters;
22127
+ const direction = getDirection2(pageIndex, _lastFetchedPage.current);
22128
+ const _temp2 = _finallyRethrows(function () {
22129
+ return _catch(function () {
22130
+ return Promise.resolve(fetchPage(pageIndex, pageSize, sorting, filters, search, hiddenColumns)).then(function (response) {
22131
+ length.current = response.length;
22132
+ // update state, here we do some "magic" to support "load in place"
22133
+ setData(currentData => {
22134
+ const nextPages = getPages(pageIndex, _lastFetchedPage.current, reset ? [] : currentData.pages, direction);
22135
+ let nextRows = currentData.rows;
22136
+ if (reset || !direction) {
22137
+ const index = nextPages.indexOf(pageIndex);
22138
+ const startIndex = (index > -1 ? index : 0) * pageSize;
22139
+ if (reset) {
22140
+ nextRows = [].concat(response.data);
22141
+ } else if (startIndex > 0 || pageIndex === 0) {
22142
+ nextRows = Array(startIndex).fill(undefined).concat(response.data);
22143
+ } else if (startIndex === 0) {
22144
+ nextRows = response.data.concat(currentData.rows.slice(pageSize));
22145
+ }
22146
+ } else if (direction === 'forward') {
22147
+ // if the new data will exceed the dataset size, then chop off the start or end
22148
+ // this keeps the stored dataset to our preferred size
22149
+ if (currentData.rows.length >= DATASET_SIZE) {
22150
+ nextRows = currentData.rows.slice(DEFAULT_PAGE_SIZE).concat(response.data);
22151
+ } else {
22152
+ nextRows = currentData.rows.concat(response.data);
22153
+ }
22154
+ } else if (direction === 'backward') {
22155
+ if (currentData.rows.length >= DATASET_SIZE) {
22156
+ nextRows = response.data.concat(currentData.rows.slice(0, -1 * pageSize));
22157
+ } else {
22158
+ nextRows = currentData.rows.concat(response.data);
22159
+ }
22160
+ }
22161
+ return {
22162
+ rows: nextRows,
22163
+ pages: nextPages
22164
+ };
22165
+ });
22166
+ });
22167
+ }, function () {});
22168
+ }, function (_wasThrown2, _result2) {
22169
+ _hasFetchedAll.current = false;
22170
+ // reset pending requests
22171
+ delete _pendingPageRequests.current[pageIndex];
22172
+ // update the last loaded page
22173
+ _lastFetchedPage.current = {
22174
+ index: pageIndex,
22175
+ direction
22176
+ };
22177
+ if (_wasThrown2) throw _result2;
22178
+ return _result2;
22179
+ });
22180
+ return Promise.resolve(_temp2 && _temp2.then ? _temp2.then(function () {}) : void 0);
22181
+ } catch (e) {
22182
+ return Promise.reject(e);
22183
+ }
22184
+ };
22185
+ const {
22186
+ pageSize
22187
+ } = options;
22188
+ const DATASET_SIZE = DATASET_SIZE_MULTIPLIER * pageSize;
22189
+ // track the data length, we don't know it until the first request
22190
+ const length = React__default.useRef(0);
22191
+ // data will be filled after the first request
22192
+ const [data, setData] = React__default.useState({
22193
+ rows: [],
22194
+ pages: []
22195
+ });
22196
+ // track which pages have been loaded to dedupe requests
22197
+ const _pendingPageRequests = React__default.useRef({});
22198
+ const _lastUsedSorting = React__default.useRef([]);
22199
+ const _lastUsedFilters = React__default.useRef([]);
22200
+ const _lastUsedSearch = React__default.useRef();
22201
+ const _lastUsedHiddenColumns = React__default.useRef([]);
22202
+ const _lastFetchedPage = React__default.useRef({
22203
+ index: undefined,
22204
+ direction: undefined
22205
+ });
22206
+ const _hasFetchedAll = React__default.useRef(false);
22207
+ const loadAll = function (sorting, filters, search, hiddenColumns) {
22208
+ try {
22209
+ _hasFetchedAll.current = true;
22210
+ // set the sorting so we can track if it changed between loads
22211
+ _lastUsedSorting.current = sorting;
22212
+ // set the filters so we can track if it changed between loads
22213
+ _lastUsedFilters.current = filters;
22214
+ const _temp = _finallyRethrows(function () {
22215
+ return _catch(function () {
22216
+ return Promise.resolve(fetchAll(sorting, filters, search, hiddenColumns)).then(function (response) {
22217
+ length.current = response.length;
22218
+ setData({
22219
+ rows: response.data,
22220
+ pages: Array.from(Array(response.length / pageSize).keys())
22221
+ });
22222
+ });
22223
+ }, function () {});
22224
+ }, function (_wasThrown, _result) {
22225
+ // reset pending requests
22226
+ _pendingPageRequests.current = {};
22227
+ if (_wasThrown) throw _result;
22228
+ return _result;
22229
+ });
22230
+ return Promise.resolve(_temp && _temp.then ? _temp.then(function () {}) : void 0);
22231
+ } catch (e) {
22232
+ return Promise.reject(e);
22233
+ }
22234
+ };
22235
+ const invalidate = function () {
22236
+ try {
22237
+ // reset stuff
22238
+ _pendingPageRequests.current = {};
22239
+ _hasFetchedAll.current = false;
22240
+ // load the last page that we scrolled to
22241
+ return loadPage(getCurrentPage(data.pages, _lastFetchedPage.current), _lastUsedSorting.current, _lastUsedFilters.current, _lastUsedSearch.current, _lastUsedHiddenColumns.current, true);
22242
+ } catch (e) {
22243
+ return Promise.reject(e);
22244
+ }
22245
+ };
22246
+ // search works client side - it fetches all then works client side - so these handlers are a little "weird"
22247
+ // if a search is currently "active", we need to re load all because
22248
+ const handleSort = function (sorting) {
22249
+ try {
22250
+ _lastUsedSorting.current = sorting;
22251
+ // reset stuff
22252
+ _pendingPageRequests.current = {};
22253
+ _hasFetchedAll.current = false;
22254
+ return loadPage(getCurrentPage(data.pages, _lastFetchedPage.current), sorting, _lastUsedFilters.current, _lastUsedSearch.current, _lastUsedHiddenColumns.current, true);
22255
+ } catch (e) {
22256
+ return Promise.reject(e);
22257
+ }
22258
+ };
22259
+ const handleFilter = function (filters, hiddenColumns) {
22260
+ try {
22261
+ _lastUsedFilters.current = filters;
22262
+ _lastUsedHiddenColumns.current = hiddenColumns;
22263
+ // reset stuff
22264
+ _pendingPageRequests.current = {};
22265
+ _hasFetchedAll.current = false;
22266
+ return loadPage(getCurrentPage(data.pages, _lastFetchedPage.current), _lastUsedSorting.current, filters, _lastUsedSearch.current, hiddenColumns, true);
22267
+ } catch (e) {
22268
+ return Promise.reject(e);
22269
+ }
22270
+ };
22271
+ const handleSearch = function (search, hiddenColumns) {
22272
+ try {
22273
+ _lastUsedSearch.current = search;
22274
+ _lastUsedHiddenColumns.current = hiddenColumns;
22275
+ // reset stuff
22276
+ _pendingPageRequests.current = {};
22277
+ _hasFetchedAll.current = false;
22278
+ return loadPage(getCurrentPage(data.pages, _lastFetchedPage.current), _lastUsedSorting.current, _lastUsedFilters.current, search, hiddenColumns, true);
22279
+ } catch (e) {
22280
+ return Promise.reject(e);
22281
+ }
22282
+ };
22283
+ return [{
22284
+ data: data.rows,
22285
+ pages: data.pages,
22286
+ length: length.current,
22287
+ loadAll,
22288
+ loadPage,
22289
+ onChangeFilter: handleFilter,
22290
+ onChangeSearch: handleSearch,
22291
+ onChangeSort: handleSort,
22292
+ pageSize,
22293
+ _experimentalDataLoader2: true
22294
+ }, invalidate];
22295
+ }
22296
+ function getCurrentPage(currentPages, lastFetchedPage) {
22297
+ if (currentPages.length <= 2) {
22298
+ var _currentPages$;
22299
+ return (_currentPages$ = currentPages[0]) !== null && _currentPages$ !== void 0 ? _currentPages$ : 0;
22300
+ }
22301
+ const middle = Math.floor(DATASET_SIZE_MULTIPLIER / 2);
22302
+ if (lastFetchedPage.index) {
22303
+ if (!lastFetchedPage.direction) {
22304
+ return lastFetchedPage.index;
22305
+ }
22306
+ return lastFetchedPage.direction === 'forward' ? lastFetchedPage.index + middle : lastFetchedPage.index - middle;
22307
+ }
22308
+ return 0;
22309
+ }
22310
+ function getDirection2(pageIndex, lastUsedPage) {
22311
+ if (lastUsedPage.index === undefined) {
22312
+ return undefined;
22313
+ }
22314
+ if (pageIndex > lastUsedPage.index) {
22315
+ if (lastUsedPage.index + 1 === pageIndex || lastUsedPage.index + DATASET_SIZE_MULTIPLIER === pageIndex) {
22316
+ return 'forward';
22317
+ }
22318
+ } else if (pageIndex < lastUsedPage.index) {
22319
+ if (lastUsedPage.index - 1 === pageIndex || lastUsedPage.index - DATASET_SIZE_MULTIPLIER === pageIndex) {
22320
+ return 'backward';
22321
+ }
22322
+ }
22323
+ return undefined;
22324
+ }
22325
+ function getPages(pageIndex, lastUsedPage, currentPages, direction) {
22326
+ if (currentPages.length && (pageIndex === lastUsedPage.index || currentPages.includes(pageIndex))) {
22327
+ return currentPages;
22328
+ }
22329
+ if (direction === 'forward') {
22330
+ const nextPages = currentPages.length === DATASET_SIZE_MULTIPLIER ? currentPages.slice(1) : currentPages;
22331
+ return nextPages.concat(pageIndex);
22332
+ }
22333
+ if (direction === 'backward') {
22334
+ const nextPages = currentPages.length === DATASET_SIZE_MULTIPLIER ? currentPages.slice(0, -1) : currentPages;
22335
+ return [pageIndex].concat(nextPages);
22336
+ }
22337
+ if (pageIndex === 0) {
22338
+ return [0];
22339
+ }
22340
+ // don't go forward, the current page will trigger load of the next page
22341
+ return [pageIndex - 1, pageIndex];
22342
+ }
22343
+
21967
22344
  const useBoundaryOverflowDetection = (ref, dependencies = []) => {
21968
22345
  const [boundaryIndex, setBoundaryIndex] = React__default.useState();
21969
22346
  const dimensions = useBoundingClientRectListener(ref, dependencies);
@@ -22103,6 +22480,7 @@ exports.useOnClickOutside = useOnClickOutside;
22103
22480
  exports.usePagination = usePagination;
22104
22481
  exports.useRadioGroup = useRadioGroup;
22105
22482
  exports.useTableDataLoader = useTableDataLoader;
22483
+ exports.useTableDataLoader2 = useTableDataLoader2;
22106
22484
  exports.useTableRowCreation = useTableRowCreation;
22107
22485
  exports.useToast = useToast;
22108
22486
  //# sourceMappingURL=taco.cjs.development.js.map