@mui/x-data-grid 7.24.1 → 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 +148 -0
- package/DataGrid/DataGrid.js +1 -7
- package/DataGrid/useDataGridComponent.js +2 -2
- package/components/GridRow.d.ts +0 -1
- package/components/GridRow.js +32 -20
- package/components/GridScrollArea.d.ts +5 -2
- package/components/GridScrollArea.js +32 -25
- package/components/GridSkeletonLoadingOverlay.js +2 -1
- package/components/cell/GridCell.d.ts +9 -6
- package/components/cell/GridCell.js +29 -52
- package/components/containers/GridRoot.js +11 -9
- package/components/containers/GridRootStyles.js +138 -40
- package/components/toolbar/GridToolbarColumnsButton.js +5 -4
- package/components/toolbar/GridToolbarDensitySelector.js +2 -2
- package/components/toolbar/GridToolbarExportContainer.js +2 -2
- package/components/toolbar/GridToolbarFilterButton.js +4 -3
- package/components/virtualization/GridMainContainer.d.ts +10 -0
- package/components/virtualization/GridMainContainer.js +10 -2
- package/components/virtualization/GridVirtualScrollbar.d.ts +4 -0
- package/components/virtualization/GridVirtualScrollbar.js +5 -5
- package/components/virtualization/GridVirtualScroller.js +36 -16
- package/components/virtualization/GridVirtualScrollerContent.js +11 -2
- 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/columnResize/useGridColumnResize.js +2 -1
- package/hooks/features/columns/gridColumnsSelector.d.ts +0 -5
- package/hooks/features/columns/gridColumnsSelector.js +0 -12
- package/hooks/features/columns/useGridColumns.js +7 -3
- 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 +102 -77
- package/hooks/features/editing/gridEditingSelectors.d.ts +10 -0
- package/hooks/features/editing/gridEditingSelectors.js +12 -1
- package/hooks/features/editing/index.d.ts +1 -1
- package/hooks/features/editing/index.js +1 -1
- package/hooks/features/editing/useGridCellEditing.js +3 -3
- package/hooks/features/editing/useGridRowEditing.js +8 -9
- 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/focus/useGridFocus.js +3 -2
- package/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +24 -16
- package/hooks/features/keyboardNavigation/utils.d.ts +1 -2
- package/hooks/features/keyboardNavigation/utils.js +0 -5
- package/hooks/features/listView/useGridListView.js +2 -1
- package/hooks/features/pagination/useGridPagination.js +1 -1
- package/hooks/features/rowSelection/useGridRowSelection.js +4 -4
- 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/useGridParamsApi.d.ts +1 -1
- package/hooks/features/rows/useGridParamsApi.js +33 -14
- package/hooks/features/rows/useGridRowSpanning.js +94 -91
- package/hooks/features/rows/useGridRows.js +7 -8
- package/hooks/features/rows/useGridRowsMeta.js +36 -19
- package/hooks/features/sorting/gridSortingSelector.js +10 -9
- package/hooks/features/virtualization/gridFocusedVirtualCellSelector.js +2 -2
- package/hooks/features/virtualization/useGridVirtualScroller.d.ts +15 -1
- package/hooks/features/virtualization/useGridVirtualScroller.js +74 -72
- 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/gridApiCommon.d.ts +2 -2
- package/models/api/gridParamsApi.d.ts +29 -2
- package/models/api/gridStateApi.d.ts +1 -0
- package/models/api/index.d.ts +1 -1
- package/models/api/index.js +0 -1
- package/models/events/gridEventLookup.d.ts +6 -0
- package/modern/DataGrid/DataGrid.js +1 -7
- package/modern/DataGrid/useDataGridComponent.js +2 -2
- package/modern/components/GridRow.js +32 -20
- package/modern/components/GridScrollArea.js +32 -25
- package/modern/components/GridSkeletonLoadingOverlay.js +2 -1
- package/modern/components/cell/GridCell.js +29 -52
- package/modern/components/containers/GridRoot.js +11 -9
- package/modern/components/containers/GridRootStyles.js +138 -40
- package/modern/components/toolbar/GridToolbarColumnsButton.js +5 -4
- package/modern/components/toolbar/GridToolbarDensitySelector.js +2 -2
- package/modern/components/toolbar/GridToolbarExportContainer.js +2 -2
- package/modern/components/toolbar/GridToolbarFilterButton.js +4 -3
- package/modern/components/virtualization/GridMainContainer.js +10 -2
- package/modern/components/virtualization/GridVirtualScrollbar.js +5 -5
- package/modern/components/virtualization/GridVirtualScroller.js +36 -16
- package/modern/components/virtualization/GridVirtualScrollerContent.js +11 -2
- 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/columnResize/useGridColumnResize.js +2 -1
- package/modern/hooks/features/columns/gridColumnsSelector.js +0 -12
- package/modern/hooks/features/columns/useGridColumns.js +7 -3
- 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 +102 -77
- package/modern/hooks/features/editing/gridEditingSelectors.js +12 -1
- package/modern/hooks/features/editing/index.js +1 -1
- package/modern/hooks/features/editing/useGridCellEditing.js +3 -3
- package/modern/hooks/features/editing/useGridRowEditing.js +8 -9
- package/modern/hooks/features/filter/gridFilterState.js +5 -0
- package/modern/hooks/features/filter/useGridFilter.js +6 -13
- package/modern/hooks/features/focus/useGridFocus.js +3 -2
- package/modern/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +24 -16
- package/modern/hooks/features/keyboardNavigation/utils.js +0 -5
- package/modern/hooks/features/listView/useGridListView.js +2 -1
- package/modern/hooks/features/pagination/useGridPagination.js +1 -1
- package/modern/hooks/features/rowSelection/useGridRowSelection.js +4 -4
- package/modern/hooks/features/rowSelection/utils.js +1 -1
- package/modern/hooks/features/rows/gridRowsUtils.js +0 -16
- package/modern/hooks/features/rows/useGridParamsApi.js +33 -14
- package/modern/hooks/features/rows/useGridRowSpanning.js +94 -91
- package/modern/hooks/features/rows/useGridRows.js +7 -8
- package/modern/hooks/features/rows/useGridRowsMeta.js +36 -19
- package/modern/hooks/features/sorting/gridSortingSelector.js +10 -9
- package/modern/hooks/features/virtualization/gridFocusedVirtualCellSelector.js +2 -2
- package/modern/hooks/features/virtualization/useGridVirtualScroller.js +74 -72
- 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/modern/models/api/index.js +0 -1
- package/modern/utils/roundToDecimalPlaces.js +3 -0
- package/modern/utils/utils.js +6 -1
- package/node/DataGrid/DataGrid.js +1 -7
- package/node/DataGrid/useDataGridComponent.js +2 -2
- package/node/components/GridRow.js +28 -17
- package/node/components/GridScrollArea.js +31 -24
- package/node/components/GridSkeletonLoadingOverlay.js +2 -1
- package/node/components/cell/GridCell.js +27 -50
- package/node/components/containers/GridRoot.js +10 -8
- package/node/components/containers/GridRootStyles.js +138 -40
- package/node/components/toolbar/GridToolbarColumnsButton.js +5 -4
- package/node/components/toolbar/GridToolbarDensitySelector.js +2 -2
- package/node/components/toolbar/GridToolbarExportContainer.js +2 -2
- package/node/components/toolbar/GridToolbarFilterButton.js +4 -3
- package/node/components/virtualization/GridMainContainer.js +10 -2
- package/node/components/virtualization/GridVirtualScrollbar.js +5 -5
- package/node/components/virtualization/GridVirtualScroller.js +36 -16
- package/node/components/virtualization/GridVirtualScrollerContent.js +11 -2
- 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/columnResize/useGridColumnResize.js +2 -1
- package/node/hooks/features/columns/gridColumnsSelector.js +1 -13
- package/node/hooks/features/columns/useGridColumns.js +7 -3
- 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 +99 -74
- package/node/hooks/features/editing/gridEditingSelectors.js +12 -2
- package/node/hooks/features/editing/index.js +7 -11
- package/node/hooks/features/editing/useGridCellEditing.js +2 -2
- package/node/hooks/features/editing/useGridRowEditing.js +6 -7
- package/node/hooks/features/filter/gridFilterState.js +6 -1
- package/node/hooks/features/filter/useGridFilter.js +5 -12
- package/node/hooks/features/focus/useGridFocus.js +3 -2
- package/node/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +24 -15
- package/node/hooks/features/keyboardNavigation/utils.js +0 -6
- package/node/hooks/features/listView/useGridListView.js +2 -1
- package/node/hooks/features/pagination/useGridPagination.js +1 -1
- package/node/hooks/features/rowSelection/useGridRowSelection.js +3 -3
- package/node/hooks/features/rowSelection/utils.js +1 -1
- package/node/hooks/features/rows/gridRowsUtils.js +0 -17
- package/node/hooks/features/rows/useGridParamsApi.js +33 -14
- package/node/hooks/features/rows/useGridRowSpanning.js +92 -89
- package/node/hooks/features/rows/useGridRows.js +7 -8
- package/node/hooks/features/rows/useGridRowsMeta.js +36 -19
- package/node/hooks/features/sorting/gridSortingSelector.js +10 -9
- package/node/hooks/features/virtualization/gridFocusedVirtualCellSelector.js +2 -2
- package/node/hooks/features/virtualization/useGridVirtualScroller.js +73 -71
- 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/node/models/api/index.js +0 -11
- package/node/utils/roundToDecimalPlaces.js +9 -0
- package/node/utils/utils.js +8 -1
- package/package.json +3 -2
- package/utils/roundToDecimalPlaces.d.ts +1 -0
- package/utils/roundToDecimalPlaces.js +3 -0
- package/utils/utils.d.ts +1 -0
- package/utils/utils.js +6 -1
|
@@ -15,7 +15,7 @@ var _useGridRootProps = require("../../utils/useGridRootProps");
|
|
|
15
15
|
var _useGridPrivateApiContext = require("../../utils/useGridPrivateApiContext");
|
|
16
16
|
var _useGridApiEventHandler = require("../../utils/useGridApiEventHandler");
|
|
17
17
|
var _GridColumnHeaderItem = require("../../../components/columnHeaders/GridColumnHeaderItem");
|
|
18
|
-
var
|
|
18
|
+
var _gridDimensionsSelectors = require("../dimensions/gridDimensionsSelectors");
|
|
19
19
|
var _virtualization = require("../virtualization");
|
|
20
20
|
var _useGridVirtualScroller = require("../virtualization/useGridVirtualScroller");
|
|
21
21
|
var _GridColumnGroupHeader = require("../../../components/columnHeaders/GridColumnGroupHeader");
|
|
@@ -54,19 +54,17 @@ const useGridColumnHeaders = props => {
|
|
|
54
54
|
const [resizeCol, setResizeCol] = React.useState('');
|
|
55
55
|
const apiRef = (0, _useGridPrivateApiContext.useGridPrivateApiContext)();
|
|
56
56
|
const rootProps = (0, _useGridRootProps.useGridRootProps)();
|
|
57
|
-
const dimensions = (0, _utils.useGridSelector)(apiRef, _dimensions.gridDimensionsSelector);
|
|
58
57
|
const columnGroupsModel = (0, _utils.useGridSelector)(apiRef, _gridColumnGroupsSelector.gridColumnGroupsUnwrappedModelSelector);
|
|
59
58
|
const columnPositions = (0, _utils.useGridSelector)(apiRef, _columns.gridColumnPositionsSelector);
|
|
60
59
|
const renderContext = (0, _utils.useGridSelector)(apiRef, _virtualization.gridRenderContextColumnsSelector);
|
|
61
60
|
const pinnedColumns = (0, _utils.useGridSelector)(apiRef, _columns.gridVisiblePinnedColumnDefinitionsSelector);
|
|
62
61
|
const columnsLookup = (0, _utils.useGridSelector)(apiRef, _columns.gridColumnLookupSelector);
|
|
63
62
|
const offsetLeft = (0, _useGridVirtualScroller.computeOffsetLeft)(columnPositions, renderContext, pinnedColumns.left.length);
|
|
64
|
-
const
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
}, [apiRef]);
|
|
63
|
+
const columnsTotalWidth = (0, _utils.useGridSelector)(apiRef, _gridDimensionsSelectors.gridColumnsTotalWidthSelector);
|
|
64
|
+
const gridHasFiller = (0, _utils.useGridSelector)(apiRef, _gridDimensionsSelectors.gridHasFillerSelector);
|
|
65
|
+
const headerHeight = (0, _utils.useGridSelector)(apiRef, _gridDimensionsSelectors.gridHeaderHeightSelector);
|
|
66
|
+
const groupHeaderHeight = (0, _utils.useGridSelector)(apiRef, _gridDimensionsSelectors.gridGroupHeaderHeightSelector);
|
|
67
|
+
const scrollbarWidth = (0, _utils.useGridSelector)(apiRef, _gridDimensionsSelectors.gridVerticalScrollbarWidthSelector);
|
|
70
68
|
const handleColumnResizeStart = React.useCallback(params => setResizeCol(params.field), []);
|
|
71
69
|
const handleColumnResizeStop = React.useCallback(() => setResizeCol(''), []);
|
|
72
70
|
const handleColumnReorderStart = React.useCallback(params => setDragCol(params.field), []);
|
|
@@ -138,8 +136,7 @@ const useGridColumnHeaders = props => {
|
|
|
138
136
|
const hasFocus = columnHeaderFocus !== null && columnHeaderFocus.field === colDef.field;
|
|
139
137
|
const open = columnMenuState.open && columnMenuState.field === colDef.field;
|
|
140
138
|
const pinnedPosition = params?.position;
|
|
141
|
-
const
|
|
142
|
-
const pinnedOffset = (0, _getPinnedCellOffset.getPinnedCellOffset)(pinnedPosition, colDef.computedWidth, columnIndex, columnPositions, dimensions.columnsTotalWidth, scrollbarWidth);
|
|
139
|
+
const pinnedOffset = (0, _getPinnedCellOffset.getPinnedCellOffset)(pinnedPosition, colDef.computedWidth, columnIndex, columnPositions, columnsTotalWidth, scrollbarWidth);
|
|
143
140
|
const siblingWithBorderingSeparator = pinnedPosition === _constants.PinnedColumnPosition.RIGHT ? renderedColumns[i - 1] : renderedColumns[i + 1];
|
|
144
141
|
const isSiblingFocused = siblingWithBorderingSeparator ? columnHeaderFocus !== null && columnHeaderFocus.field === siblingWithBorderingSeparator.field : false;
|
|
145
142
|
const isLastUnpinned = columnIndex + 1 === columnPositions.length - pinnedColumns.right.length;
|
|
@@ -150,7 +147,7 @@ const useGridColumnHeaders = props => {
|
|
|
150
147
|
columns.push(/*#__PURE__*/(0, _jsxRuntime.jsx)(_GridColumnHeaderItem.GridColumnHeaderItem, (0, _extends2.default)({}, sortColumnLookup[colDef.field], {
|
|
151
148
|
columnMenuOpen: open,
|
|
152
149
|
filterItemsCounter: filterColumnLookup[colDef.field] && filterColumnLookup[colDef.field].length,
|
|
153
|
-
headerHeight:
|
|
150
|
+
headerHeight: headerHeight,
|
|
154
151
|
isDragging: colDef.field === dragCol,
|
|
155
152
|
colDef: colDef,
|
|
156
153
|
colIndex: columnIndex,
|
|
@@ -242,8 +239,7 @@ const useGridColumnHeaders = props => {
|
|
|
242
239
|
tabIndex
|
|
243
240
|
};
|
|
244
241
|
const pinnedPosition = params.position;
|
|
245
|
-
const
|
|
246
|
-
const pinnedOffset = (0, _getPinnedCellOffset.getPinnedCellOffset)(pinnedPosition, headerInfo.width, columnIndex, columnPositions, dimensions.columnsTotalWidth, scrollbarWidth);
|
|
242
|
+
const pinnedOffset = (0, _getPinnedCellOffset.getPinnedCellOffset)(pinnedPosition, headerInfo.width, columnIndex, columnPositions, columnsTotalWidth, scrollbarWidth);
|
|
247
243
|
columnIndex += columnFields.length;
|
|
248
244
|
let indexInSection = index;
|
|
249
245
|
if (pinnedPosition === _constants.PinnedColumnPosition.LEFT) {
|
|
@@ -258,7 +254,7 @@ const useGridColumnHeaders = props => {
|
|
|
258
254
|
depth: depth,
|
|
259
255
|
isLastColumn: index === visibleColumnGroupHeader.length - 1,
|
|
260
256
|
maxDepth: headerGroupingMaxDepth,
|
|
261
|
-
height:
|
|
257
|
+
height: groupHeaderHeight,
|
|
262
258
|
hasFocus: hasFocus,
|
|
263
259
|
tabIndex: tabIndex,
|
|
264
260
|
pinnedPosition: pinnedPosition,
|
|
@@ -509,7 +509,8 @@ const useGridColumnResize = (apiRef, props) => {
|
|
|
509
509
|
if (options.expand) {
|
|
510
510
|
const visibleColumns = state.orderedFields.map(field => state.lookup[field]).filter(c => state.columnVisibilityModel[c.field] !== false);
|
|
511
511
|
const totalWidth = visibleColumns.reduce((total, column) => total + (widthByField[column.field] ?? column.computedWidth ?? column.width), 0);
|
|
512
|
-
const
|
|
512
|
+
const dimensions = apiRef.current.getRootDimensions();
|
|
513
|
+
const availableWidth = dimensions.viewportInnerSize.width;
|
|
513
514
|
const remainingWidth = availableWidth - totalWidth;
|
|
514
515
|
if (remainingWidth > 0) {
|
|
515
516
|
const widthPerColumn = remainingWidth / (newColumns.length || 1);
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.gridVisiblePinnedColumnDefinitionsSelector = exports.gridVisibleColumnFieldsSelector = exports.gridVisibleColumnDefinitionsSelector = exports.gridPinnedColumnsSelector = exports.gridHasColSpanSelector = exports.gridFilterableColumnLookupSelector = exports.gridFilterableColumnDefinitionsSelector = exports.
|
|
6
|
+
exports.gridVisiblePinnedColumnDefinitionsSelector = exports.gridVisibleColumnFieldsSelector = exports.gridVisibleColumnDefinitionsSelector = exports.gridPinnedColumnsSelector = exports.gridHasColSpanSelector = exports.gridFilterableColumnLookupSelector = exports.gridFilterableColumnDefinitionsSelector = exports.gridColumnsStateSelector = exports.gridColumnVisibilityModelSelector = exports.gridColumnPositionsSelector = exports.gridColumnLookupSelector = exports.gridColumnFieldsSelector = exports.gridColumnDefinitionsSelector = void 0;
|
|
7
7
|
var _createSelector = require("../../../utils/createSelector");
|
|
8
8
|
var _gridColumnsInterfaces = require("./gridColumnsInterfaces");
|
|
9
9
|
var _gridCoreSelector = require("../../core/gridCoreSelector");
|
|
@@ -114,18 +114,6 @@ const gridColumnPositionsSelector = exports.gridColumnPositionsSelector = (0, _c
|
|
|
114
114
|
return positions;
|
|
115
115
|
});
|
|
116
116
|
|
|
117
|
-
/**
|
|
118
|
-
* Get the summed width of all the visible columns.
|
|
119
|
-
* @category Visible Columns
|
|
120
|
-
*/
|
|
121
|
-
const gridColumnsTotalWidthSelector = exports.gridColumnsTotalWidthSelector = (0, _createSelector.createSelector)(gridVisibleColumnDefinitionsSelector, gridColumnPositionsSelector, (visibleColumns, positions) => {
|
|
122
|
-
const colCount = visibleColumns.length;
|
|
123
|
-
if (colCount === 0) {
|
|
124
|
-
return 0;
|
|
125
|
-
}
|
|
126
|
-
return positions[colCount - 1] + visibleColumns[colCount - 1].computedWidth;
|
|
127
|
-
});
|
|
128
|
-
|
|
129
117
|
/**
|
|
130
118
|
* Get the filterable columns as an array.
|
|
131
119
|
* @category Columns
|
|
@@ -252,9 +252,13 @@ function useGridColumns(apiRef, props) {
|
|
|
252
252
|
*/
|
|
253
253
|
|
|
254
254
|
const prevInnerWidth = React.useRef(null);
|
|
255
|
-
const handleGridSizeChange =
|
|
256
|
-
if (prevInnerWidth.current !==
|
|
257
|
-
prevInnerWidth.current =
|
|
255
|
+
const handleGridSizeChange = size => {
|
|
256
|
+
if (prevInnerWidth.current !== size.width) {
|
|
257
|
+
prevInnerWidth.current = size.width;
|
|
258
|
+
const hasFlexColumns = (0, _gridColumnsSelector.gridVisibleColumnDefinitionsSelector)(apiRef).some(col => col.flex && col.flex > 0);
|
|
259
|
+
if (!hasFlexColumns) {
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
258
262
|
setGridColumnsState((0, _gridColumnsUtils.hydrateColumnsWidth)((0, _gridColumnsSelector.gridColumnsStateSelector)(apiRef.current.state), apiRef.current.getRootDimensions()));
|
|
259
263
|
}
|
|
260
264
|
};
|
|
@@ -3,6 +3,42 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.gridDimensionsSelector = void 0;
|
|
6
|
+
exports.gridVerticalScrollbarWidthSelector = exports.gridRowHeightSelector = exports.gridHorizontalScrollbarHeightSelector = exports.gridHeaderHeightSelector = exports.gridHeaderFilterHeightSelector = exports.gridHasScrollYSelector = exports.gridHasScrollXSelector = exports.gridHasFillerSelector = exports.gridHasBottomFillerSelector = exports.gridGroupHeaderHeightSelector = exports.gridDimensionsSelector = exports.gridContentHeightSelector = exports.gridColumnsTotalWidthSelector = void 0;
|
|
7
|
+
var _createSelector = require("../../../utils/createSelector");
|
|
7
8
|
const gridDimensionsSelector = state => state.dimensions;
|
|
8
|
-
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Get the summed width of all the visible columns.
|
|
12
|
+
* @category Visible Columns
|
|
13
|
+
*/
|
|
14
|
+
exports.gridDimensionsSelector = gridDimensionsSelector;
|
|
15
|
+
const gridColumnsTotalWidthSelector = exports.gridColumnsTotalWidthSelector = (0, _createSelector.createSelector)(gridDimensionsSelector, dimensions => dimensions.columnsTotalWidth);
|
|
16
|
+
const gridRowHeightSelector = state => state.dimensions.rowHeight;
|
|
17
|
+
exports.gridRowHeightSelector = gridRowHeightSelector;
|
|
18
|
+
const gridContentHeightSelector = state => state.dimensions.contentSize.height;
|
|
19
|
+
exports.gridContentHeightSelector = gridContentHeightSelector;
|
|
20
|
+
const gridHasScrollXSelector = state => state.dimensions.hasScrollX;
|
|
21
|
+
exports.gridHasScrollXSelector = gridHasScrollXSelector;
|
|
22
|
+
const gridHasScrollYSelector = state => state.dimensions.hasScrollY;
|
|
23
|
+
exports.gridHasScrollYSelector = gridHasScrollYSelector;
|
|
24
|
+
const gridHasFillerSelector = state => state.dimensions.columnsTotalWidth < state.dimensions.viewportOuterSize.width;
|
|
25
|
+
exports.gridHasFillerSelector = gridHasFillerSelector;
|
|
26
|
+
const gridHeaderHeightSelector = state => state.dimensions.headerHeight;
|
|
27
|
+
exports.gridHeaderHeightSelector = gridHeaderHeightSelector;
|
|
28
|
+
const gridGroupHeaderHeightSelector = state => state.dimensions.groupHeaderHeight;
|
|
29
|
+
exports.gridGroupHeaderHeightSelector = gridGroupHeaderHeightSelector;
|
|
30
|
+
const gridHeaderFilterHeightSelector = state => state.dimensions.headerFilterHeight;
|
|
31
|
+
exports.gridHeaderFilterHeightSelector = gridHeaderFilterHeightSelector;
|
|
32
|
+
const gridVerticalScrollbarWidthSelector = state => state.dimensions.hasScrollY ? state.dimensions.scrollbarSize : 0;
|
|
33
|
+
exports.gridVerticalScrollbarWidthSelector = gridVerticalScrollbarWidthSelector;
|
|
34
|
+
const gridHorizontalScrollbarHeightSelector = state => state.dimensions.hasScrollX ? state.dimensions.scrollbarSize : 0;
|
|
35
|
+
exports.gridHorizontalScrollbarHeightSelector = gridHorizontalScrollbarHeightSelector;
|
|
36
|
+
const gridHasBottomFillerSelector = state => {
|
|
37
|
+
const height = state.dimensions.hasScrollX ? state.dimensions.scrollbarSize : 0;
|
|
38
|
+
const needsLastRowBorder = state.dimensions.viewportOuterSize.height - state.dimensions.minimumSize.height > 0;
|
|
39
|
+
if (height === 0 && !needsLastRowBorder) {
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
return true;
|
|
43
|
+
};
|
|
44
|
+
exports.gridHasBottomFillerSelector = gridHasBottomFillerSelector;
|
|
@@ -3,14 +3,16 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
}
|
|
6
|
+
Object.defineProperty(exports, "gridColumnsTotalWidthSelector", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _gridDimensionsSelectors.gridColumnsTotalWidthSelector;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
Object.defineProperty(exports, "gridDimensionsSelector", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function () {
|
|
15
|
+
return _gridDimensionsSelectors.gridDimensionsSelector;
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
var _gridDimensionsSelectors = require("./gridDimensionsSelectors");
|
|
@@ -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");
|
|
@@ -24,7 +25,9 @@ var _gridRowsMetaSelector = require("../rows/gridRowsMetaSelector");
|
|
|
24
25
|
var _gridRowsUtils = require("../rows/gridRowsUtils");
|
|
25
26
|
var _gridColumnsUtils = require("../columns/gridColumnsUtils");
|
|
26
27
|
var _dataGridPropsDefaultValues = require("../../../constants/dataGridPropsDefaultValues");
|
|
28
|
+
var _roundToDecimalPlaces = require("../../../utils/roundToDecimalPlaces");
|
|
27
29
|
var _isJSDOM = require("../../../utils/isJSDOM");
|
|
30
|
+
var _utils3 = require("../../../utils/utils");
|
|
28
31
|
const EMPTY_SIZE = {
|
|
29
32
|
width: 0,
|
|
30
33
|
height: 0
|
|
@@ -51,40 +54,48 @@ const EMPTY_DIMENSIONS = {
|
|
|
51
54
|
topContainerHeight: 0,
|
|
52
55
|
bottomContainerHeight: 0
|
|
53
56
|
};
|
|
54
|
-
const dimensionsStateInitializer = state => {
|
|
57
|
+
const dimensionsStateInitializer = (state, props, apiRef) => {
|
|
55
58
|
const dimensions = EMPTY_DIMENSIONS;
|
|
59
|
+
const density = (0, _density.gridDensityFactorSelector)(apiRef);
|
|
56
60
|
return (0, _extends2.default)({}, state, {
|
|
57
|
-
dimensions
|
|
61
|
+
dimensions: (0, _extends2.default)({}, dimensions, getStaticDimensions(props, apiRef, density, (0, _columns.gridVisiblePinnedColumnDefinitionsSelector)(apiRef)))
|
|
58
62
|
});
|
|
59
63
|
};
|
|
60
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
|
+
});
|
|
61
72
|
function useGridDimensions(apiRef, props) {
|
|
62
73
|
const logger = (0, _useGridLogger.useGridLogger)(apiRef, 'useResizeContainer');
|
|
63
74
|
const errorShown = React.useRef(false);
|
|
64
75
|
const rootDimensionsRef = React.useRef(EMPTY_SIZE);
|
|
65
|
-
const dimensionsState = (0, _utils2.useGridSelector)(apiRef, _gridDimensionsSelectors.gridDimensionsSelector);
|
|
66
|
-
const rowsMeta = (0, _utils2.useGridSelector)(apiRef, _gridRowsMetaSelector.gridRowsMetaSelector);
|
|
67
76
|
const pinnedColumns = (0, _utils2.useGridSelector)(apiRef, _columns.gridVisiblePinnedColumnDefinitionsSelector);
|
|
68
77
|
const densityFactor = (0, _utils2.useGridSelector)(apiRef, _density.gridDensityFactorSelector);
|
|
69
|
-
const
|
|
70
|
-
const
|
|
71
|
-
const
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
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);
|
|
81
89
|
const previousSize = React.useRef(undefined);
|
|
82
|
-
const getRootDimensions = () => apiRef.current.state
|
|
83
|
-
const setDimensions =
|
|
90
|
+
const getRootDimensions = React.useCallback(() => (0, _gridDimensionsSelectors.gridDimensionsSelector)(apiRef.current.state), [apiRef]);
|
|
91
|
+
const setDimensions = React.useCallback(dimensions => {
|
|
84
92
|
apiRef.current.setState(state => (0, _extends2.default)({}, state, {
|
|
85
93
|
dimensions
|
|
86
94
|
}));
|
|
87
|
-
|
|
95
|
+
if (apiRef.current.rootElementRef.current) {
|
|
96
|
+
setCSSVariables(apiRef.current.rootElementRef.current, (0, _gridDimensionsSelectors.gridDimensionsSelector)(apiRef.current.state));
|
|
97
|
+
}
|
|
98
|
+
}, [apiRef]);
|
|
88
99
|
const resize = React.useCallback(() => {
|
|
89
100
|
const element = apiRef.current.mainElementRef.current;
|
|
90
101
|
if (!element) {
|
|
@@ -105,10 +116,7 @@ function useGridDimensions(apiRef, props) {
|
|
|
105
116
|
if (!dimensions.isReady) {
|
|
106
117
|
return 0;
|
|
107
118
|
}
|
|
108
|
-
const currentPage = (0, _useGridVisibleRows.getVisibleRows)(apiRef
|
|
109
|
-
pagination: props.pagination,
|
|
110
|
-
paginationMode: props.paginationMode
|
|
111
|
-
});
|
|
119
|
+
const currentPage = (0, _useGridVisibleRows.getVisibleRows)(apiRef);
|
|
112
120
|
|
|
113
121
|
// TODO: Use a combination of scrollTop, dimensions.viewportInnerSize.height and rowsMeta.possitions
|
|
114
122
|
// to find out the maximum number of rows that can fit in the visible part of the grid
|
|
@@ -119,17 +127,23 @@ function useGridDimensions(apiRef, props) {
|
|
|
119
127
|
}
|
|
120
128
|
const maximumPageSizeWithoutScrollBar = Math.floor(dimensions.viewportInnerSize.height / rowHeight);
|
|
121
129
|
return Math.min(maximumPageSizeWithoutScrollBar, currentPage.rows.length);
|
|
122
|
-
}, [apiRef, props.
|
|
130
|
+
}, [apiRef, props.getRowHeight, rowHeight]);
|
|
123
131
|
const updateDimensions = React.useCallback(() => {
|
|
132
|
+
if (isFirstSizing.current) {
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
// All the floating point dimensions should be rounded to .1 decimal places to avoid subpixel rendering issues
|
|
136
|
+
// https://github.com/mui/mui-x/issues/9550#issuecomment-1619020477
|
|
137
|
+
// https://github.com/mui/mui-x/issues/15721
|
|
124
138
|
const rootElement = apiRef.current.rootElementRef.current;
|
|
125
|
-
const
|
|
126
|
-
const
|
|
127
|
-
const topContainerHeight = headersTotalHeight +
|
|
128
|
-
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;
|
|
129
143
|
const nonPinnedColumnsTotalWidth = columnsTotalWidth - leftPinnedWidth - rightPinnedWidth;
|
|
130
144
|
const contentSize = {
|
|
131
145
|
width: nonPinnedColumnsTotalWidth,
|
|
132
|
-
height: rowsMeta.currentPageTotalHeight
|
|
146
|
+
height: (0, _roundToDecimalPlaces.roundToDecimalPlaces)(rowsMeta.currentPageTotalHeight, 1)
|
|
133
147
|
};
|
|
134
148
|
let viewportOuterSize;
|
|
135
149
|
let viewportInnerSize;
|
|
@@ -203,12 +217,21 @@ function useGridDimensions(apiRef, props) {
|
|
|
203
217
|
bottomContainerHeight
|
|
204
218
|
};
|
|
205
219
|
const prevDimensions = apiRef.current.state.dimensions;
|
|
220
|
+
if ((0, _utils3.isDeepEqual)(prevDimensions, newDimensions)) {
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
206
223
|
setDimensions(newDimensions);
|
|
207
224
|
if (!areElementSizesEqual(newDimensions.viewportInnerSize, prevDimensions.viewportInnerSize)) {
|
|
208
225
|
apiRef.current.publishEvent('viewportInnerSizeChange', newDimensions.viewportInnerSize);
|
|
209
226
|
}
|
|
210
227
|
apiRef.current.updateRenderContext?.();
|
|
211
|
-
}, [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]);
|
|
212
235
|
const apiPublic = {
|
|
213
236
|
resize,
|
|
214
237
|
getRootDimensions
|
|
@@ -217,35 +240,12 @@ function useGridDimensions(apiRef, props) {
|
|
|
217
240
|
updateDimensions,
|
|
218
241
|
getViewportPageSize
|
|
219
242
|
};
|
|
243
|
+
(0, _utils.unstable_useEnhancedEffect)(updateDimensions, [updateDimensions]);
|
|
220
244
|
(0, _useGridApiMethod.useGridApiMethod)(apiRef, apiPublic, 'public');
|
|
221
245
|
(0, _useGridApiMethod.useGridApiMethod)(apiRef, apiPrivate, 'private');
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
apiRef.current.publishEvent('debouncedResize', rootDimensionsRef.current);
|
|
226
|
-
}
|
|
227
|
-
}, [apiRef, savedSize, updateDimensions]);
|
|
228
|
-
const root = apiRef.current.rootElementRef.current;
|
|
229
|
-
(0, _utils.unstable_useEnhancedEffect)(() => {
|
|
230
|
-
if (!root) {
|
|
231
|
-
return;
|
|
232
|
-
}
|
|
233
|
-
const set = (k, v) => root.style.setProperty(k, v);
|
|
234
|
-
set('--DataGrid-width', `${dimensionsState.viewportOuterSize.width}px`);
|
|
235
|
-
set('--DataGrid-hasScrollX', `${Number(dimensionsState.hasScrollX)}`);
|
|
236
|
-
set('--DataGrid-hasScrollY', `${Number(dimensionsState.hasScrollY)}`);
|
|
237
|
-
set('--DataGrid-scrollbarSize', `${dimensionsState.scrollbarSize}px`);
|
|
238
|
-
set('--DataGrid-rowWidth', `${dimensionsState.rowWidth}px`);
|
|
239
|
-
set('--DataGrid-columnsTotalWidth', `${dimensionsState.columnsTotalWidth}px`);
|
|
240
|
-
set('--DataGrid-leftPinnedWidth', `${dimensionsState.leftPinnedWidth}px`);
|
|
241
|
-
set('--DataGrid-rightPinnedWidth', `${dimensionsState.rightPinnedWidth}px`);
|
|
242
|
-
set('--DataGrid-headerHeight', `${dimensionsState.headerHeight}px`);
|
|
243
|
-
set('--DataGrid-headersTotalHeight', `${dimensionsState.headersTotalHeight}px`);
|
|
244
|
-
set('--DataGrid-topContainerHeight', `${dimensionsState.topContainerHeight}px`);
|
|
245
|
-
set('--DataGrid-bottomContainerHeight', `${dimensionsState.bottomContainerHeight}px`);
|
|
246
|
-
set('--height', `${dimensionsState.rowHeight}px`);
|
|
247
|
-
}, [root, dimensionsState]);
|
|
248
|
-
const isFirstSizing = React.useRef(true);
|
|
246
|
+
const handleRootMount = React.useCallback(root => {
|
|
247
|
+
setCSSVariables(root, (0, _gridDimensionsSelectors.gridDimensionsSelector)(apiRef.current.state));
|
|
248
|
+
}, [apiRef]);
|
|
249
249
|
const handleResize = React.useCallback(size => {
|
|
250
250
|
rootDimensionsRef.current = size;
|
|
251
251
|
if (size.height === 0 && !errorShown.current && !props.autoHeight && !_isJSDOM.isJSDOM) {
|
|
@@ -256,28 +256,58 @@ function useGridDimensions(apiRef, props) {
|
|
|
256
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'));
|
|
257
257
|
errorShown.current = true;
|
|
258
258
|
}
|
|
259
|
-
if (isFirstSizing.current) {
|
|
259
|
+
if (isFirstSizing.current || !debouncedUpdateDimensions) {
|
|
260
260
|
// We want to initialize the grid dimensions as soon as possible to avoid flickering
|
|
261
|
-
setSavedSize(size);
|
|
262
261
|
isFirstSizing.current = false;
|
|
262
|
+
updateDimensions();
|
|
263
263
|
return;
|
|
264
264
|
}
|
|
265
|
-
|
|
266
|
-
}, [props.autoHeight,
|
|
267
|
-
(0,
|
|
268
|
-
(0, _useGridApiEventHandler.useGridApiOptionHandler)(apiRef, '
|
|
269
|
-
(0, _useGridApiEventHandler.useGridApiOptionHandler)(apiRef, 'paginationModelChange', updateDimensions);
|
|
270
|
-
(0, _useGridApiEventHandler.useGridApiOptionHandler)(apiRef, 'columnsChange', updateDimensions);
|
|
271
|
-
(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);
|
|
272
269
|
(0, _useGridApiEventHandler.useGridApiOptionHandler)(apiRef, 'debouncedResize', props.onResize);
|
|
273
270
|
}
|
|
274
|
-
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) {
|
|
275
301
|
if (scrollbarSize !== undefined) {
|
|
276
302
|
return scrollbarSize;
|
|
277
303
|
}
|
|
278
|
-
if (rootElement === null
|
|
304
|
+
if (rootElement === null) {
|
|
279
305
|
return 0;
|
|
280
306
|
}
|
|
307
|
+
const cachedSize = scrollbarSizeCache.get(rootElement);
|
|
308
|
+
if (cachedSize !== undefined) {
|
|
309
|
+
return cachedSize;
|
|
310
|
+
}
|
|
281
311
|
const doc = (0, _utils.unstable_ownerDocument)(rootElement);
|
|
282
312
|
const scrollDiv = doc.createElement('div');
|
|
283
313
|
scrollDiv.style.width = '99px';
|
|
@@ -288,14 +318,9 @@ function measureScrollbarSize(rootElement, columnsTotalWidth, scrollbarSize) {
|
|
|
288
318
|
rootElement.appendChild(scrollDiv);
|
|
289
319
|
const size = scrollDiv.offsetWidth - scrollDiv.clientWidth;
|
|
290
320
|
rootElement.removeChild(scrollDiv);
|
|
321
|
+
scrollbarSizeCache.set(rootElement, size);
|
|
291
322
|
return size;
|
|
292
323
|
}
|
|
293
|
-
|
|
294
|
-
// Get rid of floating point imprecision errors
|
|
295
|
-
// https://github.com/mui/mui-x/issues/9550#issuecomment-1619020477
|
|
296
|
-
function roundToDecimalPlaces(value, decimals) {
|
|
297
|
-
return Math.round(value * 10 ** decimals) / 10 ** decimals;
|
|
298
|
-
}
|
|
299
324
|
function areElementSizesEqual(a, b) {
|
|
300
325
|
return a.width === b.width && a.height === b.height;
|
|
301
326
|
}
|
|
@@ -3,9 +3,19 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.gridEditRowsStateSelector = void 0;
|
|
6
|
+
exports.gridRowIsEditingSelector = exports.gridEditRowsStateSelector = exports.gridEditCellStateSelector = void 0;
|
|
7
|
+
var _createSelector = require("../../../utils/createSelector");
|
|
8
|
+
var _gridEditRowModel = require("../../../models/gridEditRowModel");
|
|
7
9
|
/**
|
|
8
10
|
* Select the row editing state.
|
|
9
11
|
*/
|
|
10
12
|
const gridEditRowsStateSelector = state => state.editRows;
|
|
11
|
-
exports.gridEditRowsStateSelector = gridEditRowsStateSelector;
|
|
13
|
+
exports.gridEditRowsStateSelector = gridEditRowsStateSelector;
|
|
14
|
+
const gridRowIsEditingSelector = exports.gridRowIsEditingSelector = (0, _createSelector.createSelectorV8)(gridEditRowsStateSelector, (editRows, {
|
|
15
|
+
rowId,
|
|
16
|
+
editMode
|
|
17
|
+
}) => editMode === _gridEditRowModel.GridEditModes.Row && Boolean(editRows[rowId]));
|
|
18
|
+
const gridEditCellStateSelector = exports.gridEditCellStateSelector = (0, _createSelector.createSelectorV8)(gridEditRowsStateSelector, (editRows, {
|
|
19
|
+
rowId,
|
|
20
|
+
field
|
|
21
|
+
}) => editRows[rowId]?.[field] ?? null);
|
|
@@ -3,14 +3,10 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
return _gridEditingSelectors[key];
|
|
14
|
-
}
|
|
15
|
-
});
|
|
16
|
-
});
|
|
6
|
+
Object.defineProperty(exports, "gridEditRowsStateSelector", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _gridEditingSelectors.gridEditRowsStateSelector;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
var _gridEditingSelectors = require("./gridEditingSelectors");
|
|
@@ -450,7 +450,7 @@ const useGridCellEditing = (apiRef, props) => {
|
|
|
450
450
|
|
|
451
451
|
// Run this effect synchronously so that the keyboard event can impact the yet-to-be-rendered input.
|
|
452
452
|
(0, _utils.unstable_useEnhancedEffect)(() => {
|
|
453
|
-
const
|
|
453
|
+
const rowsLookup = (0, _gridRowsSelector.gridRowsLookupSelector)(apiRef);
|
|
454
454
|
|
|
455
455
|
// Update the ref here because updateStateToStopCellEditMode may change it later
|
|
456
456
|
const copyOfPrevCellModes = prevCellModesModel.current;
|
|
@@ -459,7 +459,7 @@ const useGridCellEditing = (apiRef, props) => {
|
|
|
459
459
|
Object.entries(cellModesModel).forEach(([id, fields]) => {
|
|
460
460
|
Object.entries(fields).forEach(([field, params]) => {
|
|
461
461
|
const prevMode = copyOfPrevCellModes[id]?.[field]?.mode || _gridEditRowModel.GridCellModes.View;
|
|
462
|
-
const originalId =
|
|
462
|
+
const originalId = rowsLookup[id] ? apiRef.current.getRowId(rowsLookup[id]) : id;
|
|
463
463
|
if (params.mode === _gridEditRowModel.GridCellModes.Edit && prevMode === _gridEditRowModel.GridCellModes.View) {
|
|
464
464
|
updateStateToStartCellEditMode((0, _extends2.default)({
|
|
465
465
|
id: originalId,
|
|
@@ -240,11 +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
|
-
|
|
247
|
-
const isEditing = editingState[id] && Object.keys(editingState[id]).length > 0;
|
|
243
|
+
const isEditing = (0, _gridEditingSelectors.gridRowIsEditingSelector)(apiRef, {
|
|
244
|
+
rowId: id,
|
|
245
|
+
editMode: props.editMode
|
|
246
|
+
});
|
|
248
247
|
return isEditing ? _gridEditRowModel.GridRowModes.Edit : _gridEditRowModel.GridRowModes.View;
|
|
249
248
|
}, [apiRef, props.editMode]);
|
|
250
249
|
const updateRowModesModel = (0, _utils.unstable_useEventCallback)(newModel => {
|
|
@@ -579,7 +578,7 @@ const useGridRowEditing = (apiRef, props) => {
|
|
|
579
578
|
|
|
580
579
|
// Run this effect synchronously so that the keyboard event can impact the yet-to-be-rendered input.
|
|
581
580
|
(0, _utils.unstable_useEnhancedEffect)(() => {
|
|
582
|
-
const
|
|
581
|
+
const rowsLookup = (0, _gridRowsSelector.gridRowsLookupSelector)(apiRef);
|
|
583
582
|
|
|
584
583
|
// Update the ref here because updateStateToStopRowEditMode may change it later
|
|
585
584
|
const copyOfPrevRowModesModel = prevRowModesModel.current;
|
|
@@ -591,7 +590,7 @@ const useGridRowEditing = (apiRef, props) => {
|
|
|
591
590
|
mode: _gridEditRowModel.GridRowModes.View
|
|
592
591
|
};
|
|
593
592
|
const prevMode = copyOfPrevRowModesModel[id]?.mode || _gridEditRowModel.GridRowModes.View;
|
|
594
|
-
const originalId =
|
|
593
|
+
const originalId = rowsLookup[id] ? apiRef.current.getRowId(rowsLookup[id]) : id;
|
|
595
594
|
if (params.mode === _gridEditRowModel.GridRowModes.Edit && prevMode === _gridEditRowModel.GridRowModes.View) {
|
|
596
595
|
updateStateToStartRowEditMode((0, _extends2.default)({
|
|
597
596
|
id: originalId
|
|
@@ -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 = {};
|