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