@mui/x-data-grid 7.25.0 → 7.26.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 +71 -0
- package/DataGrid/useDataGridComponent.js +2 -2
- package/components/GridRow.js +8 -2
- package/components/GridScrollArea.d.ts +5 -2
- package/components/GridScrollArea.js +32 -25
- package/components/GridSkeletonLoadingOverlay.js +2 -1
- package/components/containers/GridRoot.js +11 -9
- package/components/containers/GridRootStyles.js +3 -3
- package/components/virtualization/GridMainContainer.d.ts +2 -2
- package/components/virtualization/GridMainContainer.js +1 -1
- package/components/virtualization/GridVirtualScroller.js +21 -14
- package/hooks/core/pipeProcessing/useGridRegisterPipeProcessor.d.ts +1 -1
- package/hooks/core/pipeProcessing/useGridRegisterPipeProcessor.js +6 -4
- package/hooks/core/useGridStateInitialization.js +3 -2
- package/hooks/features/columnHeaders/useGridColumnHeaders.js +10 -14
- package/hooks/features/columns/gridColumnsSelector.d.ts +0 -5
- package/hooks/features/columns/gridColumnsSelector.js +0 -12
- package/hooks/features/dimensions/gridDimensionsSelectors.d.ts +16 -0
- package/hooks/features/dimensions/gridDimensionsSelectors.js +26 -1
- package/hooks/features/dimensions/index.d.ts +1 -1
- package/hooks/features/dimensions/index.js +1 -2
- package/hooks/features/dimensions/useGridDimensions.js +97 -70
- package/hooks/features/editing/gridEditingSelectors.d.ts +5 -1
- package/hooks/features/editing/gridEditingSelectors.js +6 -1
- package/hooks/features/editing/useGridRowEditing.js +4 -4
- package/hooks/features/filter/gridFilterState.d.ts +5 -0
- package/hooks/features/filter/gridFilterState.js +5 -0
- package/hooks/features/filter/useGridFilter.js +6 -13
- package/hooks/features/pagination/useGridPagination.js +1 -1
- package/hooks/features/rowSelection/useGridRowSelection.js +1 -1
- package/hooks/features/rowSelection/utils.js +1 -1
- package/hooks/features/rows/gridRowsMetaState.d.ts +8 -0
- package/hooks/features/rows/gridRowsUtils.d.ts +0 -4
- package/hooks/features/rows/gridRowsUtils.js +0 -16
- package/hooks/features/rows/useGridRowsMeta.js +33 -17
- package/hooks/features/sorting/gridSortingSelector.js +10 -9
- package/hooks/features/virtualization/useGridVirtualScroller.d.ts +6 -0
- package/hooks/features/virtualization/useGridVirtualScroller.js +43 -27
- package/hooks/utils/useGridSelector.d.ts +8 -1
- package/hooks/utils/useGridSelector.js +42 -8
- package/hooks/utils/useIsSSR.d.ts +1 -0
- package/hooks/utils/useIsSSR.js +5 -0
- package/index.js +1 -1
- package/internals/index.d.ts +2 -1
- package/internals/index.js +2 -1
- package/models/api/gridStateApi.d.ts +1 -0
- package/models/events/gridEventLookup.d.ts +6 -0
- package/modern/DataGrid/useDataGridComponent.js +2 -2
- package/modern/components/GridRow.js +8 -2
- package/modern/components/GridScrollArea.js +32 -25
- package/modern/components/GridSkeletonLoadingOverlay.js +2 -1
- package/modern/components/containers/GridRoot.js +11 -9
- package/modern/components/containers/GridRootStyles.js +3 -3
- package/modern/components/virtualization/GridMainContainer.js +1 -1
- package/modern/components/virtualization/GridVirtualScroller.js +21 -14
- package/modern/hooks/core/pipeProcessing/useGridRegisterPipeProcessor.js +6 -4
- package/modern/hooks/core/useGridStateInitialization.js +3 -2
- package/modern/hooks/features/columnHeaders/useGridColumnHeaders.js +10 -14
- package/modern/hooks/features/columns/gridColumnsSelector.js +0 -12
- package/modern/hooks/features/dimensions/gridDimensionsSelectors.js +26 -1
- package/modern/hooks/features/dimensions/index.js +1 -2
- package/modern/hooks/features/dimensions/useGridDimensions.js +97 -70
- package/modern/hooks/features/editing/gridEditingSelectors.js +6 -1
- package/modern/hooks/features/editing/useGridRowEditing.js +4 -4
- package/modern/hooks/features/filter/gridFilterState.js +5 -0
- package/modern/hooks/features/filter/useGridFilter.js +6 -13
- package/modern/hooks/features/pagination/useGridPagination.js +1 -1
- package/modern/hooks/features/rowSelection/useGridRowSelection.js +1 -1
- package/modern/hooks/features/rowSelection/utils.js +1 -1
- package/modern/hooks/features/rows/gridRowsUtils.js +0 -16
- package/modern/hooks/features/rows/useGridRowsMeta.js +33 -17
- package/modern/hooks/features/sorting/gridSortingSelector.js +10 -9
- package/modern/hooks/features/virtualization/useGridVirtualScroller.js +43 -27
- package/modern/hooks/utils/useGridSelector.js +42 -8
- package/modern/hooks/utils/useIsSSR.js +5 -0
- package/modern/index.js +1 -1
- package/modern/internals/index.js +2 -1
- package/node/DataGrid/useDataGridComponent.js +2 -2
- package/node/components/GridRow.js +7 -2
- package/node/components/GridScrollArea.js +31 -24
- package/node/components/GridSkeletonLoadingOverlay.js +2 -1
- package/node/components/containers/GridRoot.js +10 -8
- package/node/components/containers/GridRootStyles.js +3 -3
- package/node/components/virtualization/GridMainContainer.js +1 -1
- package/node/components/virtualization/GridVirtualScroller.js +21 -14
- package/node/hooks/core/pipeProcessing/useGridRegisterPipeProcessor.js +6 -4
- package/node/hooks/core/useGridStateInitialization.js +3 -2
- package/node/hooks/features/columnHeaders/useGridColumnHeaders.js +10 -14
- package/node/hooks/features/columns/gridColumnsSelector.js +1 -13
- package/node/hooks/features/dimensions/gridDimensionsSelectors.js +38 -2
- package/node/hooks/features/dimensions/index.js +13 -11
- package/node/hooks/features/dimensions/useGridDimensions.js +94 -67
- package/node/hooks/features/editing/gridEditingSelectors.js +5 -1
- package/node/hooks/features/editing/useGridRowEditing.js +4 -4
- package/node/hooks/features/filter/gridFilterState.js +6 -1
- package/node/hooks/features/filter/useGridFilter.js +5 -12
- package/node/hooks/features/pagination/useGridPagination.js +1 -1
- package/node/hooks/features/rowSelection/useGridRowSelection.js +1 -1
- package/node/hooks/features/rowSelection/utils.js +1 -1
- package/node/hooks/features/rows/gridRowsUtils.js +0 -17
- package/node/hooks/features/rows/useGridRowsMeta.js +31 -15
- package/node/hooks/features/sorting/gridSortingSelector.js +10 -9
- package/node/hooks/features/virtualization/useGridVirtualScroller.js +42 -26
- package/node/hooks/utils/useGridSelector.js +42 -8
- package/node/hooks/utils/useIsSSR.js +12 -0
- package/node/index.js +1 -1
- package/node/internals/index.js +20 -7
- package/package.json +3 -2
|
@@ -13,6 +13,7 @@ var _utils = require("@mui/utils");
|
|
|
13
13
|
var _throttle = require("@mui/x-internals/throttle");
|
|
14
14
|
var _useGridApiEventHandler = require("../../utils/useGridApiEventHandler");
|
|
15
15
|
var _useGridApiMethod = require("../../utils/useGridApiMethod");
|
|
16
|
+
var _createSelector = require("../../../utils/createSelector");
|
|
16
17
|
var _useGridLogger = require("../../utils/useGridLogger");
|
|
17
18
|
var _columns = require("../columns");
|
|
18
19
|
var _gridDimensionsSelectors = require("./gridDimensionsSelectors");
|
|
@@ -26,6 +27,7 @@ var _gridColumnsUtils = require("../columns/gridColumnsUtils");
|
|
|
26
27
|
var _dataGridPropsDefaultValues = require("../../../constants/dataGridPropsDefaultValues");
|
|
27
28
|
var _roundToDecimalPlaces = require("../../../utils/roundToDecimalPlaces");
|
|
28
29
|
var _isJSDOM = require("../../../utils/isJSDOM");
|
|
30
|
+
var _utils3 = require("../../../utils/utils");
|
|
29
31
|
const EMPTY_SIZE = {
|
|
30
32
|
width: 0,
|
|
31
33
|
height: 0
|
|
@@ -52,40 +54,48 @@ const EMPTY_DIMENSIONS = {
|
|
|
52
54
|
topContainerHeight: 0,
|
|
53
55
|
bottomContainerHeight: 0
|
|
54
56
|
};
|
|
55
|
-
const dimensionsStateInitializer = state => {
|
|
57
|
+
const dimensionsStateInitializer = (state, props, apiRef) => {
|
|
56
58
|
const dimensions = EMPTY_DIMENSIONS;
|
|
59
|
+
const density = (0, _density.gridDensityFactorSelector)(apiRef);
|
|
57
60
|
return (0, _extends2.default)({}, state, {
|
|
58
|
-
dimensions
|
|
61
|
+
dimensions: (0, _extends2.default)({}, dimensions, getStaticDimensions(props, apiRef, density, (0, _columns.gridVisiblePinnedColumnDefinitionsSelector)(apiRef)))
|
|
59
62
|
});
|
|
60
63
|
};
|
|
61
64
|
exports.dimensionsStateInitializer = dimensionsStateInitializer;
|
|
65
|
+
const columnsTotalWidthSelector = (0, _createSelector.createSelector)(_columns.gridVisibleColumnDefinitionsSelector, _columns.gridColumnPositionsSelector, (visibleColumns, positions) => {
|
|
66
|
+
const colCount = visibleColumns.length;
|
|
67
|
+
if (colCount === 0) {
|
|
68
|
+
return 0;
|
|
69
|
+
}
|
|
70
|
+
return (0, _roundToDecimalPlaces.roundToDecimalPlaces)(positions[colCount - 1] + visibleColumns[colCount - 1].computedWidth, 1);
|
|
71
|
+
});
|
|
62
72
|
function useGridDimensions(apiRef, props) {
|
|
63
73
|
const logger = (0, _useGridLogger.useGridLogger)(apiRef, 'useResizeContainer');
|
|
64
74
|
const errorShown = React.useRef(false);
|
|
65
75
|
const rootDimensionsRef = React.useRef(EMPTY_SIZE);
|
|
66
|
-
const dimensionsState = (0, _utils2.useGridSelector)(apiRef, _gridDimensionsSelectors.gridDimensionsSelector);
|
|
67
|
-
const rowsMeta = (0, _utils2.useGridSelector)(apiRef, _gridRowsMetaSelector.gridRowsMetaSelector);
|
|
68
76
|
const pinnedColumns = (0, _utils2.useGridSelector)(apiRef, _columns.gridVisiblePinnedColumnDefinitionsSelector);
|
|
69
77
|
const densityFactor = (0, _utils2.useGridSelector)(apiRef, _density.gridDensityFactorSelector);
|
|
70
|
-
const
|
|
71
|
-
const
|
|
72
|
-
const
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
React.useEffect(() => debouncedSetSavedSize.clear, [debouncedSetSavedSize]);
|
|
78
|
+
const columnsTotalWidth = (0, _utils2.useGridSelector)(apiRef, columnsTotalWidthSelector);
|
|
79
|
+
const isFirstSizing = React.useRef(true);
|
|
80
|
+
const {
|
|
81
|
+
rowHeight,
|
|
82
|
+
headerHeight,
|
|
83
|
+
groupHeaderHeight,
|
|
84
|
+
headerFilterHeight,
|
|
85
|
+
headersTotalHeight,
|
|
86
|
+
leftPinnedWidth,
|
|
87
|
+
rightPinnedWidth
|
|
88
|
+
} = getStaticDimensions(props, apiRef, densityFactor, pinnedColumns);
|
|
82
89
|
const previousSize = React.useRef(undefined);
|
|
83
|
-
const getRootDimensions = () => apiRef.current.state
|
|
84
|
-
const setDimensions =
|
|
90
|
+
const getRootDimensions = React.useCallback(() => (0, _gridDimensionsSelectors.gridDimensionsSelector)(apiRef.current.state), [apiRef]);
|
|
91
|
+
const setDimensions = React.useCallback(dimensions => {
|
|
85
92
|
apiRef.current.setState(state => (0, _extends2.default)({}, state, {
|
|
86
93
|
dimensions
|
|
87
94
|
}));
|
|
88
|
-
|
|
95
|
+
if (apiRef.current.rootElementRef.current) {
|
|
96
|
+
setCSSVariables(apiRef.current.rootElementRef.current, (0, _gridDimensionsSelectors.gridDimensionsSelector)(apiRef.current.state));
|
|
97
|
+
}
|
|
98
|
+
}, [apiRef]);
|
|
89
99
|
const resize = React.useCallback(() => {
|
|
90
100
|
const element = apiRef.current.mainElementRef.current;
|
|
91
101
|
if (!element) {
|
|
@@ -106,10 +116,7 @@ function useGridDimensions(apiRef, props) {
|
|
|
106
116
|
if (!dimensions.isReady) {
|
|
107
117
|
return 0;
|
|
108
118
|
}
|
|
109
|
-
const currentPage = (0, _useGridVisibleRows.getVisibleRows)(apiRef
|
|
110
|
-
pagination: props.pagination,
|
|
111
|
-
paginationMode: props.paginationMode
|
|
112
|
-
});
|
|
119
|
+
const currentPage = (0, _useGridVisibleRows.getVisibleRows)(apiRef);
|
|
113
120
|
|
|
114
121
|
// TODO: Use a combination of scrollTop, dimensions.viewportInnerSize.height and rowsMeta.possitions
|
|
115
122
|
// to find out the maximum number of rows that can fit in the visible part of the grid
|
|
@@ -120,16 +127,19 @@ function useGridDimensions(apiRef, props) {
|
|
|
120
127
|
}
|
|
121
128
|
const maximumPageSizeWithoutScrollBar = Math.floor(dimensions.viewportInnerSize.height / rowHeight);
|
|
122
129
|
return Math.min(maximumPageSizeWithoutScrollBar, currentPage.rows.length);
|
|
123
|
-
}, [apiRef, props.
|
|
130
|
+
}, [apiRef, props.getRowHeight, rowHeight]);
|
|
124
131
|
const updateDimensions = React.useCallback(() => {
|
|
132
|
+
if (isFirstSizing.current) {
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
125
135
|
// All the floating point dimensions should be rounded to .1 decimal places to avoid subpixel rendering issues
|
|
126
136
|
// https://github.com/mui/mui-x/issues/9550#issuecomment-1619020477
|
|
127
137
|
// https://github.com/mui/mui-x/issues/15721
|
|
128
138
|
const rootElement = apiRef.current.rootElementRef.current;
|
|
129
|
-
const
|
|
130
|
-
const
|
|
131
|
-
const topContainerHeight = headersTotalHeight +
|
|
132
|
-
const bottomContainerHeight =
|
|
139
|
+
const scrollbarSize = measureScrollbarSize(rootElement, props.scrollbarSize);
|
|
140
|
+
const rowsMeta = (0, _gridRowsMetaSelector.gridRowsMetaSelector)(apiRef.current.state);
|
|
141
|
+
const topContainerHeight = headersTotalHeight + rowsMeta.pinnedTopRowsTotalHeight;
|
|
142
|
+
const bottomContainerHeight = rowsMeta.pinnedBottomRowsTotalHeight;
|
|
133
143
|
const nonPinnedColumnsTotalWidth = columnsTotalWidth - leftPinnedWidth - rightPinnedWidth;
|
|
134
144
|
const contentSize = {
|
|
135
145
|
width: nonPinnedColumnsTotalWidth,
|
|
@@ -207,12 +217,21 @@ function useGridDimensions(apiRef, props) {
|
|
|
207
217
|
bottomContainerHeight
|
|
208
218
|
};
|
|
209
219
|
const prevDimensions = apiRef.current.state.dimensions;
|
|
220
|
+
if ((0, _utils3.isDeepEqual)(prevDimensions, newDimensions)) {
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
210
223
|
setDimensions(newDimensions);
|
|
211
224
|
if (!areElementSizesEqual(newDimensions.viewportInnerSize, prevDimensions.viewportInnerSize)) {
|
|
212
225
|
apiRef.current.publishEvent('viewportInnerSizeChange', newDimensions.viewportInnerSize);
|
|
213
226
|
}
|
|
214
227
|
apiRef.current.updateRenderContext?.();
|
|
215
|
-
}, [apiRef, setDimensions, props.scrollbarSize, props.autoHeight,
|
|
228
|
+
}, [apiRef, setDimensions, props.scrollbarSize, props.autoHeight, rowHeight, headerHeight, groupHeaderHeight, headerFilterHeight, columnsTotalWidth, headersTotalHeight, leftPinnedWidth, rightPinnedWidth]);
|
|
229
|
+
const updateDimensionCallback = (0, _utils.unstable_useEventCallback)(updateDimensions);
|
|
230
|
+
const debouncedUpdateDimensions = React.useMemo(() => props.resizeThrottleMs > 0 ? (0, _throttle.throttle)(() => {
|
|
231
|
+
updateDimensionCallback();
|
|
232
|
+
apiRef.current.publishEvent('debouncedResize', rootDimensionsRef.current);
|
|
233
|
+
}, props.resizeThrottleMs) : undefined, [apiRef, props.resizeThrottleMs, updateDimensionCallback]);
|
|
234
|
+
React.useEffect(() => debouncedUpdateDimensions?.clear, [debouncedUpdateDimensions]);
|
|
216
235
|
const apiPublic = {
|
|
217
236
|
resize,
|
|
218
237
|
getRootDimensions
|
|
@@ -221,35 +240,12 @@ function useGridDimensions(apiRef, props) {
|
|
|
221
240
|
updateDimensions,
|
|
222
241
|
getViewportPageSize
|
|
223
242
|
};
|
|
243
|
+
(0, _utils.unstable_useEnhancedEffect)(updateDimensions, [updateDimensions]);
|
|
224
244
|
(0, _useGridApiMethod.useGridApiMethod)(apiRef, apiPublic, 'public');
|
|
225
245
|
(0, _useGridApiMethod.useGridApiMethod)(apiRef, apiPrivate, 'private');
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
apiRef.current.publishEvent('debouncedResize', rootDimensionsRef.current);
|
|
230
|
-
}
|
|
231
|
-
}, [apiRef, savedSize, updateDimensions]);
|
|
232
|
-
const root = apiRef.current.rootElementRef.current;
|
|
233
|
-
(0, _utils.unstable_useEnhancedEffect)(() => {
|
|
234
|
-
if (!root) {
|
|
235
|
-
return;
|
|
236
|
-
}
|
|
237
|
-
const set = (k, v) => root.style.setProperty(k, v);
|
|
238
|
-
set('--DataGrid-width', `${dimensionsState.viewportOuterSize.width}px`);
|
|
239
|
-
set('--DataGrid-hasScrollX', `${Number(dimensionsState.hasScrollX)}`);
|
|
240
|
-
set('--DataGrid-hasScrollY', `${Number(dimensionsState.hasScrollY)}`);
|
|
241
|
-
set('--DataGrid-scrollbarSize', `${dimensionsState.scrollbarSize}px`);
|
|
242
|
-
set('--DataGrid-rowWidth', `${dimensionsState.rowWidth}px`);
|
|
243
|
-
set('--DataGrid-columnsTotalWidth', `${dimensionsState.columnsTotalWidth}px`);
|
|
244
|
-
set('--DataGrid-leftPinnedWidth', `${dimensionsState.leftPinnedWidth}px`);
|
|
245
|
-
set('--DataGrid-rightPinnedWidth', `${dimensionsState.rightPinnedWidth}px`);
|
|
246
|
-
set('--DataGrid-headerHeight', `${dimensionsState.headerHeight}px`);
|
|
247
|
-
set('--DataGrid-headersTotalHeight', `${dimensionsState.headersTotalHeight}px`);
|
|
248
|
-
set('--DataGrid-topContainerHeight', `${dimensionsState.topContainerHeight}px`);
|
|
249
|
-
set('--DataGrid-bottomContainerHeight', `${dimensionsState.bottomContainerHeight}px`);
|
|
250
|
-
set('--height', `${dimensionsState.rowHeight}px`);
|
|
251
|
-
}, [root, dimensionsState]);
|
|
252
|
-
const isFirstSizing = React.useRef(true);
|
|
246
|
+
const handleRootMount = React.useCallback(root => {
|
|
247
|
+
setCSSVariables(root, (0, _gridDimensionsSelectors.gridDimensionsSelector)(apiRef.current.state));
|
|
248
|
+
}, [apiRef]);
|
|
253
249
|
const handleResize = React.useCallback(size => {
|
|
254
250
|
rootDimensionsRef.current = size;
|
|
255
251
|
if (size.height === 0 && !errorShown.current && !props.autoHeight && !_isJSDOM.isJSDOM) {
|
|
@@ -260,28 +256,58 @@ function useGridDimensions(apiRef, props) {
|
|
|
260
256
|
logger.error(['The parent DOM element of the Data Grid has an empty width.', 'Please make sure that this element has an intrinsic width.', 'The grid displays with a width of 0px.', '', 'More details: https://mui.com/r/x-data-grid-no-dimensions.'].join('\n'));
|
|
261
257
|
errorShown.current = true;
|
|
262
258
|
}
|
|
263
|
-
if (isFirstSizing.current) {
|
|
259
|
+
if (isFirstSizing.current || !debouncedUpdateDimensions) {
|
|
264
260
|
// We want to initialize the grid dimensions as soon as possible to avoid flickering
|
|
265
|
-
setSavedSize(size);
|
|
266
261
|
isFirstSizing.current = false;
|
|
262
|
+
updateDimensions();
|
|
267
263
|
return;
|
|
268
264
|
}
|
|
269
|
-
|
|
270
|
-
}, [props.autoHeight,
|
|
271
|
-
(0,
|
|
272
|
-
(0, _useGridApiEventHandler.useGridApiOptionHandler)(apiRef, '
|
|
273
|
-
(0, _useGridApiEventHandler.useGridApiOptionHandler)(apiRef, 'paginationModelChange', updateDimensions);
|
|
274
|
-
(0, _useGridApiEventHandler.useGridApiOptionHandler)(apiRef, 'columnsChange', updateDimensions);
|
|
275
|
-
(0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'resize', handleResize);
|
|
265
|
+
debouncedUpdateDimensions();
|
|
266
|
+
}, [updateDimensions, props.autoHeight, debouncedUpdateDimensions, logger]);
|
|
267
|
+
(0, _useGridApiEventHandler.useGridApiOptionHandler)(apiRef, 'rootMount', handleRootMount);
|
|
268
|
+
(0, _useGridApiEventHandler.useGridApiOptionHandler)(apiRef, 'resize', handleResize);
|
|
276
269
|
(0, _useGridApiEventHandler.useGridApiOptionHandler)(apiRef, 'debouncedResize', props.onResize);
|
|
277
270
|
}
|
|
278
|
-
function
|
|
271
|
+
function setCSSVariables(root, dimensions) {
|
|
272
|
+
const set = (k, v) => root.style.setProperty(k, v);
|
|
273
|
+
set('--DataGrid-hasScrollX', `${Number(dimensions.hasScrollX)}`);
|
|
274
|
+
set('--DataGrid-hasScrollY', `${Number(dimensions.hasScrollY)}`);
|
|
275
|
+
set('--DataGrid-scrollbarSize', `${dimensions.scrollbarSize}px`);
|
|
276
|
+
set('--DataGrid-rowWidth', `${dimensions.rowWidth}px`);
|
|
277
|
+
set('--DataGrid-columnsTotalWidth', `${dimensions.columnsTotalWidth}px`);
|
|
278
|
+
set('--DataGrid-leftPinnedWidth', `${dimensions.leftPinnedWidth}px`);
|
|
279
|
+
set('--DataGrid-rightPinnedWidth', `${dimensions.rightPinnedWidth}px`);
|
|
280
|
+
set('--DataGrid-headerHeight', `${dimensions.headerHeight}px`);
|
|
281
|
+
set('--DataGrid-headersTotalHeight', `${dimensions.headersTotalHeight}px`);
|
|
282
|
+
set('--DataGrid-topContainerHeight', `${dimensions.topContainerHeight}px`);
|
|
283
|
+
set('--DataGrid-bottomContainerHeight', `${dimensions.bottomContainerHeight}px`);
|
|
284
|
+
set('--height', `${dimensions.rowHeight}px`);
|
|
285
|
+
}
|
|
286
|
+
function getStaticDimensions(props, apiRef, density, pinnedColumnns) {
|
|
287
|
+
const validRowHeight = (0, _gridRowsUtils.getValidRowHeight)(props.rowHeight, _dataGridPropsDefaultValues.DATA_GRID_PROPS_DEFAULT_VALUES.rowHeight, _gridRowsUtils.rowHeightWarning);
|
|
288
|
+
return {
|
|
289
|
+
rowHeight: Math.floor(validRowHeight * density),
|
|
290
|
+
headerHeight: Math.floor(props.columnHeaderHeight * density),
|
|
291
|
+
groupHeaderHeight: Math.floor((props.columnGroupHeaderHeight ?? props.columnHeaderHeight) * density),
|
|
292
|
+
headerFilterHeight: Math.floor((props.headerFilterHeight ?? props.columnHeaderHeight) * density),
|
|
293
|
+
columnsTotalWidth: columnsTotalWidthSelector(apiRef),
|
|
294
|
+
headersTotalHeight: (0, _gridColumnsUtils.getTotalHeaderHeight)(apiRef, props),
|
|
295
|
+
leftPinnedWidth: pinnedColumnns.left.reduce((w, col) => w + col.computedWidth, 0),
|
|
296
|
+
rightPinnedWidth: pinnedColumnns.right.reduce((w, col) => w + col.computedWidth, 0)
|
|
297
|
+
};
|
|
298
|
+
}
|
|
299
|
+
const scrollbarSizeCache = new WeakMap();
|
|
300
|
+
function measureScrollbarSize(rootElement, scrollbarSize) {
|
|
279
301
|
if (scrollbarSize !== undefined) {
|
|
280
302
|
return scrollbarSize;
|
|
281
303
|
}
|
|
282
|
-
if (rootElement === null
|
|
304
|
+
if (rootElement === null) {
|
|
283
305
|
return 0;
|
|
284
306
|
}
|
|
307
|
+
const cachedSize = scrollbarSizeCache.get(rootElement);
|
|
308
|
+
if (cachedSize !== undefined) {
|
|
309
|
+
return cachedSize;
|
|
310
|
+
}
|
|
285
311
|
const doc = (0, _utils.unstable_ownerDocument)(rootElement);
|
|
286
312
|
const scrollDiv = doc.createElement('div');
|
|
287
313
|
scrollDiv.style.width = '99px';
|
|
@@ -292,6 +318,7 @@ function measureScrollbarSize(rootElement, columnsTotalWidth, scrollbarSize) {
|
|
|
292
318
|
rootElement.appendChild(scrollDiv);
|
|
293
319
|
const size = scrollDiv.offsetWidth - scrollDiv.clientWidth;
|
|
294
320
|
rootElement.removeChild(scrollDiv);
|
|
321
|
+
scrollbarSizeCache.set(rootElement, size);
|
|
295
322
|
return size;
|
|
296
323
|
}
|
|
297
324
|
function areElementSizesEqual(a, b) {
|
|
@@ -5,12 +5,16 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.gridRowIsEditingSelector = exports.gridEditRowsStateSelector = exports.gridEditCellStateSelector = void 0;
|
|
7
7
|
var _createSelector = require("../../../utils/createSelector");
|
|
8
|
+
var _gridEditRowModel = require("../../../models/gridEditRowModel");
|
|
8
9
|
/**
|
|
9
10
|
* Select the row editing state.
|
|
10
11
|
*/
|
|
11
12
|
const gridEditRowsStateSelector = state => state.editRows;
|
|
12
13
|
exports.gridEditRowsStateSelector = gridEditRowsStateSelector;
|
|
13
|
-
const gridRowIsEditingSelector = exports.gridRowIsEditingSelector = (0, _createSelector.createSelectorV8)(gridEditRowsStateSelector, (editRows,
|
|
14
|
+
const gridRowIsEditingSelector = exports.gridRowIsEditingSelector = (0, _createSelector.createSelectorV8)(gridEditRowsStateSelector, (editRows, {
|
|
15
|
+
rowId,
|
|
16
|
+
editMode
|
|
17
|
+
}) => editMode === _gridEditRowModel.GridEditModes.Row && Boolean(editRows[rowId]));
|
|
14
18
|
const gridEditCellStateSelector = exports.gridEditCellStateSelector = (0, _createSelector.createSelectorV8)(gridEditRowsStateSelector, (editRows, {
|
|
15
19
|
rowId,
|
|
16
20
|
field
|
|
@@ -240,10 +240,10 @@ const useGridRowEditing = (apiRef, props) => {
|
|
|
240
240
|
(0, _useGridApiEventHandler.useGridApiOptionHandler)(apiRef, 'rowEditStart', props.onRowEditStart);
|
|
241
241
|
(0, _useGridApiEventHandler.useGridApiOptionHandler)(apiRef, 'rowEditStop', props.onRowEditStop);
|
|
242
242
|
const getRowMode = React.useCallback(id => {
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
243
|
+
const isEditing = (0, _gridEditingSelectors.gridRowIsEditingSelector)(apiRef, {
|
|
244
|
+
rowId: id,
|
|
245
|
+
editMode: props.editMode
|
|
246
|
+
});
|
|
247
247
|
return isEditing ? _gridEditRowModel.GridRowModes.Edit : _gridEditRowModel.GridRowModes.View;
|
|
248
248
|
}, [apiRef, props.editMode]);
|
|
249
249
|
const updateRowModesModel = (0, _utils.unstable_useEventCallback)(newModel => {
|
|
@@ -3,8 +3,13 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.getDefaultGridFilterModel = void 0;
|
|
6
|
+
exports.getDefaultGridFilterModel = exports.defaultGridFilterLookup = void 0;
|
|
7
7
|
var _gridFilterItem = require("../../../models/gridFilterItem");
|
|
8
|
+
const defaultGridFilterLookup = exports.defaultGridFilterLookup = {
|
|
9
|
+
filteredRowsLookup: {},
|
|
10
|
+
filteredChildrenCountLookup: {},
|
|
11
|
+
filteredDescendantCountLookup: {}
|
|
12
|
+
};
|
|
8
13
|
const getDefaultGridFilterModel = () => ({
|
|
9
14
|
items: [],
|
|
10
15
|
logicOperator: _gridFilterItem.GridLogicOperator.And,
|
|
@@ -28,12 +28,9 @@ var _jsxRuntime = require("react/jsx-runtime");
|
|
|
28
28
|
const filterStateInitializer = (state, props, apiRef) => {
|
|
29
29
|
const filterModel = props.filterModel ?? props.initialState?.filter?.filterModel ?? (0, _gridFilterState.getDefaultGridFilterModel)();
|
|
30
30
|
return (0, _extends2.default)({}, state, {
|
|
31
|
-
filter: {
|
|
32
|
-
filterModel: (0, _gridFilterUtils.sanitizeFilterModel)(filterModel, props.disableMultipleColumnsFiltering, apiRef)
|
|
33
|
-
|
|
34
|
-
filteredChildrenCountLookup: {},
|
|
35
|
-
filteredDescendantCountLookup: {}
|
|
36
|
-
},
|
|
31
|
+
filter: (0, _extends2.default)({
|
|
32
|
+
filterModel: (0, _gridFilterUtils.sanitizeFilterModel)(filterModel, props.disableMultipleColumnsFiltering, apiRef)
|
|
33
|
+
}, _gridFilterState.defaultGridFilterLookup),
|
|
37
34
|
visibleRowsLookup: {}
|
|
38
35
|
});
|
|
39
36
|
};
|
|
@@ -280,12 +277,8 @@ const useGridFilter = (apiRef, props) => {
|
|
|
280
277
|
} = props;
|
|
281
278
|
const getRowsRef = (0, _useLazyRef.useLazyRef)(createMemoizedValues);
|
|
282
279
|
const flatFilteringMethod = React.useCallback(params => {
|
|
283
|
-
if (props.filterMode !== 'client' || !params.isRowMatchingFilters) {
|
|
284
|
-
return
|
|
285
|
-
filteredRowsLookup: {},
|
|
286
|
-
filteredChildrenCountLookup: {},
|
|
287
|
-
filteredDescendantCountLookup: {}
|
|
288
|
-
};
|
|
280
|
+
if (props.filterMode !== 'client' || !params.isRowMatchingFilters || !params.filterModel.items.length && !params.filterModel.quickFilterValues?.length) {
|
|
281
|
+
return _gridFilterState.defaultGridFilterLookup;
|
|
289
282
|
}
|
|
290
283
|
const dataRowIdToModelLookup = (0, _rows.gridRowsLookupSelector)(apiRef);
|
|
291
284
|
const filteredRowsLookup = {};
|
|
@@ -13,7 +13,7 @@ var _useGridPaginationMeta = require("./useGridPaginationMeta");
|
|
|
13
13
|
const paginationStateInitializer = (state, props) => {
|
|
14
14
|
const paginationModel = (0, _extends2.default)({}, (0, _gridPaginationUtils.getDefaultGridPaginationModel)(props.autoPageSize), props.paginationModel ?? props.initialState?.pagination?.paginationModel);
|
|
15
15
|
(0, _gridPaginationUtils.throwIfPageSizeExceedsTheLimit)(paginationModel.pageSize, props.signature);
|
|
16
|
-
const rowCount = props.rowCount ?? props.initialState?.pagination?.rowCount;
|
|
16
|
+
const rowCount = props.rowCount ?? props.initialState?.pagination?.rowCount ?? (props.paginationMode === 'client' ? state.rows?.totalRowCount : undefined);
|
|
17
17
|
const meta = props.paginationMeta ?? props.initialState?.pagination?.meta ?? {};
|
|
18
18
|
return (0, _extends2.default)({}, state, {
|
|
19
19
|
pagination: (0, _extends2.default)({}, state.pagination, {
|
|
@@ -267,7 +267,7 @@ const useGridRowSelection = (apiRef, props) => {
|
|
|
267
267
|
if (props.filterMode === 'server') {
|
|
268
268
|
return !rowsLookup[id];
|
|
269
269
|
}
|
|
270
|
-
return filteredRowsLookup[id]
|
|
270
|
+
return !rowsLookup[id] || filteredRowsLookup[id] === false;
|
|
271
271
|
};
|
|
272
272
|
let hasChanged = false;
|
|
273
273
|
currentSelection.forEach(id => {
|
|
@@ -100,7 +100,7 @@ const getFilteredRowNodeSiblings = (tree, filteredRows, id) => {
|
|
|
100
100
|
return [];
|
|
101
101
|
}
|
|
102
102
|
const parentNode = tree[parent];
|
|
103
|
-
return parentNode.children.filter(childId => childId !== id && filteredRows[childId]);
|
|
103
|
+
return parentNode.children.filter(childId => childId !== id && filteredRows[childId] !== false);
|
|
104
104
|
};
|
|
105
105
|
const findRowsToSelect = (apiRef, tree, selectedRow, autoSelectDescendants, autoSelectParents, addRow) => {
|
|
106
106
|
const filteredRows = (0, _gridFilterSelector.gridFilteredRowsLookupSelector)(apiRef);
|
|
@@ -5,12 +5,10 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports.buildRootGroup = exports.GRID_ROOT_GROUP_ID = exports.GRID_ID_AUTOGENERATED = void 0;
|
|
8
|
-
exports.calculatePinnedRowsHeight = calculatePinnedRowsHeight;
|
|
9
8
|
exports.checkGridRowIdIsValid = checkGridRowIdIsValid;
|
|
10
9
|
exports.computeRowsUpdates = computeRowsUpdates;
|
|
11
10
|
exports.updateCacheWithNewRows = exports.rowHeightWarning = exports.minimalContentHeight = exports.isAutogeneratedRowNode = exports.isAutogeneratedRow = exports.getValidRowHeight = exports.getTreeNodeDescendants = exports.getTopLevelRowCount = exports.getRowsStateFromCache = exports.getRowIdFromRowModel = exports.getRowHeightWarning = exports.createRowsInternalCache = void 0;
|
|
12
11
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
13
|
-
var _gridRowsSelector = require("./gridRowsSelector");
|
|
14
12
|
const GRID_ROOT_GROUP_ID = exports.GRID_ROOT_GROUP_ID = `auto-generated-group-node-root`;
|
|
15
13
|
const GRID_ID_AUTOGENERATED = exports.GRID_ID_AUTOGENERATED = Symbol('mui.id_autogenerated');
|
|
16
14
|
const buildRootGroup = () => ({
|
|
@@ -289,21 +287,6 @@ const updateCacheWithNewRows = ({
|
|
|
289
287
|
};
|
|
290
288
|
};
|
|
291
289
|
exports.updateCacheWithNewRows = updateCacheWithNewRows;
|
|
292
|
-
function calculatePinnedRowsHeight(apiRef) {
|
|
293
|
-
const pinnedRows = (0, _gridRowsSelector.gridPinnedRowsSelector)(apiRef);
|
|
294
|
-
const topPinnedRowsHeight = pinnedRows?.top?.reduce((acc, value) => {
|
|
295
|
-
acc += apiRef.current.unstable_getRowHeight(value.id);
|
|
296
|
-
return acc;
|
|
297
|
-
}, 0) || 0;
|
|
298
|
-
const bottomPinnedRowsHeight = pinnedRows?.bottom?.reduce((acc, value) => {
|
|
299
|
-
acc += apiRef.current.unstable_getRowHeight(value.id);
|
|
300
|
-
return acc;
|
|
301
|
-
}, 0) || 0;
|
|
302
|
-
return {
|
|
303
|
-
top: topPinnedRowsHeight,
|
|
304
|
-
bottom: bottomPinnedRowsHeight
|
|
305
|
-
};
|
|
306
|
-
}
|
|
307
290
|
const minimalContentHeight = exports.minimalContentHeight = 'var(--DataGrid-overlayHeight, calc(var(--height) * 2))';
|
|
308
291
|
function computeRowsUpdates(apiRef, updates, getRowId) {
|
|
309
292
|
const nonPinnedRowsUpdates = [];
|
|
@@ -16,9 +16,7 @@ var _utils2 = require("../../../utils/utils");
|
|
|
16
16
|
var _useGridApiMethod = require("../../utils/useGridApiMethod");
|
|
17
17
|
var _useGridSelector = require("../../utils/useGridSelector");
|
|
18
18
|
var _densitySelector = require("../density/densitySelector");
|
|
19
|
-
var _gridFilterSelector = require("../filter/gridFilterSelector");
|
|
20
19
|
var _gridPaginationSelector = require("../pagination/gridPaginationSelector");
|
|
21
|
-
var _gridSortingSelector = require("../sorting/gridSortingSelector");
|
|
22
20
|
var _pipeProcessing = require("../../core/pipeProcessing");
|
|
23
21
|
var _gridRowsSelector = require("./gridRowsSelector");
|
|
24
22
|
var _gridDimensionsSelectors = require("../dimensions/gridDimensionsSelectors");
|
|
@@ -29,10 +27,18 @@ const rowsMetaStateInitializer = (state, props, apiRef) => {
|
|
|
29
27
|
apiRef.current.caches.rowsMeta = {
|
|
30
28
|
heights: new Map()
|
|
31
29
|
};
|
|
30
|
+
const baseRowHeight = (0, _gridDimensionsSelectors.gridRowHeightSelector)(apiRef.current.state);
|
|
31
|
+
const dataRowCount = (0, _gridRowsSelector.gridRowCountSelector)(apiRef);
|
|
32
|
+
const pagination = (0, _gridPaginationSelector.gridPaginationSelector)(apiRef.current.state);
|
|
33
|
+
const rowCount = Math.min(pagination.enabled ? pagination.paginationModel.pageSize : dataRowCount, dataRowCount);
|
|
32
34
|
return (0, _extends2.default)({}, state, {
|
|
33
35
|
rowsMeta: {
|
|
34
|
-
currentPageTotalHeight:
|
|
35
|
-
positions:
|
|
36
|
+
currentPageTotalHeight: rowCount * baseRowHeight,
|
|
37
|
+
positions: Array.from({
|
|
38
|
+
length: rowCount
|
|
39
|
+
}, (_, i) => i * baseRowHeight),
|
|
40
|
+
pinnedTopRowsTotalHeight: 0,
|
|
41
|
+
pinnedBottomRowsTotalHeight: 0
|
|
36
42
|
}
|
|
37
43
|
});
|
|
38
44
|
};
|
|
@@ -53,12 +59,9 @@ const useGridRowsMeta = (apiRef, props) => {
|
|
|
53
59
|
const hasRowWithAutoHeight = React.useRef(false);
|
|
54
60
|
const isHeightMetaValid = React.useRef(false);
|
|
55
61
|
const densityFactor = (0, _useGridSelector.useGridSelector)(apiRef, _densitySelector.gridDensityFactorSelector);
|
|
56
|
-
const filterModel = (0, _useGridSelector.useGridSelector)(apiRef, _gridFilterSelector.gridFilterModelSelector);
|
|
57
|
-
const paginationState = (0, _useGridSelector.useGridSelector)(apiRef, _gridPaginationSelector.gridPaginationSelector);
|
|
58
|
-
const sortModel = (0, _useGridSelector.useGridSelector)(apiRef, _gridSortingSelector.gridSortModelSelector);
|
|
59
62
|
const currentPage = (0, _useGridVisibleRows.useGridVisibleRows)(apiRef, props);
|
|
60
63
|
const pinnedRows = (0, _useGridSelector.useGridSelector)(apiRef, _gridRowsSelector.gridPinnedRowsSelector);
|
|
61
|
-
const rowHeight = (0, _useGridSelector.useGridSelector)(apiRef,
|
|
64
|
+
const rowHeight = (0, _useGridSelector.useGridSelector)(apiRef, _gridDimensionsSelectors.gridRowHeightSelector);
|
|
62
65
|
const getRowHeightEntry = rowId => {
|
|
63
66
|
let entry = heightCache.get(rowId);
|
|
64
67
|
if (entry === undefined) {
|
|
@@ -123,8 +126,14 @@ const useGridRowsMeta = (apiRef, props) => {
|
|
|
123
126
|
}, [apiRef, currentPage.rows, getRowHeightProp, getEstimatedRowHeight, rowHeight, getRowSpacing, densityFactor]);
|
|
124
127
|
const hydrateRowsMeta = React.useCallback(() => {
|
|
125
128
|
hasRowWithAutoHeight.current = false;
|
|
126
|
-
pinnedRows.top.
|
|
127
|
-
|
|
129
|
+
const pinnedTopRowsTotalHeight = pinnedRows.top.reduce((acc, row) => {
|
|
130
|
+
const entry = processHeightEntry(row);
|
|
131
|
+
return acc + entry.content + entry.spacingTop + entry.spacingBottom + entry.detail;
|
|
132
|
+
}, 0);
|
|
133
|
+
const pinnedBottomRowsTotalHeight = pinnedRows.bottom.reduce((acc, row) => {
|
|
134
|
+
const entry = processHeightEntry(row);
|
|
135
|
+
return acc + entry.content + entry.spacingTop + entry.spacingBottom + entry.detail;
|
|
136
|
+
}, 0);
|
|
128
137
|
const positions = [];
|
|
129
138
|
const currentPageTotalHeight = currentPage.rows.reduce((acc, row) => {
|
|
130
139
|
positions.push(acc);
|
|
@@ -136,14 +145,21 @@ const useGridRowsMeta = (apiRef, props) => {
|
|
|
136
145
|
// No row has height=auto, so all rows are already measured
|
|
137
146
|
lastMeasuredRowIndex.current = Infinity;
|
|
138
147
|
}
|
|
148
|
+
const didHeightsChange = pinnedTopRowsTotalHeight !== apiRef.current.state.rowsMeta.pinnedTopRowsTotalHeight || pinnedBottomRowsTotalHeight !== apiRef.current.state.rowsMeta.pinnedBottomRowsTotalHeight || currentPageTotalHeight !== apiRef.current.state.rowsMeta.currentPageTotalHeight;
|
|
149
|
+
const rowsMeta = {
|
|
150
|
+
currentPageTotalHeight,
|
|
151
|
+
positions,
|
|
152
|
+
pinnedTopRowsTotalHeight,
|
|
153
|
+
pinnedBottomRowsTotalHeight
|
|
154
|
+
};
|
|
139
155
|
apiRef.current.setState(state => {
|
|
140
156
|
return (0, _extends2.default)({}, state, {
|
|
141
|
-
rowsMeta
|
|
142
|
-
currentPageTotalHeight,
|
|
143
|
-
positions
|
|
144
|
-
}
|
|
157
|
+
rowsMeta
|
|
145
158
|
});
|
|
146
159
|
});
|
|
160
|
+
if (didHeightsChange) {
|
|
161
|
+
apiRef.current.updateDimensions();
|
|
162
|
+
}
|
|
147
163
|
isHeightMetaValid.current = true;
|
|
148
164
|
}, [apiRef, pinnedRows, currentPage.rows, processHeightEntry]);
|
|
149
165
|
const getRowHeight = rowId => {
|
|
@@ -193,7 +209,7 @@ const useGridRowsMeta = (apiRef, props) => {
|
|
|
193
209
|
// Because of variable row height this is needed for the virtualization
|
|
194
210
|
(0, _utils.unstable_useEnhancedEffect)(() => {
|
|
195
211
|
hydrateRowsMeta();
|
|
196
|
-
}, [
|
|
212
|
+
}, [hydrateRowsMeta]);
|
|
197
213
|
const rowsMetaApi = {
|
|
198
214
|
unstable_getRowHeight: getRowHeight,
|
|
199
215
|
unstable_setLastMeasuredRowIndex: setLastMeasuredRowIndex,
|
|
@@ -30,15 +30,16 @@ const gridSortedRowEntriesSelector = exports.gridSortedRowEntriesSelector = (0,
|
|
|
30
30
|
id,
|
|
31
31
|
model
|
|
32
32
|
});
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
33
|
+
} else {
|
|
34
|
+
const rowNode = rowTree[id];
|
|
35
|
+
if (rowNode && (0, _gridRowsUtils.isAutogeneratedRowNode)(rowNode)) {
|
|
36
|
+
acc.push({
|
|
37
|
+
id,
|
|
38
|
+
model: {
|
|
39
|
+
[_gridRowsUtils.GRID_ID_AUTOGENERATED]: id
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
}
|
|
42
43
|
}
|
|
43
44
|
return acc;
|
|
44
45
|
}, []));
|