material-react-table 0.6.2 → 0.6.3

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.
@@ -1,6 +1,6 @@
1
- import React, { useState, useCallback, useMemo, useContext, createContext, Fragment, useRef, useEffect } from 'react';
1
+ import React, { useState, useCallback, useMemo, useContext, createContext, Fragment, useEffect } from 'react';
2
2
  import { useTable, useFilters, useGlobalFilter, useGroupBy, useSortBy, useExpanded, usePagination, useRowSelect, useResizeColumns, useFlexLayout, useAsyncDebounce } from 'react-table';
3
- import { Menu, MenuItem, TextField, InputAdornment, Tooltip, IconButton, Chip, FormControlLabel, Switch, Box, Button, Divider, TableCell, TableSortLabel, Collapse, Skeleton, Checkbox, TableRow, TableHead, alpha, TableBody, TableFooter, Table, TablePagination, useMediaQuery, Alert, Toolbar, TableContainer, Paper, LinearProgress } from '@mui/material';
3
+ import { Menu, MenuItem, TextField, InputAdornment, Tooltip, IconButton, Chip, FormControlLabel, Switch, Box, Button, Divider, TableCell, TableSortLabel, Collapse, Skeleton, Checkbox, TableRow, TableHead, alpha, TableBody, TableFooter, Table, TablePagination, useMediaQuery, Alert, LinearProgress, Toolbar, TableContainer, Paper } from '@mui/material';
4
4
  import { matchSorter } from 'match-sorter';
5
5
  import ArrowRightIcon from '@mui/icons-material/ArrowRight';
6
6
  import CancelIcon from '@mui/icons-material/Cancel';
@@ -97,6 +97,35 @@ function _objectWithoutPropertiesLoose(source, excluded) {
97
97
  return target;
98
98
  }
99
99
 
100
+ var findLowestLevelCols = function findLowestLevelCols(columns) {
101
+ var lowestLevelColumns = columns;
102
+ var currentCols = columns;
103
+
104
+ while (!!((_currentCols = currentCols) != null && _currentCols.length) && currentCols.some(function (col) {
105
+ return col.columns;
106
+ })) {
107
+ var _currentCols;
108
+
109
+ var nextCols = currentCols.filter(function (col) {
110
+ return !!col.columns;
111
+ }).map(function (col) {
112
+ return col.columns;
113
+ }).flat();
114
+
115
+ if (nextCols.every(function (col) {
116
+ return !(col != null && col.columns);
117
+ })) {
118
+ lowestLevelColumns = [].concat(lowestLevelColumns, nextCols);
119
+ }
120
+
121
+ currentCols = nextCols;
122
+ }
123
+
124
+ return lowestLevelColumns.filter(function (col) {
125
+ return !col.columns;
126
+ });
127
+ };
128
+
100
129
  var MaterialReactTableContext = /*#__PURE__*/function () {
101
130
  return createContext({});
102
131
  }();
