@economic/taco 2.46.9 → 2.47.0-server-2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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