mui-universal-table 2.1.0 → 2.1.1

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.
package/dist/index.cjs CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var React = require('react');
5
+ var React$1 = require('react');
6
6
  var PropTypes = require('prop-types');
7
7
  var Paper = require('@mui/material/Paper');
8
8
  var material = require('@mui/material');
@@ -300,14 +300,14 @@ function stableSort(array, comparator, headers, orderBy) {
300
300
  }
301
301
 
302
302
  function useSearchableRows(data, headers, async) {
303
- var _React$useState = React.useState(""),
303
+ var _React$useState = React$1.useState(""),
304
304
  _React$useState2 = _slicedToArray(_React$useState, 2),
305
305
  searchTerm = _React$useState2[0],
306
306
  setSearchTerm = _React$useState2[1];
307
- var filterOptions = React.useMemo(function () {
307
+ var filterOptions = React$1.useMemo(function () {
308
308
  return getSearchableColumnIds(headers);
309
309
  }, [headers]);
310
- var rows = React.useMemo(function () {
310
+ var rows = React$1.useMemo(function () {
311
311
  return async ? data : filterRows(data, searchTerm, filterOptions);
312
312
  }, [async, data, filterOptions, searchTerm]);
313
313
  return {
@@ -321,14 +321,14 @@ function useSelectableRows(_ref) {
321
321
  var rows = _ref.rows,
322
322
  selectRows = _ref.selectRows,
323
323
  selectID = _ref.selectID;
324
- var _React$useState = React.useState([]),
324
+ var _React$useState = React$1.useState([]),
325
325
  _React$useState2 = _slicedToArray(_React$useState, 2),
326
326
  selected = _React$useState2[0],
327
327
  setSelected = _React$useState2[1];
328
- var clearSelection = React.useCallback(function () {
328
+ var clearSelection = React$1.useCallback(function () {
329
329
  setSelected([]);
330
330
  }, []);
331
- var handleSelectAllClick = React.useCallback(function (event) {
331
+ var handleSelectAllClick = React$1.useCallback(function (event) {
332
332
  if (!event.target.checked) {
333
333
  setSelected([]);
334
334
  return;
@@ -338,7 +338,7 @@ function useSelectableRows(_ref) {
338
338
  });
339
339
  setSelected(newSelected);
340
340
  }, [rows, selectID]);
341
- var handleClick = React.useCallback(function (event, id) {
341
+ var handleClick = React$1.useCallback(function (event, id) {
342
342
  if (!selectRows) {
343
343
  return;
344
344
  }
@@ -437,7 +437,7 @@ ReloadBtn.propTypes = {
437
437
  function FancySearch(_ref) {
438
438
  var value = _ref.value,
439
439
  onSubmit = _ref.onSubmit;
440
- var _React$useState = React.useState(Boolean(value)),
440
+ var _React$useState = React$1.useState(Boolean(value)),
441
441
  _React$useState2 = _slicedToArray(_React$useState, 2),
442
442
  hover = _React$useState2[0],
443
443
  setHover = _React$useState2[1];
@@ -453,10 +453,10 @@ function FancySearch(_ref) {
453
453
  // Sync internal state when the parent clears/changes the search term.
454
454
  // A ref tracks whether this sync came from the user typing or from a parent
455
455
  // update, so the debounce only fires for genuine user input.
456
- var isUserType = React.useRef(false);
457
- return /*#__PURE__*/React.createElement("form", {
456
+ var isUserTypingRef = React$1.useRef(false);
457
+ return /*#__PURE__*/React$1.createElement("form", {
458
458
  onSubmit: handleSubmit
459
- }, /*#__PURE__*/React.createElement(material.Paper, {
459
+ }, /*#__PURE__*/React$1.createElement(material.Paper, {
460
460
  elevation: 0,
461
461
  sx: {
462
462
  borderRadius: expanded ? "24px" : "50px",
@@ -477,11 +477,11 @@ function FancySearch(_ref) {
477
477
  onKeyDown: function onKeyDown(e) {
478
478
  return e.key === "Enter" && handleSubmit(e);
479
479
  }
480
- }, /*#__PURE__*/React.createElement(material.InputBase, {
480
+ }, /*#__PURE__*/React$1.createElement(material.InputBase, {
481
481
  placeholder: "Search",
482
482
  value: value,
483
483
  onChange: function onChange(e) {
484
- isUserType.current = true;
484
+ isUserTypingRef.current = true;
485
485
  onSubmit(e.target.value);
486
486
  },
487
487
  sx: _objectSpread2({
@@ -492,30 +492,30 @@ function FancySearch(_ref) {
492
492
  margin: 0
493
493
  }),
494
494
  onBlur: handleEndHover
495
- }), /*#__PURE__*/React.createElement(material.Collapse, {
495
+ }), /*#__PURE__*/React$1.createElement(material.Collapse, {
496
496
  "in": Boolean(value),
497
497
  orientation: "horizontal",
498
498
  unmountOnExit: true
499
- }, /*#__PURE__*/React.createElement(material.Stack, {
499
+ }, /*#__PURE__*/React$1.createElement(material.Stack, {
500
500
  direction: "row",
501
501
  spacing: 0,
502
502
  sx: {
503
503
  mr: 3,
504
504
  alignItems: "center"
505
505
  }
506
- }, /*#__PURE__*/React.createElement(material.IconButton, {
506
+ }, /*#__PURE__*/React$1.createElement(material.IconButton, {
507
507
  onClick: function onClick() {
508
- isUserType.current = false;
508
+ isUserTypingRef.current = false;
509
509
  // Immediately clear instead of waiting for the debounce
510
510
  onSubmit("");
511
511
  }
512
- }, /*#__PURE__*/React.createElement(iconsMaterial.Clear, null)), /*#__PURE__*/React.createElement(material.Divider, {
512
+ }, /*#__PURE__*/React$1.createElement(iconsMaterial.Clear, null)), /*#__PURE__*/React$1.createElement(material.Divider, {
513
513
  orientation: "vertical",
514
514
  flexItem: true
515
- }))), /*#__PURE__*/React.createElement(material.IconButton, {
515
+ }))), /*#__PURE__*/React$1.createElement(material.IconButton, {
516
516
  onClick: handleSubmit,
517
517
  type: "submit"
518
- }, /*#__PURE__*/React.createElement(iconsMaterial.Search, null))));
518
+ }, /*#__PURE__*/React$1.createElement(iconsMaterial.Search, null))));
519
519
  }
520
520
  FancySearch.propTypes = {
521
521
  value: PropTypes.string,
@@ -527,7 +527,7 @@ function SearchArea(props) {
527
527
  setFinalVal = props.setFinalVal,
528
528
  searchName = props.searchName,
529
529
  persistSearch = props.persistSearch;
530
- var searchVal = React.useMemo(function () {
530
+ var searchVal = React$1.useMemo(function () {
531
531
  if (current !== undefined && current !== null) return current;
532
532
  if (persistSearch && searchName) {
533
533
  var _sessionStorage$getIt;
@@ -535,9 +535,9 @@ function SearchArea(props) {
535
535
  }
536
536
  return "";
537
537
  }, [current, persistSearch, searchName]);
538
- return /*#__PURE__*/React.createElement("div", {
538
+ return /*#__PURE__*/React$1.createElement("div", {
539
539
  key: "SearchArea"
540
- }, /*#__PURE__*/React.createElement(FancySearch, {
540
+ }, /*#__PURE__*/React$1.createElement(FancySearch, {
541
541
  value: searchVal,
542
542
  onSubmit: setFinalVal
543
543
  }));
@@ -627,7 +627,7 @@ function useEnhancedTableState(_ref2) {
627
627
  order = _ref2.order,
628
628
  orderBy = _ref2.orderBy,
629
629
  asyncPages = _ref2.asyncPages;
630
- var _React$useState = React.useState(function () {
630
+ var _React$useState = React$1.useState(function () {
631
631
  return {
632
632
  page: 0,
633
633
  rowsPerPage: getInitialRowsPerPage({
@@ -641,8 +641,10 @@ function useEnhancedTableState(_ref2) {
641
641
  _React$useState2 = _slicedToArray(_React$useState, 2),
642
642
  pagination = _React$useState2[0],
643
643
  setPagination = _React$useState2[1];
644
- React.useEffect(function () {
645
- // eslint-disable-next-line react-hooks/set-state-in-effect
644
+ React$1.useEffect(function () {
645
+ // Resetting derived pagination state here intentionally preserves the
646
+ // current rows-per-page choice while jumping back to the first page.
647
+ // eslint-disable-next-line @eslint-react/set-state-in-effect
646
648
  setPagination(function (previous) {
647
649
  if (previous.resetFlag === resetFlag) {
648
650
  return previous;
@@ -655,19 +657,19 @@ function useEnhancedTableState(_ref2) {
655
657
  }, [resetFlag]);
656
658
  var page = pagination.page;
657
659
  var rowsPerPage = subTable ? rows.length : pagination.rowsPerPage;
658
- var handleRequestSort = React.useCallback(function (property) {
660
+ var handleRequestSort = React$1.useCallback(function (property) {
659
661
  var isAsc = orderBy === property && order === "asc";
660
662
  setOrder(isAsc ? "desc" : "asc");
661
663
  setOrderBy(property);
662
664
  }, [order, orderBy, setOrder, setOrderBy]);
663
- var handleChangePage = React.useCallback(function (event, newPage) {
665
+ var handleChangePage = React$1.useCallback(function (event, newPage) {
664
666
  setPagination(function (previous) {
665
667
  return _objectSpread2(_objectSpread2({}, previous), {}, {
666
668
  page: newPage
667
669
  });
668
670
  });
669
671
  }, []);
670
- var handleChangeRowsPerPage = React.useCallback(function (event) {
672
+ var handleChangeRowsPerPage = React$1.useCallback(function (event) {
671
673
  setPagination(function (previous) {
672
674
  return _objectSpread2(_objectSpread2({}, previous), {}, {
673
675
  page: 0,
@@ -753,7 +755,7 @@ EnhancedTableHead.propTypes = {
753
755
  * UniversalTable → EnhancedTable → DataRow → SubTableRow → UniversalTable
754
756
  * React.lazy resolves the import at render time, so the module graph stays acyclic.
755
757
  */
756
- var UniversalTable$2 = /*#__PURE__*/React.lazy(function () {
758
+ var UniversalTable$2 = /*#__PURE__*/React$1.lazy(function () {
757
759
  return Promise.resolve().then(function () { return UniversalTable$1; });
758
760
  });
759
761
 
@@ -767,16 +769,16 @@ function SubRowToggleCell(_ref) {
767
769
  onToggle = _ref.onToggle,
768
770
  rowValues = _ref.rowValues,
769
771
  hideBadge = _ref.hideBadge;
770
- return /*#__PURE__*/React.createElement(material.TableCell, null, /*#__PURE__*/React.createElement(material.Tooltip, {
772
+ return /*#__PURE__*/React$1.createElement(material.TableCell, null, /*#__PURE__*/React$1.createElement(material.Tooltip, {
771
773
  title: isOpen ? "Hide ".concat(header.id) : "Show ".concat(header.id)
772
- }, /*#__PURE__*/React.createElement(material.Box, null, /*#__PURE__*/React.createElement(material.IconButton, {
774
+ }, /*#__PURE__*/React$1.createElement(material.Box, null, /*#__PURE__*/React$1.createElement(material.IconButton, {
773
775
  onClick: function onClick(event) {
774
776
  event.stopPropagation();
775
777
  onToggle();
776
778
  },
777
779
  disabled: rowValues[header.id].length === 0,
778
780
  color: header.iconColor || "secondary"
779
- }, /*#__PURE__*/React.createElement(material.Badge, {
781
+ }, /*#__PURE__*/React$1.createElement(material.Badge, {
780
782
  badgeContent: rowValues[header.id].length,
781
783
  invisible: hideBadge,
782
784
  anchorOrigin: {
@@ -790,7 +792,7 @@ function SubRowToggleCell(_ref) {
790
792
  }
791
793
  }
792
794
  }
793
- }, isOpen ? (header === null || header === void 0 ? void 0 : header.closeIcon) || /*#__PURE__*/React.createElement(iconsMaterial.RemoveCircle, null) : (header === null || header === void 0 ? void 0 : header.openIcon) || /*#__PURE__*/React.createElement(iconsMaterial.AddCircle, null))))));
795
+ }, isOpen ? (header === null || header === void 0 ? void 0 : header.closeIcon) || /*#__PURE__*/React$1.createElement(iconsMaterial.RemoveCircle, null) : (header === null || header === void 0 ? void 0 : header.openIcon) || /*#__PURE__*/React$1.createElement(iconsMaterial.AddCircle, null))))));
794
796
  }
795
797
  SubRowToggleCell.propTypes = {
796
798
  header: PropTypes.object.isRequired,
@@ -809,19 +811,19 @@ function SubTableRow(_ref2) {
809
811
  isOpen = _ref2.isOpen,
810
812
  rowValues = _ref2.rowValues,
811
813
  colSpan = _ref2.colSpan;
812
- return /*#__PURE__*/React.createElement(material.TableRow, null, /*#__PURE__*/React.createElement(material.TableCell, {
814
+ return /*#__PURE__*/React$1.createElement(material.TableRow, null, /*#__PURE__*/React$1.createElement(material.TableCell, {
813
815
  colSpan: colSpan,
814
816
  style: {
815
817
  paddingBottom: 0,
816
818
  paddingTop: 0
817
819
  }
818
- }, /*#__PURE__*/React.createElement(material.Collapse, {
820
+ }, /*#__PURE__*/React$1.createElement(material.Collapse, {
819
821
  "in": isOpen,
820
822
  timeout: "auto",
821
823
  unmountOnExit: true
822
- }, /*#__PURE__*/React.createElement(React.Suspense, {
824
+ }, /*#__PURE__*/React$1.createElement(React$1.Suspense, {
823
825
  fallback: null
824
- }, /*#__PURE__*/React.createElement(UniversalTable$2, {
826
+ }, /*#__PURE__*/React$1.createElement(UniversalTable$2, {
825
827
  loading: table.loading,
826
828
  setLoading: table.setLoading,
827
829
  onReload: table.onReload,
@@ -839,62 +841,64 @@ SubTableRow.propTypes = {
839
841
  };
840
842
 
841
843
  function renderDataCells(headers, rowValues) {
842
- return headers.map(function (header, index) {
843
- return /*#__PURE__*/React.createElement(material.TableCell, _extends({
844
- key: header.id || index
844
+ return headers.map(function (header) {
845
+ var _header$id;
846
+ return /*#__PURE__*/React$1.createElement(material.TableCell, _extends({
847
+ key: (_header$id = header.id) !== null && _header$id !== void 0 ? _header$id : header.label
845
848
  }, header.cellProps), header.component ? header.component(rowValues) : formatCellValue(header, rowValues));
846
849
  });
847
850
  }
848
- var DataRow = /*#__PURE__*/React.memo(function DataRow(props) {
851
+ var DataRow = /*#__PURE__*/React$1.memo(function DataRow(props) {
849
852
  var rowValues = props.rowValues,
850
853
  headers = props.headers,
851
854
  selectRows = props.selectRows,
852
855
  isSelected = props.isSelected,
853
856
  handleClick = props.handleClick;
854
- var _React$useMemo = React.useMemo(function () {
857
+ var _React$useMemo = React$1.useMemo(function () {
855
858
  return splitHeaders(headers);
856
859
  }, [headers]),
857
860
  subTables = _React$useMemo.subTables,
858
861
  columns = _React$useMemo.columns;
859
862
  var hideBadge = props.hideBadge || false;
860
863
  var isItemSelected = isSelected(props.rowID);
861
- var _React$useState = React.useState(Array.from({
864
+ var _React$useState = React$1.useState(Array.from({
862
865
  length: subTables.length
863
866
  }).fill(false)),
864
867
  _React$useState2 = _slicedToArray(_React$useState, 2),
865
868
  reveal = _React$useState2[0],
866
869
  setReveal = _React$useState2[1];
867
- var toggleSubRow = React.useCallback(function (index) {
870
+ var toggleSubRow = React$1.useCallback(function (index) {
868
871
  setReveal(function (previous) {
869
872
  var next = _toConsumableArray(previous);
870
873
  next[index] = !next[index];
871
874
  return next;
872
875
  });
873
876
  }, []);
874
- var handleRowKeyDown = React.useCallback(function (event) {
877
+ var handleRowKeyDown = React$1.useCallback(function (event) {
875
878
  if (selectRows && (event.key === " " || event.key === "Enter")) {
876
879
  event.preventDefault();
877
880
  handleClick(event, props.rowID);
878
881
  }
879
882
  }, [selectRows, handleClick, props.rowID]);
880
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(material.TableRow, {
883
+ return /*#__PURE__*/React$1.createElement(React$1.Fragment, null, /*#__PURE__*/React$1.createElement(material.TableRow, {
881
884
  tabIndex: selectRows ? 0 : -1,
882
885
  hover: selectRows,
883
886
  role: selectRows ? "checkbox" : "row",
884
887
  selected: isItemSelected,
885
888
  "aria-checked": isItemSelected,
886
889
  onKeyDown: handleRowKeyDown
887
- }, selectRows && /*#__PURE__*/React.createElement(material.TableCell, {
890
+ }, selectRows && /*#__PURE__*/React$1.createElement(material.TableCell, {
888
891
  padding: "checkbox"
889
- }, /*#__PURE__*/React.createElement(material.Checkbox, {
892
+ }, /*#__PURE__*/React$1.createElement(material.Checkbox, {
890
893
  color: "primary",
891
894
  checked: isItemSelected,
892
895
  onClick: function onClick(event) {
893
896
  return handleClick(event, props.rowID);
894
897
  }
895
898
  })), subTables.map(function (header, index) {
896
- return /*#__PURE__*/React.createElement(SubRowToggleCell, {
897
- key: header.id || index,
899
+ var _header$id2;
900
+ return /*#__PURE__*/React$1.createElement(SubRowToggleCell, {
901
+ key: (_header$id2 = header.id) !== null && _header$id2 !== void 0 ? _header$id2 : header.label,
898
902
  header: header,
899
903
  isOpen: reveal[index],
900
904
  onToggle: function onToggle() {
@@ -904,8 +908,9 @@ var DataRow = /*#__PURE__*/React.memo(function DataRow(props) {
904
908
  hideBadge: hideBadge
905
909
  });
906
910
  }), renderDataCells(columns, rowValues)), subTables.map(function (table, index) {
907
- return /*#__PURE__*/React.createElement(SubTableRow, {
908
- key: table.id || index,
911
+ var _table$id;
912
+ return /*#__PURE__*/React$1.createElement(SubTableRow, {
913
+ key: (_table$id = table.id) !== null && _table$id !== void 0 ? _table$id : table.label,
909
914
  table: table,
910
915
  isOpen: reveal[index],
911
916
  rowValues: rowValues,
@@ -923,17 +928,15 @@ DataRow.propTypes = {
923
928
  rowID: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired
924
929
  };
925
930
 
931
+ var skeletonRows = ["row-1", "row-2", "row-3", "row-4", "row-5"];
932
+ var skeletonCells = ["cell-1", "cell-2", "cell-3", "cell-4"];
926
933
  var TableLoader = function TableLoader() {
927
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(material.TableHead, null), /*#__PURE__*/React.createElement(material.TableBody, null, Array.from({
928
- length: 5
929
- }).map(function (_, index) {
934
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(material.TableHead, null), /*#__PURE__*/React.createElement(material.TableBody, null, skeletonRows.map(function (rowKey) {
930
935
  return /*#__PURE__*/React.createElement(material.TableRow, {
931
- key: index
932
- }, Array.from({
933
- length: 4
934
- }).map(function (_, cellIndex) {
936
+ key: rowKey
937
+ }, skeletonCells.map(function (cellKey) {
935
938
  return /*#__PURE__*/React.createElement(material.TableCell, {
936
- key: cellIndex
939
+ key: cellKey
937
940
  }, /*#__PURE__*/React.createElement(material.Skeleton, {
938
941
  height: 30
939
942
  }));
@@ -975,19 +978,19 @@ function EnhancedTable(props) {
975
978
  handleChangeRowsPerPage = _useEnhancedTableStat.handleChangeRowsPerPage;
976
979
  var effectiveRowsPerPage = rowsPerPage === -1 ? rows.length : rowsPerPage;
977
980
  var emptyRows = Math.max(0, effectiveRowsPerPage - Math.min(effectiveRowsPerPage, rows.length - page * effectiveRowsPerPage));
978
- var isSelected = React.useCallback(function (id) {
981
+ var isSelected = React$1.useCallback(function (id) {
979
982
  return selected.includes(id);
980
983
  }, [selected]);
981
- var visibleRows = React.useMemo(function () {
984
+ var visibleRows = React$1.useMemo(function () {
982
985
  return stableSort(rows, getComparator(order, orderBy), headers, orderBy).slice(page * effectiveRowsPerPage, page * effectiveRowsPerPage + effectiveRowsPerPage);
983
986
  }, [effectiveRowsPerPage, headers, order, orderBy, page, rows]);
984
- return /*#__PURE__*/React.createElement(material.TableContainer, null, /*#__PURE__*/React.createElement(material.Table, {
987
+ return /*#__PURE__*/React$1.createElement(material.TableContainer, null, /*#__PURE__*/React$1.createElement(material.Table, {
985
988
  sx: {
986
989
  minWidth: 750
987
990
  },
988
991
  size: "small" ,
989
992
  "aria-label": props.name || "data table"
990
- }, props.loading ? /*#__PURE__*/React.createElement(TableLoader, null) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(EnhancedTableHead, {
993
+ }, props.loading ? /*#__PURE__*/React$1.createElement(TableLoader, null) : /*#__PURE__*/React$1.createElement(React$1.Fragment, null, /*#__PURE__*/React$1.createElement(EnhancedTableHead, {
991
994
  order: order,
992
995
  orderBy: orderBy,
993
996
  onRequestSort: handleSort,
@@ -997,10 +1000,10 @@ function EnhancedTable(props) {
997
1000
  rowCount: rows.length,
998
1001
  onSelectAllClick: props.handleSelectAllClick,
999
1002
  async: async
1000
- }), /*#__PURE__*/React.createElement(material.TableBody, null, visibleRows.map(function (row, index) {
1003
+ }), /*#__PURE__*/React$1.createElement(material.TableBody, null, visibleRows.map(function (row, index) {
1001
1004
  var rowKey = selectID ? row[selectID] : "row-".concat(page * effectiveRowsPerPage + index);
1002
1005
  var rowID = getSelectableRowId(row, index, selectID);
1003
- return /*#__PURE__*/React.createElement(DataRow, {
1006
+ return /*#__PURE__*/React$1.createElement(DataRow, {
1004
1007
  key: rowKey,
1005
1008
  rowID: rowID,
1006
1009
  headers: headers,
@@ -1010,17 +1013,17 @@ function EnhancedTable(props) {
1010
1013
  handleClick: props.handleClick,
1011
1014
  isSelected: isSelected
1012
1015
  });
1013
- }), !subTable && emptyRows > 0 && /*#__PURE__*/React.createElement(material.TableRow, {
1016
+ }), !subTable && emptyRows > 0 && /*#__PURE__*/React$1.createElement(material.TableRow, {
1014
1017
  style: {
1015
1018
  height: (33 ) * emptyRows
1016
1019
  }
1017
- }, /*#__PURE__*/React.createElement(material.TableCell, {
1020
+ }, /*#__PURE__*/React$1.createElement(material.TableCell, {
1018
1021
  colSpan: headers.length
1019
- }))))), subTable ? /*#__PURE__*/React.createElement(material.Box, {
1022
+ }))))), subTable ? /*#__PURE__*/React$1.createElement(material.Box, {
1020
1023
  sx: {
1021
1024
  mb: 3
1022
1025
  }
1023
- }) : /*#__PURE__*/React.createElement(material.TablePagination, {
1026
+ }) : /*#__PURE__*/React$1.createElement(material.TablePagination, {
1024
1027
  rowsPerPageOptions: props.pageSizeOptions || getPageOptions(rows.length),
1025
1028
  component: "div",
1026
1029
  count: rows.length,
@@ -1083,18 +1086,19 @@ function UniversalTable(_ref) {
1083
1086
  pageSizeOptions = _ref.pageSizeOptions,
1084
1087
  persistSearch = _ref.persistSearch,
1085
1088
  asyncPages = _ref.asyncPages;
1086
- var debounceRef = React.useRef(null);
1089
+ var debounceRef = React$1.useRef(null);
1090
+ var hasLoadedInitialAsyncPageRef = React$1.useRef(false);
1087
1091
  var async = typeof asyncPages === "number" && asyncPages > 0;
1088
1092
  var head = headers || [];
1089
1093
  var _useSearchableRows = useSearchableRows(data, head, async),
1090
1094
  rows = _useSearchableRows.rows,
1091
1095
  searchTerm = _useSearchableRows.searchTerm,
1092
1096
  setSearchTerm = _useSearchableRows.setSearchTerm;
1093
- var _React$useState = React.useState("asc"),
1097
+ var _React$useState = React$1.useState("asc"),
1094
1098
  _React$useState2 = _slicedToArray(_React$useState, 2),
1095
1099
  order = _React$useState2[0],
1096
1100
  setOrder = _React$useState2[1];
1097
- var _React$useState3 = React.useState(""),
1101
+ var _React$useState3 = React$1.useState(""),
1098
1102
  _React$useState4 = _slicedToArray(_React$useState3, 2),
1099
1103
  orderBy = _React$useState4[0],
1100
1104
  setOrderBy = _React$useState4[1];
@@ -1107,7 +1111,7 @@ function UniversalTable(_ref) {
1107
1111
  clearSelection = _useSelectableRows.clearSelection,
1108
1112
  handleSelectAllClick = _useSelectableRows.handleSelectAllClick,
1109
1113
  handleClick = _useSelectableRows.handleClick;
1110
- var handleSearchChange = React.useCallback(function (value) {
1114
+ var handleSearchChange = React$1.useCallback(function (value) {
1111
1115
  clearSelection();
1112
1116
  setSearchTerm(value);
1113
1117
  }, [clearSelection, setSearchTerm]);
@@ -1127,25 +1131,24 @@ function UniversalTable(_ref) {
1127
1131
  handleSearchChange(searchValue);
1128
1132
  }
1129
1133
  };
1130
- React.useEffect(function () {
1134
+ React$1.useEffect(function () {
1131
1135
  return function () {
1132
1136
  return clearTimeout(debounceRef.current);
1133
1137
  };
1134
1138
  }, []);
1135
- React.useEffect(function () {
1136
- if (async) {
1137
- setLoading({
1138
- searchTerm: searchTerm,
1139
- direction: order,
1140
- column: orderBy,
1141
- pages: asyncPages
1142
- });
1139
+ React$1.useEffect(function () {
1140
+ if (!async || hasLoadedInitialAsyncPageRef.current) {
1141
+ return;
1143
1142
  }
1144
- // Run the initial async load once on mount; search/sort/reload handlers
1145
- // send their own payloads after user interaction.
1146
- // eslint-disable-next-line react-hooks/exhaustive-deps
1147
- }, []);
1148
- var handleReload = React.useCallback(function () {
1143
+ hasLoadedInitialAsyncPageRef.current = true;
1144
+ setLoading({
1145
+ searchTerm: searchTerm,
1146
+ direction: order,
1147
+ column: orderBy,
1148
+ pages: asyncPages
1149
+ });
1150
+ }, [async, asyncPages, order, orderBy, searchTerm, setLoading]);
1151
+ var handleReload = React$1.useCallback(function () {
1149
1152
  if (typeof onReload === "function") {
1150
1153
  onReload();
1151
1154
  return;
@@ -1159,29 +1162,29 @@ function UniversalTable(_ref) {
1159
1162
  } : true);
1160
1163
  }
1161
1164
  }, [async, onReload, setLoading, searchTerm, order, orderBy, asyncPages]);
1162
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(LazyLoadingIndicator, {
1165
+ return /*#__PURE__*/React$1.createElement(React$1.Fragment, null, /*#__PURE__*/React$1.createElement(LazyLoadingIndicator, {
1163
1166
  show: lazyloading,
1164
1167
  currentPage: currentPage,
1165
1168
  totalPages: totalPages
1166
- }), /*#__PURE__*/React.createElement(Paper, {
1169
+ }), /*#__PURE__*/React$1.createElement(Paper, {
1167
1170
  sx: _objectSpread2({}, subTable && {
1168
1171
  boxShadow: "none"
1169
1172
  })
1170
- }, /*#__PURE__*/React.createElement(TableSelectionBanner, {
1173
+ }, /*#__PURE__*/React$1.createElement(TableSelectionBanner, {
1171
1174
  selected: selected,
1172
1175
  onSelection: onSelection,
1173
1176
  selectIcon: selectIcon
1174
- }), /*#__PURE__*/React.createElement(TableTitle, {
1177
+ }), /*#__PURE__*/React$1.createElement(TableTitle, {
1175
1178
  name: name,
1176
1179
  subTable: subTable
1177
- }), !subTable && /*#__PURE__*/React.createElement(TableToolbarContent, {
1180
+ }), !subTable && /*#__PURE__*/React$1.createElement(TableToolbarContent, {
1178
1181
  onReload: typeof onReload === "function" || typeof setLoading === "function" ? handleReload : undefined,
1179
1182
  reloadBtnLoading: reloadBtnLoading,
1180
1183
  searchTerm: searchTerm,
1181
1184
  onSearchChange: handleSearch,
1182
1185
  name: name,
1183
1186
  persistSearch: persistSearch
1184
- }), /*#__PURE__*/React.createElement(EnhancedTable, {
1187
+ }), /*#__PURE__*/React$1.createElement(EnhancedTable, {
1185
1188
  headers: head,
1186
1189
  rows: rows,
1187
1190
  resetFlag: searchTerm,