@@ -127,35 +156,8 @@ var MaterialReactTableProvider = function MaterialReactTableProvider(props) {
127
156
  showSearch = _useState5[0],
128
157
  setShowSearch = _useState5[1];
129
158
 
130
- var findLowestLevelCols = useCallback(function () {
131
- var lowestLevelColumns = props.columns;
132
- var currentCols = props.columns;
133
-
134
- while (!!currentCols.length && currentCols.some(function (col) {
135
- return col.columns;
136
- })) {
137
- var nextCols = currentCols.filter(function (col) {
138
- return !!col.columns;
139
- }).map(function (col) {
140
- return col.columns;
141
- }).flat();
142
-
143
- if (nextCols.every(function (col) {
144
- return !col.columns;
145
- })) {
146
- lowestLevelColumns = [].concat(lowestLevelColumns, nextCols);
147
- }
148
-
149
- currentCols = nextCols;
150
- }
151
-
152
- return lowestLevelColumns.filter(function (col) {
153
- return !col.columns;
154
- });
155
- }, [props.columns]);
156
-
157
159
  var _useState6 = useState(function () {
158
- return Object.assign.apply(Object, [{}].concat(findLowestLevelCols().map(function (c) {
160
+ return Object.assign.apply(Object, [{}].concat(findLowestLevelCols(props.columns).map(function (c) {
159
161
  var _ref, _c$filter, _props$initialState5, _props$initialState5$, _ref2;
160
162
 
161
163
  return _ref2 = {}, _ref2[c.accessor] = (_ref = (_c$filter = c.filter) != null ? _c$filter : props == null ? void 0 : (_props$initialState5 = props.initialState) == null ? void 0 : (_props$initialState5$ = _props$initialState5.filters) == null ? void 0 : _props$initialState5$[c.accessor]) != null ? _ref : !!c.filterSelectOptions ? 'equals' : 'fuzzy', _ref2;
@@ -180,10 +182,20 @@ var MaterialReactTableProvider = function MaterialReactTableProvider(props) {
180
182
  var columns = useMemo(function () {
181
183
  return applyFiltersToColumns(props.columns);
182
184
  }, [props.columns, applyFiltersToColumns]);
185
+ var data = useMemo(function () {
186
+ return !props.isLoading || !!props.data.length ? props.data : [].concat(Array(10)).map(function (_) {
187
+ return Object.assign.apply(Object, [{}].concat(findLowestLevelCols(props.columns).map(function (c) {
188
+ var _ref3;
189
+
190
+ return _ref3 = {}, _ref3[c.accessor] = null, _ref3;
191
+ })));
192
+ });
193
+ }, [props.data, props.isLoading]);
183
194
  var tableInstance = useTable.apply(void 0, [// @ts-ignore
184
195
  _extends({}, props, {
185
196
  // @ts-ignore
186
197
  columns: columns,
198
+ data: data,
187
199
  useControlledState: function useControlledState(state) {
188
200
  return useMemo(function () {
189
201
  return _extends({}, state, {
@@ -843,15 +855,16 @@ var MRT_ColumnActionMenu = function MRT_ColumnActionMenu(_ref) {
843
855
  setAnchorEl(null);
844
856
  };
845
857
 
858
+ var handleShowAllColumns = function handleShowAllColumns() {
859
+ tableInstance.toggleHideAllColumns(false);
860
+ setAnchorEl(null);
861
+ };
862
+
846
863
  var handleOpenFilterModeMenu = function handleOpenFilterModeMenu(event) {
847
864
  event.stopPropagation();
848
865
  setFilterMenuAnchorEl(event.currentTarget);
849
866
  };
850
867
 
851
- var handleShowAllColumns = function handleShowAllColumns() {
852
- tableInstance.toggleHideAllColumns(false);
853
- };
854
-
855
868
  var handleOpenShowHideColumnsMenu = function handleOpenShowHideColumnsMenu(event) {
856
869
  event.stopPropagation();
857
870
  setShowHideColumnsMenuAnchorEl(event.currentTarget);
@@ -2413,9 +2426,7 @@ var MRT_TableBody = function MRT_TableBody() {
2413
2426
  });
2414
2427
 
2415
2428
  return React.createElement(TableBody, Object.assign({}, tableBodyProps, {
2416
- sx: _extends({
2417
- overflowY: 'hidden'
2418
- }, tableBodyProps == null ? void 0 : tableBodyProps.sx)
2429
+ sx: _extends({}, tableBodyProps == null ? void 0 : tableBodyProps.sx)
2419
2430
  }), rows.map(function (row) {
2420
2431
  tableInstance.prepareRow(row);
2421
2432
  return React.createElement(MRT_TableBodyRow, {
@@ -2775,7 +2786,7 @@ var MRT_TablePagination = function MRT_TablePagination() {
2775
2786
  showLastButton: tableInstance.rows.length / tableInstance.state.pageSize > 2
2776
2787
  }, tablePaginationProps, {
2777
2788
  sx: _extends({
2778
- p: 0,
2789
+ m: '0 0.5rem',
2779
2790
  position: 'relative',
2780
2791
  zIndex: 2
2781
2792
  }, tablePaginationProps == null ? void 0 : tablePaginationProps.sx)
@@ -2837,6 +2848,34 @@ var MRT_ToolbarAlertBanner = function MRT_ToolbarAlertBanner() {
2837
2848
  }, selectMessage, groupedByMessage)));
2838
2849
  };
2839
2850
 
2851
+ var MRT_LinearProgressBar = function MRT_LinearProgressBar() {
2852
+ var _useMRT = useMRT(),
2853
+ muiLinearProgressProps = _useMRT.muiLinearProgressProps,
2854
+ isFetching = _useMRT.isFetching,
2855
+ isLoading = _useMRT.isLoading,
2856
+ tableInstance = _useMRT.tableInstance;
2857
+
2858
+ var linearProgressProps = muiLinearProgressProps instanceof Function ? muiLinearProgressProps(tableInstance) : muiLinearProgressProps;
2859
+ return React.createElement(Collapse, {
2860
+ "in": isFetching || isLoading,
2861
+ unmountOnExit: true
2862
+ }, React.createElement(LinearProgress, Object.assign({
2863
+ "aria-label": "Loading",
2864
+ "aria-busy": "true"
2865
+ }, linearProgressProps)));
2866
+ };
2867
+
2868
+ var commonToolbarStyles = function commonToolbarStyles(theme, tableInstance) {
2869
+ return {
2870
+ backgroundColor: theme.palette.background["default"],
2871
+ backgroundImage: "linear-gradient(" + alpha(theme.palette.common.white, 0.05) + "," + alpha(theme.palette.common.white, 0.05) + ")",
2872
+ display: 'grid',
2873
+ opacity: tableInstance.state.fullScreen ? 0.95 : 1,
2874
+ p: '0 !important',
2875
+ width: '100%',
2876
+ zIndex: 1
2877
+ };
2878
+ };
2840
2879
  var MRT_ToolbarTop = function MRT_ToolbarTop() {
2841
2880
  var _renderToolbarCustomA;
2842
2881
 
@@ -2857,15 +2896,9 @@ var MRT_ToolbarTop = function MRT_ToolbarTop() {
2857
2896
  }, toolbarProps, {
2858
2897
  sx: function sx(theme) {
2859
2898
  return _extends({
2860
- backgroundColor: theme.palette.background["default"],
2861
- backgroundImage: "linear-gradient(" + alpha(theme.palette.common.white, 0.05) + "," + alpha(theme.palette.common.white, 0.05) + ")",
2862
- display: 'grid',
2863
- p: '0 !important',
2864
2899
  position: tableInstance.state.fullScreen ? 'sticky' : undefined,
2865
- top: tableInstance.state.fullScreen ? '0' : undefined,
2866
- width: '100%',
2867
- zIndex: 1
2868
- }, toolbarProps == null ? void 0 : toolbarProps.sx);
2900
+ top: tableInstance.state.fullScreen ? '0' : undefined
2901
+ }, commonToolbarStyles(theme, tableInstance), toolbarProps == null ? void 0 : toolbarProps.sx);
2869
2902
  }
2870
2903
  }), positionToolbarAlertBanner === 'top' && React.createElement(MRT_ToolbarAlertBanner, null), React.createElement(Box, {
2871
2904
  sx: {
@@ -2880,7 +2913,7 @@ var MRT_ToolbarTop = function MRT_ToolbarTop() {
2880
2913
  position: 'relative',
2881
2914
  zIndex: 3
2882
2915
  }
2883
- }, !disableGlobalFilter && React.createElement(MRT_SearchTextField, null), !hideToolbarInternalActions && positionToolbarActions === 'top' && React.createElement(MRT_ToolbarInternalButtons, null))), React.createElement("div", null, !manualPagination && ['top', 'both'].includes(positionPagination != null ? positionPagination : '') && React.createElement(MRT_TablePagination, null)));
2916
+ }, !disableGlobalFilter && React.createElement(MRT_SearchTextField, null), !hideToolbarInternalActions && positionToolbarActions === 'top' && React.createElement(MRT_ToolbarInternalButtons, null))), React.createElement("div", null, !manualPagination && ['top', 'both'].includes(positionPagination != null ? positionPagination : '') && React.createElement(MRT_TablePagination, null)), React.createElement(MRT_LinearProgressBar, null));
2884
2917
  };
2885
2918
 
2886
2919
  var MRT_ToolbarBottom = function MRT_ToolbarBottom() {
@@ -2899,53 +2932,37 @@ var MRT_ToolbarBottom = function MRT_ToolbarBottom() {
2899
2932
  }, toolbarProps, {
2900
2933
  sx: function sx(theme) {
2901
2934
  return _extends({
2902
- backgroundColor: theme.palette.background["default"],
2903
- backgroundImage: "linear-gradient(" + alpha(theme.palette.common.white, 0.05) + "," + alpha(theme.palette.common.white, 0.05) + ")",
2904
2935
  bottom: tableInstance.state.fullScreen ? '0' : undefined,
2905
- display: 'flex',
2906
- justifyContent: 'space-between',
2907
- overflowY: 'hidden',
2908
- p: '0 0.5rem !important',
2909
- position: tableInstance.state.fullScreen ? 'fixed' : undefined,
2910
- width: 'calc(100% - 1rem)',
2911
- zIndex: 1
2912
- }, toolbarProps == null ? void 0 : toolbarProps.sx);
2936
+ position: tableInstance.state.fullScreen ? 'fixed' : undefined
2937
+ }, commonToolbarStyles(theme, tableInstance), toolbarProps == null ? void 0 : toolbarProps.sx);
2913
2938
  }
2914
- }), !hideToolbarInternalActions && positionToolbarActions === 'bottom' ? React.createElement(MRT_ToolbarInternalButtons, null) : React.createElement("span", null), positionToolbarAlertBanner === 'bottom' && React.createElement(MRT_ToolbarAlertBanner, null), !manualPagination && ['bottom', 'both'].includes(positionPagination != null ? positionPagination : '') && React.createElement(MRT_TablePagination, null));
2939
+ }), React.createElement(MRT_LinearProgressBar, null), React.createElement(Box, {
2940
+ sx: {
2941
+ display: 'flex',
2942
+ justifyContent: 'space-between',
2943
+ width: '100%'
2944
+ }
2945
+ }, !hideToolbarInternalActions && positionToolbarActions === 'bottom' ? React.createElement(MRT_ToolbarInternalButtons, null) : React.createElement("span", null), positionToolbarAlertBanner === 'bottom' && React.createElement(MRT_ToolbarAlertBanner, null), !manualPagination && ['bottom', 'both'].includes(positionPagination != null ? positionPagination : '') && React.createElement(MRT_TablePagination, null)));
2915
2946
  };
2916
2947
 
2917
2948
  var MRT_TableContainer = function MRT_TableContainer() {
2918
2949
  var _useMRT = useMRT(),
2919
2950
  hideToolbarBottom = _useMRT.hideToolbarBottom,
2920
2951
  hideToolbarTop = _useMRT.hideToolbarTop,
2921
- isFetching = _useMRT.isFetching,
2922
- isLoading = _useMRT.isLoading,
2923
- muiLinearProgressProps = _useMRT.muiLinearProgressProps,
2924
2952
  muiTableContainerProps = _useMRT.muiTableContainerProps,
2925
2953
  tableInstance = _useMRT.tableInstance;
2926
2954
 
2927
2955
  var fullScreen = tableInstance.state.fullScreen;
2928
- var originalBodyOverflowStyle = useRef();
2929
- useEffect(function () {
2930
- if (typeof window !== 'undefined') {
2931
- var _document, _document$body, _document$body$style;
2932
-
2933
- originalBodyOverflowStyle.current = (_document = document) == null ? void 0 : (_document$body = _document.body) == null ? void 0 : (_document$body$style = _document$body.style) == null ? void 0 : _document$body$style.overflow;
2934
- }
2935
- }, []);
2936
2956
  useEffect(function () {
2937
2957
  if (typeof window !== 'undefined') {
2938
2958
  if (fullScreen) {
2939
2959
  document.body.style.overflow = 'hidden';
2940
2960
  } else {
2941
- var _originalBodyOverflow;
2942
-
2943
- document.body.style.overflow = (_originalBodyOverflow = originalBodyOverflowStyle.current) != null ? _originalBodyOverflow : 'auto';
2961
+ document.body.style.overflow = 'auto';
2944
2962
  }
2945
2963
  }
2946
2964
  }, [fullScreen]);
2947
2965
  var tableContainerProps = muiTableContainerProps instanceof Function ? muiTableContainerProps(tableInstance) : muiTableContainerProps;
2948
- var linearProgressProps = muiLinearProgressProps instanceof Function ? muiLinearProgressProps(tableInstance) : muiLinearProgressProps;
2949
2966
  return React.createElement(TableContainer, Object.assign({
2950
2967
  component: Paper
2951
2968
  }, tableContainerProps, {
@@ -2954,6 +2971,7 @@ var MRT_TableContainer = function MRT_TableContainer() {
2954
2971
  height: fullScreen ? '100%' : undefined,
2955
2972
  left: fullScreen ? '0' : undefined,
2956
2973
  m: fullScreen ? '0' : undefined,
2974
+ overflowY: 'hidden',
2957
2975
  position: fullScreen ? 'fixed' : undefined,
2958
2976
  right: fullScreen ? '0' : undefined,
2959
2977
  top: fullScreen ? '0' : undefined,
@@ -2961,10 +2979,7 @@ var MRT_TableContainer = function MRT_TableContainer() {
2961
2979
  width: fullScreen ? '100vw' : undefined,
2962
2980
  zIndex: fullScreen ? 1200 : 1
2963
2981
  }, tableContainerProps == null ? void 0 : tableContainerProps.sx)
2964
- }), !hideToolbarTop && React.createElement(MRT_ToolbarTop, null), React.createElement(Collapse, {
2965
- "in": isFetching || isLoading,
2966
- unmountOnExit: true
2967
- }, React.createElement(LinearProgress, Object.assign({}, linearProgressProps))), React.createElement(Box, {
2982
+ }), !hideToolbarTop && React.createElement(MRT_ToolbarTop, null), React.createElement(Box, {
2968
2983
  sx: {
2969
2984
  maxWidth: '100%',
2970
2985
  overflowX: 'auto'
@@ -3069,10 +3084,13 @@ var MaterialReactTable = (function (_ref) {
3069
3084
  positionToolbarAlertBanner = _ref$positionToolbarA2 === void 0 ? 'top' : _ref$positionToolbarA2,
3070
3085
  rest = _objectWithoutPropertiesLoose(_ref, _excluded);
3071
3086
 
3072
- return React.createElement(MaterialReactTableProvider, Object.assign({
3087
+ return React.createElement(MaterialReactTableProvider //@ts-ignore
3088
+ , Object.assign({
3089
+ //@ts-ignore
3073
3090
  defaultColumn: defaultColumn,
3074
- // @ts-ignore
3091
+ //@ts-ignore
3075
3092
  filterTypes: _extends({}, defaultFilterFNs, filterTypes),
3093
+ //@ts-ignore
3076
3094
  globalFilter: globalFilter,
3077
3095
  icons: _extends({}, MRT_Default_Icons, icons),
3078
3096
  localization: _extends({}, MRT_DefaultLocalization_EN, localization),