@mui/x-data-grid 7.8.0 → 7.9.0
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/CHANGELOG.md +66 -0
- package/DataGrid/useDataGridProps.js +9 -2
- package/components/GridLoadingOverlay.d.ts +15 -3
- package/components/GridLoadingOverlay.js +48 -4
- package/components/GridRow.js +2 -1
- package/components/GridSkeletonLoadingOverlay.d.ts +3 -0
- package/components/GridSkeletonLoadingOverlay.js +181 -0
- package/components/base/GridOverlays.d.ts +11 -1
- package/components/base/GridOverlays.js +25 -39
- package/components/cell/GridSkeletonCell.d.ts +13 -6
- package/components/cell/GridSkeletonCell.js +61 -19
- package/components/containers/GridRootStyles.js +11 -2
- package/components/virtualization/GridVirtualScroller.js +7 -5
- package/constants/gridClasses.d.ts +9 -0
- package/constants/gridClasses.js +1 -1
- package/hooks/features/overlays/useGridOverlays.d.ts +11 -0
- package/hooks/features/overlays/useGridOverlays.js +35 -0
- package/hooks/features/virtualization/useGridVirtualScroller.js +1 -1
- package/hooks/utils/index.d.ts +0 -1
- package/hooks/utils/index.js +0 -1
- package/index.js +1 -1
- package/models/gridSlotsComponentsProps.d.ts +2 -1
- package/modern/DataGrid/useDataGridProps.js +9 -2
- package/modern/components/GridLoadingOverlay.js +48 -4
- package/modern/components/GridRow.js +2 -1
- package/modern/components/GridSkeletonLoadingOverlay.js +181 -0
- package/modern/components/base/GridOverlays.js +25 -39
- package/modern/components/cell/GridSkeletonCell.js +61 -19
- package/modern/components/containers/GridRootStyles.js +11 -2
- package/modern/components/virtualization/GridVirtualScroller.js +7 -5
- package/modern/constants/gridClasses.js +1 -1
- package/modern/hooks/features/overlays/useGridOverlays.js +35 -0
- package/modern/hooks/features/virtualization/useGridVirtualScroller.js +1 -1
- package/modern/hooks/utils/index.js +0 -1
- package/modern/index.js +1 -1
- package/modern/utils/utils.js +10 -2
- package/node/DataGrid/useDataGridProps.js +9 -2
- package/node/components/GridLoadingOverlay.js +48 -4
- package/node/components/GridRow.js +2 -1
- package/node/components/GridSkeletonLoadingOverlay.js +189 -0
- package/node/components/base/GridOverlays.js +25 -39
- package/node/components/cell/GridSkeletonCell.js +60 -18
- package/node/components/containers/GridRootStyles.js +11 -2
- package/node/components/virtualization/GridVirtualScroller.js +6 -4
- package/node/constants/gridClasses.js +1 -1
- package/node/hooks/features/overlays/useGridOverlays.js +42 -0
- package/node/hooks/features/virtualization/useGridVirtualScroller.js +1 -1
- package/node/hooks/utils/index.js +0 -12
- package/node/index.js +1 -1
- package/node/utils/utils.js +11 -3
- package/package.json +5 -4
- package/utils/utils.d.ts +8 -1
- package/utils/utils.js +10 -2
- package/hooks/utils/useResizeObserver.d.ts +0 -2
- package/hooks/utils/useResizeObserver.js +0 -36
- package/modern/hooks/utils/useResizeObserver.js +0 -36
- package/node/hooks/utils/useResizeObserver.js +0 -44
|
@@ -12,8 +12,6 @@ var _system = require("@mui/system");
|
|
|
12
12
|
var _utils = require("@mui/utils");
|
|
13
13
|
var _clsx = _interopRequireDefault(require("clsx"));
|
|
14
14
|
var _useGridSelector = require("../../hooks/utils/useGridSelector");
|
|
15
|
-
var _gridFilterSelector = require("../../hooks/features/filter/gridFilterSelector");
|
|
16
|
-
var _gridRowsSelector = require("../../hooks/features/rows/gridRowsSelector");
|
|
17
15
|
var _dimensions = require("../../hooks/features/dimensions");
|
|
18
16
|
var _useGridApiContext = require("../../hooks/utils/useGridApiContext");
|
|
19
17
|
var _useGridRootProps = require("../../hooks/utils/useGridRootProps");
|
|
@@ -26,11 +24,14 @@ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e;
|
|
|
26
24
|
const GridOverlayWrapperRoot = (0, _system.styled)('div', {
|
|
27
25
|
name: 'MuiDataGrid',
|
|
28
26
|
slot: 'OverlayWrapper',
|
|
29
|
-
shouldForwardProp: prop => prop !== 'overlayType',
|
|
27
|
+
shouldForwardProp: prop => prop !== 'overlayType' && prop !== 'loadingOverlayVariant',
|
|
30
28
|
overridesResolver: (props, styles) => styles.overlayWrapper
|
|
31
29
|
})(({
|
|
32
|
-
overlayType
|
|
33
|
-
|
|
30
|
+
overlayType,
|
|
31
|
+
loadingOverlayVariant
|
|
32
|
+
}) =>
|
|
33
|
+
// Skeleton overlay should flow with the scroll container and not be sticky
|
|
34
|
+
loadingOverlayVariant !== 'skeleton' ? {
|
|
34
35
|
position: 'sticky',
|
|
35
36
|
// To stay in place while scrolling
|
|
36
37
|
top: 'var(--DataGrid-headersTotalHeight)',
|
|
@@ -41,11 +42,11 @@ const GridOverlayWrapperRoot = (0, _system.styled)('div', {
|
|
|
41
42
|
// To stay above the content instead of shifting it down
|
|
42
43
|
zIndex: overlayType === 'loadingOverlay' ? 5 // Should be above pinned columns, pinned rows, and detail panel
|
|
43
44
|
: 4 // Should be above pinned columns and detail panel
|
|
44
|
-
})
|
|
45
|
+
} : {});
|
|
45
46
|
const GridOverlayWrapperInner = (0, _system.styled)('div', {
|
|
46
47
|
name: 'MuiDataGrid',
|
|
47
48
|
slot: 'OverlayWrapperInner',
|
|
48
|
-
shouldForwardProp: prop => prop !== 'overlayType',
|
|
49
|
+
shouldForwardProp: prop => prop !== 'overlayType' && prop !== 'loadingOverlayVariant',
|
|
49
50
|
overridesResolver: (props, styles) => styles.overlayWrapperInner
|
|
50
51
|
})({});
|
|
51
52
|
const useUtilityClasses = ownerState => {
|
|
@@ -70,9 +71,9 @@ function GridOverlayWrapper(props) {
|
|
|
70
71
|
const classes = useUtilityClasses((0, _extends2.default)({}, props, {
|
|
71
72
|
classes: rootProps.classes
|
|
72
73
|
}));
|
|
73
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsx)(GridOverlayWrapperRoot, {
|
|
74
|
-
className: (0, _clsx.default)(classes.root)
|
|
75
|
-
|
|
74
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(GridOverlayWrapperRoot, (0, _extends2.default)({
|
|
75
|
+
className: (0, _clsx.default)(classes.root)
|
|
76
|
+
}, props, {
|
|
76
77
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(GridOverlayWrapperInner, (0, _extends2.default)({
|
|
77
78
|
className: (0, _clsx.default)(classes.inner),
|
|
78
79
|
style: {
|
|
@@ -80,42 +81,27 @@ function GridOverlayWrapper(props) {
|
|
|
80
81
|
width: dimensions.viewportOuterSize.width
|
|
81
82
|
}
|
|
82
83
|
}, props))
|
|
83
|
-
});
|
|
84
|
+
}));
|
|
84
85
|
}
|
|
85
|
-
process.env.NODE_ENV !== "production" ?
|
|
86
|
+
process.env.NODE_ENV !== "production" ? GridOverlays.propTypes = {
|
|
86
87
|
// ----------------------------- Warning --------------------------------
|
|
87
88
|
// | These PropTypes are generated from the TypeScript type definitions |
|
|
88
89
|
// | To update them edit the TypeScript types and run "pnpm proptypes" |
|
|
89
90
|
// ----------------------------------------------------------------------
|
|
90
|
-
|
|
91
|
+
loadingOverlayVariant: _propTypes.default.oneOf(['circular-progress', 'linear-progress', 'skeleton']),
|
|
92
|
+
overlayType: _propTypes.default.oneOf(['loadingOverlay', 'noResultsOverlay', 'noRowsOverlay'])
|
|
91
93
|
} : void 0;
|
|
92
|
-
function GridOverlays() {
|
|
93
|
-
const
|
|
94
|
+
function GridOverlays(props) {
|
|
95
|
+
const {
|
|
96
|
+
overlayType
|
|
97
|
+
} = props;
|
|
94
98
|
const rootProps = (0, _useGridRootProps.useGridRootProps)();
|
|
95
|
-
|
|
96
|
-
const visibleRowCount = (0, _useGridSelector.useGridSelector)(apiRef, _gridFilterSelector.gridExpandedRowCountSelector);
|
|
97
|
-
const loading = (0, _useGridSelector.useGridSelector)(apiRef, _gridRowsSelector.gridRowsLoadingSelector);
|
|
98
|
-
const showNoRowsOverlay = !loading && totalRowCount === 0;
|
|
99
|
-
const showNoResultsOverlay = !loading && totalRowCount > 0 && visibleRowCount === 0;
|
|
100
|
-
let overlay = null;
|
|
101
|
-
let overlayType = '';
|
|
102
|
-
if (showNoRowsOverlay) {
|
|
103
|
-
overlay = /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.noRowsOverlay, (0, _extends2.default)({}, rootProps.slotProps?.noRowsOverlay));
|
|
104
|
-
overlayType = 'noRowsOverlay';
|
|
105
|
-
}
|
|
106
|
-
if (showNoResultsOverlay) {
|
|
107
|
-
overlay = /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.noResultsOverlay, (0, _extends2.default)({}, rootProps.slotProps?.noResultsOverlay));
|
|
108
|
-
overlayType = 'noResultsOverlay';
|
|
109
|
-
}
|
|
110
|
-
if (loading) {
|
|
111
|
-
overlay = /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.loadingOverlay, (0, _extends2.default)({}, rootProps.slotProps?.loadingOverlay));
|
|
112
|
-
overlayType = 'loadingOverlay';
|
|
113
|
-
}
|
|
114
|
-
if (overlay === null) {
|
|
99
|
+
if (!overlayType) {
|
|
115
100
|
return null;
|
|
116
101
|
}
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
102
|
+
const Overlay = rootProps.slots?.[overlayType];
|
|
103
|
+
const overlayProps = rootProps.slotProps?.[overlayType];
|
|
104
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(GridOverlayWrapper, (0, _extends2.default)({}, props, {
|
|
105
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(Overlay, (0, _extends2.default)({}, overlayProps))
|
|
106
|
+
}));
|
|
121
107
|
}
|
|
@@ -11,51 +11,87 @@ var React = _interopRequireWildcard(require("react"));
|
|
|
11
11
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
12
12
|
var _Skeleton = _interopRequireDefault(require("@mui/material/Skeleton"));
|
|
13
13
|
var _utils = require("@mui/utils");
|
|
14
|
+
var _clsx = _interopRequireDefault(require("clsx"));
|
|
14
15
|
var _fastMemo = require("../../utils/fastMemo");
|
|
15
16
|
var _utils2 = require("../../utils/utils");
|
|
16
17
|
var _useGridRootProps = require("../../hooks/utils/useGridRootProps");
|
|
17
18
|
var _gridClasses = require("../../constants/gridClasses");
|
|
18
19
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
19
|
-
const _excluded = ["field", "align", "width", "height"];
|
|
20
|
+
const _excluded = ["field", "type", "align", "width", "height", "empty", "style", "className"];
|
|
20
21
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
21
22
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
22
|
-
const
|
|
23
|
+
const CIRCULAR_CONTENT_SIZE = '1.3em';
|
|
24
|
+
const CONTENT_HEIGHT = '1.2em';
|
|
25
|
+
const DEFAULT_CONTENT_WIDTH_RANGE = [40, 80];
|
|
26
|
+
const CONTENT_WIDTH_RANGE_BY_TYPE = {
|
|
27
|
+
number: [40, 60],
|
|
28
|
+
string: [40, 80],
|
|
29
|
+
date: [40, 60],
|
|
30
|
+
dateTime: [60, 80],
|
|
31
|
+
singleSelect: [40, 80]
|
|
32
|
+
};
|
|
23
33
|
const useUtilityClasses = ownerState => {
|
|
24
34
|
const {
|
|
25
35
|
align,
|
|
26
|
-
classes
|
|
36
|
+
classes,
|
|
37
|
+
empty
|
|
27
38
|
} = ownerState;
|
|
28
39
|
const slots = {
|
|
29
|
-
root: ['cell', 'cellSkeleton', `cell--text${(0, _utils.unstable_capitalize)(align)}`, '
|
|
40
|
+
root: ['cell', 'cellSkeleton', `cell--text${align ? (0, _utils.unstable_capitalize)(align) : 'Left'}`, empty && 'cellEmpty']
|
|
30
41
|
};
|
|
31
42
|
return (0, _utils.unstable_composeClasses)(slots, _gridClasses.getDataGridUtilityClass, classes);
|
|
32
43
|
};
|
|
44
|
+
const randomNumberGenerator = (0, _utils2.createRandomNumberGenerator)(12345);
|
|
33
45
|
function GridSkeletonCell(props) {
|
|
34
46
|
const {
|
|
47
|
+
field,
|
|
48
|
+
type,
|
|
35
49
|
align,
|
|
36
50
|
width,
|
|
37
|
-
height
|
|
51
|
+
height,
|
|
52
|
+
empty = false,
|
|
53
|
+
style,
|
|
54
|
+
className
|
|
38
55
|
} = props,
|
|
39
56
|
other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
|
|
40
57
|
const rootProps = (0, _useGridRootProps.useGridRootProps)();
|
|
41
58
|
const ownerState = {
|
|
42
59
|
classes: rootProps.classes,
|
|
43
|
-
align
|
|
60
|
+
align,
|
|
61
|
+
empty
|
|
44
62
|
};
|
|
45
63
|
const classes = useUtilityClasses(ownerState);
|
|
46
|
-
|
|
64
|
+
|
|
65
|
+
// Memo prevents the non-circular skeleton widths changing to random widths on every render
|
|
66
|
+
const skeletonProps = React.useMemo(() => {
|
|
67
|
+
const isCircularContent = type === 'boolean' || type === 'actions';
|
|
68
|
+
if (isCircularContent) {
|
|
69
|
+
return {
|
|
70
|
+
variant: 'circular',
|
|
71
|
+
width: CIRCULAR_CONTENT_SIZE,
|
|
72
|
+
height: CIRCULAR_CONTENT_SIZE
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// The width of the skeleton is a random number between the min and max values
|
|
77
|
+
// The min and max values are determined by the type of the column
|
|
78
|
+
const [min, max] = type ? CONTENT_WIDTH_RANGE_BY_TYPE[type] ?? DEFAULT_CONTENT_WIDTH_RANGE : DEFAULT_CONTENT_WIDTH_RANGE;
|
|
79
|
+
return {
|
|
80
|
+
variant: 'text',
|
|
81
|
+
width: `${Math.round(randomNumberGenerator(min, max))}%`,
|
|
82
|
+
height: CONTENT_HEIGHT
|
|
83
|
+
};
|
|
84
|
+
}, [type]);
|
|
47
85
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", (0, _extends2.default)({
|
|
48
|
-
|
|
49
|
-
|
|
86
|
+
"data-field": field,
|
|
87
|
+
className: (0, _clsx.default)(classes.root, className),
|
|
88
|
+
style: (0, _extends2.default)({
|
|
50
89
|
height,
|
|
51
90
|
maxWidth: width,
|
|
52
91
|
minWidth: width
|
|
53
|
-
}
|
|
92
|
+
}, style)
|
|
54
93
|
}, other, {
|
|
55
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Skeleton.default, {
|
|
56
|
-
width: `${contentWidth}%`,
|
|
57
|
-
height: 25
|
|
58
|
-
})
|
|
94
|
+
children: !empty && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Skeleton.default, (0, _extends2.default)({}, skeletonProps))
|
|
59
95
|
}));
|
|
60
96
|
}
|
|
61
97
|
process.env.NODE_ENV !== "production" ? GridSkeletonCell.propTypes = {
|
|
@@ -63,9 +99,15 @@ process.env.NODE_ENV !== "production" ? GridSkeletonCell.propTypes = {
|
|
|
63
99
|
// | These PropTypes are generated from the TypeScript type definitions |
|
|
64
100
|
// | To update them edit the TypeScript types and run "pnpm proptypes" |
|
|
65
101
|
// ----------------------------------------------------------------------
|
|
66
|
-
align: _propTypes.default.string
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
102
|
+
align: _propTypes.default.string,
|
|
103
|
+
/**
|
|
104
|
+
* If `true`, the cell will not display the skeleton but still reserve the cell space.
|
|
105
|
+
* @default false
|
|
106
|
+
*/
|
|
107
|
+
empty: _propTypes.default.bool,
|
|
108
|
+
field: _propTypes.default.string,
|
|
109
|
+
height: _propTypes.default.oneOfType([_propTypes.default.oneOf(['auto']), _propTypes.default.number]),
|
|
110
|
+
type: _propTypes.default.oneOf(['actions', 'boolean', 'custom', 'date', 'dateTime', 'number', 'singleSelect', 'string']),
|
|
111
|
+
width: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string])
|
|
70
112
|
} : void 0;
|
|
71
113
|
const Memoized = exports.GridSkeletonCell = (0, _fastMemo.fastMemo)(GridSkeletonCell);
|
|
@@ -168,7 +168,7 @@ const GridRootStyles = exports.GridRootStyles = (0, _styles.styled)('div', {
|
|
|
168
168
|
const selectedOpacity = (t.vars || t).palette.action.selectedOpacity;
|
|
169
169
|
const selectedBackground = t.vars ? `rgba(${t.vars.palette.primary.mainChannel} / ${selectedOpacity})` : (0, _styles.alpha)(t.palette.primary.main, selectedOpacity);
|
|
170
170
|
const selectedHoverBackground = t.vars ? `rgba(${t.vars.palette.primary.mainChannel} / calc(
|
|
171
|
-
${t.vars.palette.action.selectedOpacity} +
|
|
171
|
+
${t.vars.palette.action.selectedOpacity} +
|
|
172
172
|
${t.vars.palette.action.hoverOpacity}
|
|
173
173
|
))` : (0, _styles.alpha)(t.palette.primary.main, t.palette.action.selectedOpacity + t.palette.action.hoverOpacity);
|
|
174
174
|
const pinnedHoverBackground = t.vars ? hoverColor : blend(pinnedBackground, hoverColor, hoverOpacity);
|
|
@@ -432,6 +432,9 @@ const GridRootStyles = exports.GridRootStyles = (0, _styles.styled)('div', {
|
|
|
432
432
|
backgroundColor: 'transparent'
|
|
433
433
|
}
|
|
434
434
|
},
|
|
435
|
+
[`&.${_gridClasses.gridClasses.rowSkeleton}:hover`]: {
|
|
436
|
+
backgroundColor: 'transparent'
|
|
437
|
+
},
|
|
435
438
|
'&.Mui-selected': selectedStyles
|
|
436
439
|
},
|
|
437
440
|
[`& .${_gridClasses.gridClasses['container--top']}, & .${_gridClasses.gridClasses['container--bottom']}`]: {
|
|
@@ -638,7 +641,7 @@ const GridRootStyles = exports.GridRootStyles = (0, _styles.styled)('div', {
|
|
|
638
641
|
minWidth: 'calc(var(--DataGrid-hasScrollY) * var(--DataGrid-scrollbarSize))',
|
|
639
642
|
alignSelf: 'stretch',
|
|
640
643
|
[`&.${_gridClasses.gridClasses['scrollbarFiller--borderTop']}`]: {
|
|
641
|
-
borderTop: '1px solid var(--
|
|
644
|
+
borderTop: '1px solid var(--rowBorderColor)'
|
|
642
645
|
},
|
|
643
646
|
[`&.${_gridClasses.gridClasses['scrollbarFiller--pinnedRight']}`]: {
|
|
644
647
|
backgroundColor: 'var(--DataGrid-pinnedBackground)',
|
|
@@ -651,6 +654,12 @@ const GridRootStyles = exports.GridRootStyles = (0, _styles.styled)('div', {
|
|
|
651
654
|
},
|
|
652
655
|
[`& .${_gridClasses.gridClasses['filler--borderTop']}`]: {
|
|
653
656
|
borderTop: '1px solid var(--DataGrid-rowBorderColor)'
|
|
657
|
+
},
|
|
658
|
+
/* Hide grid rows and vertical scrollbar when skeleton overlay is visible */
|
|
659
|
+
[`& .${_gridClasses.gridClasses['main--hasSkeletonLoadingOverlay']}`]: {
|
|
660
|
+
[`& .${_gridClasses.gridClasses.virtualScrollerContent}, & .${_gridClasses.gridClasses['scrollbar--vertical']}, & .${_gridClasses.gridClasses.pinnedRows}`]: {
|
|
661
|
+
display: 'none'
|
|
662
|
+
}
|
|
654
663
|
}
|
|
655
664
|
});
|
|
656
665
|
return gridStyle;
|
|
@@ -16,6 +16,7 @@ var _useGridSelector = require("../../hooks/utils/useGridSelector");
|
|
|
16
16
|
var _gridClasses = require("../../constants/gridClasses");
|
|
17
17
|
var _dimensions = require("../../hooks/features/dimensions");
|
|
18
18
|
var _useGridVirtualScroller = require("../../hooks/features/virtualization/useGridVirtualScroller");
|
|
19
|
+
var _useGridOverlays = require("../../hooks/features/overlays/useGridOverlays");
|
|
19
20
|
var _GridOverlays = require("../base/GridOverlays");
|
|
20
21
|
var _GridHeaders = require("../GridHeaders");
|
|
21
22
|
var _GridMainContainer = require("./GridMainContainer");
|
|
@@ -28,12 +29,12 @@ var _GridVirtualScrollbar = require("./GridVirtualScrollbar");
|
|
|
28
29
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
29
30
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
30
31
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
31
|
-
const useUtilityClasses = (ownerState, dimensions) => {
|
|
32
|
+
const useUtilityClasses = (ownerState, dimensions, loadingOverlayVariant) => {
|
|
32
33
|
const {
|
|
33
34
|
classes
|
|
34
35
|
} = ownerState;
|
|
35
36
|
const slots = {
|
|
36
|
-
root: ['main', dimensions.rightPinnedWidth > 0 && 'main--hasPinnedRight'],
|
|
37
|
+
root: ['main', dimensions.rightPinnedWidth > 0 && 'main--hasPinnedRight', loadingOverlayVariant === 'skeleton' && 'main--hasSkeletonLoadingOverlay'],
|
|
37
38
|
scroller: ['virtualScroller']
|
|
38
39
|
};
|
|
39
40
|
return (0, _utils.unstable_composeClasses)(slots, _gridClasses.getDataGridUtilityClass, classes);
|
|
@@ -60,7 +61,8 @@ function GridVirtualScroller(props) {
|
|
|
60
61
|
const apiRef = (0, _useGridApiContext.useGridApiContext)();
|
|
61
62
|
const rootProps = (0, _useGridRootProps.useGridRootProps)();
|
|
62
63
|
const dimensions = (0, _useGridSelector.useGridSelector)(apiRef, _dimensions.gridDimensionsSelector);
|
|
63
|
-
const
|
|
64
|
+
const overlaysProps = (0, _useGridOverlays.useGridOverlays)();
|
|
65
|
+
const classes = useUtilityClasses(rootProps, dimensions, overlaysProps.loadingOverlayVariant);
|
|
64
66
|
const virtualScroller = (0, _useGridVirtualScroller.useGridVirtualScroller)();
|
|
65
67
|
const {
|
|
66
68
|
getContainerProps,
|
|
@@ -88,7 +90,7 @@ function GridVirtualScroller(props) {
|
|
|
88
90
|
position: "top",
|
|
89
91
|
virtualScroller: virtualScroller
|
|
90
92
|
})]
|
|
91
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridOverlays.GridOverlays, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridVirtualScrollerContent.GridVirtualScrollerContent, (0, _extends2.default)({}, getContentProps(), {
|
|
93
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridOverlays.GridOverlays, (0, _extends2.default)({}, overlaysProps)), /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridVirtualScrollerContent.GridVirtualScrollerContent, (0, _extends2.default)({}, getContentProps(), {
|
|
92
94
|
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_GridVirtualScrollerRenderZone.GridVirtualScrollerRenderZone, (0, _extends2.default)({}, getRenderZoneProps(), {
|
|
93
95
|
children: [rows, /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.detailPanels, {
|
|
94
96
|
virtualScroller: virtualScroller
|
|
@@ -9,4 +9,4 @@ var _utils = require("@mui/utils");
|
|
|
9
9
|
function getDataGridUtilityClass(slot) {
|
|
10
10
|
return (0, _utils.unstable_generateUtilityClass)('MuiDataGrid', slot);
|
|
11
11
|
}
|
|
12
|
-
const gridClasses = exports.gridClasses = (0, _utils.unstable_generateUtilityClasses)('MuiDataGrid', ['actionsCell', 'aggregationColumnHeader', 'aggregationColumnHeader--alignLeft', 'aggregationColumnHeader--alignCenter', 'aggregationColumnHeader--alignRight', 'aggregationColumnHeaderLabel', 'autoHeight', 'autosizing', 'booleanCell', 'cell--editable', 'cell--editing', 'cell--flex', 'cell--textCenter', 'cell--textLeft', 'cell--textRight', 'cell--rangeTop', 'cell--rangeBottom', 'cell--rangeLeft', 'cell--rangeRight', 'cell--pinnedLeft', 'cell--pinnedRight', 'cell--selectionMode', 'cell', 'cellCheckbox', 'cellEmpty', 'cellSkeleton', 'cellOffsetLeft', 'checkboxInput', 'columnHeader', 'columnHeader--alignCenter', 'columnHeader--alignLeft', 'columnHeader--alignRight', 'columnHeader--dragging', 'columnHeader--moving', 'columnHeader--numeric', 'columnHeader--sortable', 'columnHeader--sorted', 'columnHeader--filtered', 'columnHeader--pinnedLeft', 'columnHeader--pinnedRight', 'columnHeader--last', 'columnHeaderCheckbox', 'columnHeaderDraggableContainer', 'columnHeaderTitle', 'columnHeaderTitleContainer', 'columnHeaderTitleContainerContent', 'columnHeader--filledGroup', 'columnHeader--emptyGroup', 'columnHeaders', 'columnSeparator--resizable', 'columnSeparator--resizing', 'columnSeparator--sideLeft', 'columnSeparator--sideRight', 'columnSeparator', 'columnsManagement', 'columnsManagementRow', 'columnsManagementHeader', 'columnsManagementFooter', 'container--top', 'container--bottom', 'detailPanel', 'detailPanels', 'detailPanelToggleCell', 'detailPanelToggleCell--expanded', 'footerCell', 'panel', 'panelHeader', 'panelWrapper', 'panelContent', 'panelFooter', 'paper', 'editBooleanCell', 'editInputCell', 'filler', 'filler--borderTop', 'filler--pinnedLeft', 'filler--pinnedRight', 'filterForm', 'filterFormDeleteIcon', 'filterFormLogicOperatorInput', 'filterFormColumnInput', 'filterFormOperatorInput', 'filterFormValueInput', 'filterIcon', 'footerContainer', 'headerFilterRow', 'iconButtonContainer', 'iconSeparator', 'main', 'main--hasPinnedRight', 'menu', 'menuIcon', 'menuIconButton', 'menuOpen', 'menuList', 'overlay', 'overlayWrapper', 'overlayWrapperInner', 'root', 'root--densityStandard', 'root--densityComfortable', 'root--densityCompact', 'root--disableUserSelection', 'row', 'row--editable', 'row--editing', 'row--firstVisible', 'row--lastVisible', 'row--dragging', 'row--dynamicHeight', 'row--detailPanelExpanded', 'rowReorderCellPlaceholder', 'rowCount', 'rowReorderCellContainer', 'rowReorderCell', 'rowReorderCell--draggable', 'scrollArea--left', 'scrollArea--right', 'scrollArea', 'scrollbar', 'scrollbar--vertical', 'scrollbar--horizontal', 'scrollbarFiller', 'scrollbarFiller--header', 'scrollbarFiller--borderTop', 'scrollbarFiller--pinnedRight', 'selectedRowCount', 'sortIcon', 'toolbarContainer', 'toolbarFilterList', 'virtualScroller', 'virtualScrollerContent', 'virtualScrollerContent--overflowed', 'virtualScrollerRenderZone', 'pinnedColumns', 'withVerticalBorder', 'withBorderColor', 'cell--withRightBorder', 'cell--withLeftBorder', 'columnHeader--withRightBorder', 'columnHeader--withLeftBorder', 'treeDataGroupingCell', 'treeDataGroupingCellToggle', 'treeDataGroupingCellLoadingContainer', 'groupingCriteriaCell', 'groupingCriteriaCellToggle', 'pinnedRows', 'pinnedRows--top', 'pinnedRows--bottom', 'pinnedRowsRenderZone']);
|
|
12
|
+
const gridClasses = exports.gridClasses = (0, _utils.unstable_generateUtilityClasses)('MuiDataGrid', ['actionsCell', 'aggregationColumnHeader', 'aggregationColumnHeader--alignLeft', 'aggregationColumnHeader--alignCenter', 'aggregationColumnHeader--alignRight', 'aggregationColumnHeaderLabel', 'autoHeight', 'autosizing', 'booleanCell', 'cell--editable', 'cell--editing', 'cell--flex', 'cell--textCenter', 'cell--textLeft', 'cell--textRight', 'cell--rangeTop', 'cell--rangeBottom', 'cell--rangeLeft', 'cell--rangeRight', 'cell--pinnedLeft', 'cell--pinnedRight', 'cell--selectionMode', 'cell', 'cellCheckbox', 'cellEmpty', 'cellSkeleton', 'cellOffsetLeft', 'checkboxInput', 'columnHeader', 'columnHeader--alignCenter', 'columnHeader--alignLeft', 'columnHeader--alignRight', 'columnHeader--dragging', 'columnHeader--moving', 'columnHeader--numeric', 'columnHeader--sortable', 'columnHeader--sorted', 'columnHeader--filtered', 'columnHeader--pinnedLeft', 'columnHeader--pinnedRight', 'columnHeader--last', 'columnHeaderCheckbox', 'columnHeaderDraggableContainer', 'columnHeaderTitle', 'columnHeaderTitleContainer', 'columnHeaderTitleContainerContent', 'columnHeader--filledGroup', 'columnHeader--emptyGroup', 'columnHeaders', 'columnSeparator--resizable', 'columnSeparator--resizing', 'columnSeparator--sideLeft', 'columnSeparator--sideRight', 'columnSeparator', 'columnsManagement', 'columnsManagementRow', 'columnsManagementHeader', 'columnsManagementFooter', 'container--top', 'container--bottom', 'detailPanel', 'detailPanels', 'detailPanelToggleCell', 'detailPanelToggleCell--expanded', 'footerCell', 'panel', 'panelHeader', 'panelWrapper', 'panelContent', 'panelFooter', 'paper', 'editBooleanCell', 'editInputCell', 'filler', 'filler--borderTop', 'filler--pinnedLeft', 'filler--pinnedRight', 'filterForm', 'filterFormDeleteIcon', 'filterFormLogicOperatorInput', 'filterFormColumnInput', 'filterFormOperatorInput', 'filterFormValueInput', 'filterIcon', 'footerContainer', 'headerFilterRow', 'iconButtonContainer', 'iconSeparator', 'main', 'main--hasPinnedRight', 'main--hasSkeletonLoadingOverlay', 'menu', 'menuIcon', 'menuIconButton', 'menuOpen', 'menuList', 'overlay', 'overlayWrapper', 'overlayWrapperInner', 'root', 'root--densityStandard', 'root--densityComfortable', 'root--densityCompact', 'root--disableUserSelection', 'row', 'row--editable', 'row--editing', 'row--firstVisible', 'row--lastVisible', 'row--dragging', 'row--dynamicHeight', 'row--detailPanelExpanded', 'rowReorderCellPlaceholder', 'rowCount', 'rowReorderCellContainer', 'rowReorderCell', 'rowReorderCell--draggable', 'rowSkeleton', 'scrollArea--left', 'scrollArea--right', 'scrollArea', 'scrollbar', 'scrollbar--vertical', 'scrollbar--horizontal', 'scrollbarFiller', 'scrollbarFiller--header', 'scrollbarFiller--borderTop', 'scrollbarFiller--pinnedRight', 'selectedRowCount', 'sortIcon', 'toolbarContainer', 'toolbarFilterList', 'virtualScroller', 'virtualScrollerContent', 'virtualScrollerContent--overflowed', 'virtualScrollerRenderZone', 'pinnedColumns', 'withVerticalBorder', 'withBorderColor', 'cell--withRightBorder', 'cell--withLeftBorder', 'columnHeader--withRightBorder', 'columnHeader--withLeftBorder', 'treeDataGroupingCell', 'treeDataGroupingCellToggle', 'treeDataGroupingCellLoadingContainer', 'groupingCriteriaCell', 'groupingCriteriaCellToggle', 'pinnedRows', 'pinnedRows--top', 'pinnedRows--bottom', 'pinnedRowsRenderZone']);
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useGridOverlays = void 0;
|
|
7
|
+
var _utils = require("../../utils");
|
|
8
|
+
var _useGridApiContext = require("../../utils/useGridApiContext");
|
|
9
|
+
var _useGridRootProps = require("../../utils/useGridRootProps");
|
|
10
|
+
var _filter = require("../filter");
|
|
11
|
+
var _rows = require("../rows");
|
|
12
|
+
/**
|
|
13
|
+
* Uses the grid state to determine which overlay to display.
|
|
14
|
+
* Returns the active overlay type and the active loading overlay variant.
|
|
15
|
+
*/
|
|
16
|
+
const useGridOverlays = () => {
|
|
17
|
+
const apiRef = (0, _useGridApiContext.useGridApiContext)();
|
|
18
|
+
const rootProps = (0, _useGridRootProps.useGridRootProps)();
|
|
19
|
+
const totalRowCount = (0, _utils.useGridSelector)(apiRef, _rows.gridRowCountSelector);
|
|
20
|
+
const visibleRowCount = (0, _utils.useGridSelector)(apiRef, _filter.gridExpandedRowCountSelector);
|
|
21
|
+
const noRows = totalRowCount === 0;
|
|
22
|
+
const loading = (0, _utils.useGridSelector)(apiRef, _rows.gridRowsLoadingSelector);
|
|
23
|
+
const showNoRowsOverlay = !loading && noRows;
|
|
24
|
+
const showNoResultsOverlay = !loading && totalRowCount > 0 && visibleRowCount === 0;
|
|
25
|
+
let overlayType = null;
|
|
26
|
+
let loadingOverlayVariant = null;
|
|
27
|
+
if (showNoRowsOverlay) {
|
|
28
|
+
overlayType = 'noRowsOverlay';
|
|
29
|
+
}
|
|
30
|
+
if (showNoResultsOverlay) {
|
|
31
|
+
overlayType = 'noResultsOverlay';
|
|
32
|
+
}
|
|
33
|
+
if (loading) {
|
|
34
|
+
overlayType = 'loadingOverlay';
|
|
35
|
+
loadingOverlayVariant = rootProps.slotProps?.loadingOverlay?.[noRows ? 'noRowsVariant' : 'variant'] || null;
|
|
36
|
+
}
|
|
37
|
+
return {
|
|
38
|
+
overlayType,
|
|
39
|
+
loadingOverlayVariant
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
exports.useGridOverlays = useGridOverlays;
|
|
@@ -14,11 +14,11 @@ var ReactDOM = _interopRequireWildcard(require("react-dom"));
|
|
|
14
14
|
var _utils = require("@mui/utils");
|
|
15
15
|
var _useLazyRef = _interopRequireDefault(require("@mui/utils/useLazyRef"));
|
|
16
16
|
var _useTimeout = _interopRequireDefault(require("@mui/utils/useTimeout"));
|
|
17
|
+
var _useResizeObserver = require("@mui/x-internals/useResizeObserver");
|
|
17
18
|
var _styles = require("@mui/material/styles");
|
|
18
19
|
var _useGridPrivateApiContext = require("../../utils/useGridPrivateApiContext");
|
|
19
20
|
var _useGridRootProps = require("../../utils/useGridRootProps");
|
|
20
21
|
var _useGridSelector = require("../../utils/useGridSelector");
|
|
21
|
-
var _useResizeObserver = require("../../utils/useResizeObserver");
|
|
22
22
|
var _useRunOnce = require("../../utils/useRunOnce");
|
|
23
23
|
var _gridColumnsSelector = require("../columns/gridColumnsSelector");
|
|
24
24
|
var _gridDimensionsSelectors = require("../dimensions/gridDimensionsSelectors");
|
|
@@ -85,18 +85,6 @@ Object.keys(_useOnMount).forEach(function (key) {
|
|
|
85
85
|
}
|
|
86
86
|
});
|
|
87
87
|
});
|
|
88
|
-
var _useResizeObserver = require("./useResizeObserver");
|
|
89
|
-
Object.keys(_useResizeObserver).forEach(function (key) {
|
|
90
|
-
if (key === "default" || key === "__esModule") return;
|
|
91
|
-
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
92
|
-
if (key in exports && exports[key] === _useResizeObserver[key]) return;
|
|
93
|
-
Object.defineProperty(exports, key, {
|
|
94
|
-
enumerable: true,
|
|
95
|
-
get: function () {
|
|
96
|
-
return _useResizeObserver[key];
|
|
97
|
-
}
|
|
98
|
-
});
|
|
99
|
-
});
|
|
100
88
|
var _useRunOnce = require("./useRunOnce");
|
|
101
89
|
Object.keys(_useRunOnce).forEach(function (key) {
|
|
102
90
|
if (key === "default" || key === "__esModule") return;
|
package/node/index.js
CHANGED
package/node/utils/utils.js
CHANGED
|
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.clamp = void 0;
|
|
7
|
+
exports.createRandomNumberGenerator = createRandomNumberGenerator;
|
|
7
8
|
exports.deepClone = deepClone;
|
|
8
9
|
exports.escapeRegExp = escapeRegExp;
|
|
9
10
|
exports.eslintUseValue = eslintUseValue;
|
|
@@ -12,7 +13,6 @@ exports.isFunction = isFunction;
|
|
|
12
13
|
exports.isNumber = isNumber;
|
|
13
14
|
exports.isObject = isObject;
|
|
14
15
|
exports.localStorageAvailable = localStorageAvailable;
|
|
15
|
-
exports.randomNumberBetween = randomNumberBetween;
|
|
16
16
|
exports.range = range;
|
|
17
17
|
function isNumber(value) {
|
|
18
18
|
return typeof value === 'number' && !Number.isNaN(value);
|
|
@@ -189,9 +189,17 @@ function mulberry32(a) {
|
|
|
189
189
|
/* eslint-enable */
|
|
190
190
|
};
|
|
191
191
|
}
|
|
192
|
-
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* Create a random number generator from a seed. The seed
|
|
195
|
+
* ensures that the random number generator produces the
|
|
196
|
+
* same sequence of 'random' numbers on every render. It
|
|
197
|
+
* returns a function that generates a random number between
|
|
198
|
+
* a specified min and max.
|
|
199
|
+
*/
|
|
200
|
+
function createRandomNumberGenerator(seed) {
|
|
193
201
|
const random = mulberry32(seed);
|
|
194
|
-
return () => min + (max - min) * random();
|
|
202
|
+
return (min, max) => min + (max - min) * random();
|
|
195
203
|
}
|
|
196
204
|
function deepClone(obj) {
|
|
197
205
|
if (typeof structuredClone === 'function') {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mui/x-data-grid",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.9.0",
|
|
4
4
|
"description": "The Community plan edition of the Data Grid components (MUI X).",
|
|
5
5
|
"author": "MUI Team",
|
|
6
6
|
"main": "./node/index.js",
|
|
@@ -38,11 +38,12 @@
|
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
40
40
|
"@babel/runtime": "^7.24.7",
|
|
41
|
-
"@mui/system": "^5.
|
|
42
|
-
"@mui/utils": "^5.
|
|
41
|
+
"@mui/system": "^5.16.0",
|
|
42
|
+
"@mui/utils": "^5.16.0",
|
|
43
43
|
"clsx": "^2.1.1",
|
|
44
44
|
"prop-types": "^15.8.1",
|
|
45
|
-
"reselect": "^4.1.8"
|
|
45
|
+
"reselect": "^4.1.8",
|
|
46
|
+
"@mui/x-internals": "7.9.0"
|
|
46
47
|
},
|
|
47
48
|
"peerDependencies": {
|
|
48
49
|
"@mui/material": "^5.15.14",
|
package/utils/utils.d.ts
CHANGED
|
@@ -39,7 +39,14 @@ export declare function range(from: number, to: number): number[];
|
|
|
39
39
|
* We only type the public interface to avoid dozens of `as` in the function.
|
|
40
40
|
*/
|
|
41
41
|
export declare function isDeepEqual<T>(actual: any, expected: T): actual is T;
|
|
42
|
-
|
|
42
|
+
/**
|
|
43
|
+
* Create a random number generator from a seed. The seed
|
|
44
|
+
* ensures that the random number generator produces the
|
|
45
|
+
* same sequence of 'random' numbers on every render. It
|
|
46
|
+
* returns a function that generates a random number between
|
|
47
|
+
* a specified min and max.
|
|
48
|
+
*/
|
|
49
|
+
export declare function createRandomNumberGenerator(seed: number): (min: number, max: number) => number;
|
|
43
50
|
export declare function deepClone(obj: Record<string, any>): any;
|
|
44
51
|
/**
|
|
45
52
|
* Mark a value as used so eslint doesn't complain. Use this instead
|
package/utils/utils.js
CHANGED
|
@@ -172,9 +172,17 @@ function mulberry32(a) {
|
|
|
172
172
|
/* eslint-enable */
|
|
173
173
|
};
|
|
174
174
|
}
|
|
175
|
-
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* Create a random number generator from a seed. The seed
|
|
178
|
+
* ensures that the random number generator produces the
|
|
179
|
+
* same sequence of 'random' numbers on every render. It
|
|
180
|
+
* returns a function that generates a random number between
|
|
181
|
+
* a specified min and max.
|
|
182
|
+
*/
|
|
183
|
+
export function createRandomNumberGenerator(seed) {
|
|
176
184
|
const random = mulberry32(seed);
|
|
177
|
-
return () => min + (max - min) * random();
|
|
185
|
+
return (min, max) => min + (max - min) * random();
|
|
178
186
|
}
|
|
179
187
|
export function deepClone(obj) {
|
|
180
188
|
if (typeof structuredClone === 'function') {
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import * as React from 'react';
|
|
2
|
-
import { unstable_useEnhancedEffect as useEnhancedEffect } from '@mui/utils';
|
|
3
|
-
const isDevEnvironment = process.env.NODE_ENV === 'development';
|
|
4
|
-
const noop = () => {};
|
|
5
|
-
export function useResizeObserver(ref, fn, enabled) {
|
|
6
|
-
const fnRef = React.useRef(null);
|
|
7
|
-
fnRef.current = fn;
|
|
8
|
-
useEnhancedEffect(() => {
|
|
9
|
-
if (enabled === false || typeof ResizeObserver === 'undefined') {
|
|
10
|
-
return noop;
|
|
11
|
-
}
|
|
12
|
-
let frameID = 0;
|
|
13
|
-
const target = ref.current;
|
|
14
|
-
const observer = new ResizeObserver(entries => {
|
|
15
|
-
// See https://github.com/mui/mui-x/issues/8733
|
|
16
|
-
// In dev, we avoid the React warning by moving the task to the next frame.
|
|
17
|
-
// In prod, we want the task to run in the same frame as to avoid tear.
|
|
18
|
-
if (isDevEnvironment) {
|
|
19
|
-
frameID = requestAnimationFrame(() => {
|
|
20
|
-
fnRef.current(entries);
|
|
21
|
-
});
|
|
22
|
-
} else {
|
|
23
|
-
fnRef.current(entries);
|
|
24
|
-
}
|
|
25
|
-
});
|
|
26
|
-
if (target) {
|
|
27
|
-
observer.observe(target);
|
|
28
|
-
}
|
|
29
|
-
return () => {
|
|
30
|
-
if (frameID) {
|
|
31
|
-
cancelAnimationFrame(frameID);
|
|
32
|
-
}
|
|
33
|
-
observer.disconnect();
|
|
34
|
-
};
|
|
35
|
-
}, [ref, enabled]);
|
|
36
|
-
}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import * as React from 'react';
|
|
2
|
-
import { unstable_useEnhancedEffect as useEnhancedEffect } from '@mui/utils';
|
|
3
|
-
const isDevEnvironment = process.env.NODE_ENV === 'development';
|
|
4
|
-
const noop = () => {};
|
|
5
|
-
export function useResizeObserver(ref, fn, enabled) {
|
|
6
|
-
const fnRef = React.useRef(null);
|
|
7
|
-
fnRef.current = fn;
|
|
8
|
-
useEnhancedEffect(() => {
|
|
9
|
-
if (enabled === false || typeof ResizeObserver === 'undefined') {
|
|
10
|
-
return noop;
|
|
11
|
-
}
|
|
12
|
-
let frameID = 0;
|
|
13
|
-
const target = ref.current;
|
|
14
|
-
const observer = new ResizeObserver(entries => {
|
|
15
|
-
// See https://github.com/mui/mui-x/issues/8733
|
|
16
|
-
// In dev, we avoid the React warning by moving the task to the next frame.
|
|
17
|
-
// In prod, we want the task to run in the same frame as to avoid tear.
|
|
18
|
-
if (isDevEnvironment) {
|
|
19
|
-
frameID = requestAnimationFrame(() => {
|
|
20
|
-
fnRef.current(entries);
|
|
21
|
-
});
|
|
22
|
-
} else {
|
|
23
|
-
fnRef.current(entries);
|
|
24
|
-
}
|
|
25
|
-
});
|
|
26
|
-
if (target) {
|
|
27
|
-
observer.observe(target);
|
|
28
|
-
}
|
|
29
|
-
return () => {
|
|
30
|
-
if (frameID) {
|
|
31
|
-
cancelAnimationFrame(frameID);
|
|
32
|
-
}
|
|
33
|
-
observer.disconnect();
|
|
34
|
-
};
|
|
35
|
-
}, [ref, enabled]);
|
|
36
|
-
}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.useResizeObserver = useResizeObserver;
|
|
7
|
-
var React = _interopRequireWildcard(require("react"));
|
|
8
|
-
var _utils = require("@mui/utils");
|
|
9
|
-
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
10
|
-
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
11
|
-
const isDevEnvironment = process.env.NODE_ENV === 'development';
|
|
12
|
-
const noop = () => {};
|
|
13
|
-
function useResizeObserver(ref, fn, enabled) {
|
|
14
|
-
const fnRef = React.useRef(null);
|
|
15
|
-
fnRef.current = fn;
|
|
16
|
-
(0, _utils.unstable_useEnhancedEffect)(() => {
|
|
17
|
-
if (enabled === false || typeof ResizeObserver === 'undefined') {
|
|
18
|
-
return noop;
|
|
19
|
-
}
|
|
20
|
-
let frameID = 0;
|
|
21
|
-
const target = ref.current;
|
|
22
|
-
const observer = new ResizeObserver(entries => {
|
|
23
|
-
// See https://github.com/mui/mui-x/issues/8733
|
|
24
|
-
// In dev, we avoid the React warning by moving the task to the next frame.
|
|
25
|
-
// In prod, we want the task to run in the same frame as to avoid tear.
|
|
26
|
-
if (isDevEnvironment) {
|
|
27
|
-
frameID = requestAnimationFrame(() => {
|
|
28
|
-
fnRef.current(entries);
|
|
29
|
-
});
|
|
30
|
-
} else {
|
|
31
|
-
fnRef.current(entries);
|
|
32
|
-
}
|
|
33
|
-
});
|
|
34
|
-
if (target) {
|
|
35
|
-
observer.observe(target);
|
|
36
|
-
}
|
|
37
|
-
return () => {
|
|
38
|
-
if (frameID) {
|
|
39
|
-
cancelAnimationFrame(frameID);
|
|
40
|
-
}
|
|
41
|
-
observer.disconnect();
|
|
42
|
-
};
|
|
43
|
-
}, [ref, enabled]);
|
|
44
|
-
}
|