@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.
Files changed (188) hide show
  1. package/CHANGELOG.md +148 -0
  2. package/DataGrid/DataGrid.js +1 -7
  3. package/DataGrid/useDataGridComponent.js +2 -2
  4. package/components/GridRow.d.ts +0 -1
  5. package/components/GridRow.js +32 -20
  6. package/components/GridScrollArea.d.ts +5 -2
  7. package/components/GridScrollArea.js +32 -25
  8. package/components/GridSkeletonLoadingOverlay.js +2 -1
  9. package/components/cell/GridCell.d.ts +9 -6
  10. package/components/cell/GridCell.js +29 -52
  11. package/components/containers/GridRoot.js +11 -9
  12. package/components/containers/GridRootStyles.js +138 -40
  13. package/components/toolbar/GridToolbarColumnsButton.js +5 -4
  14. package/components/toolbar/GridToolbarDensitySelector.js +2 -2
  15. package/components/toolbar/GridToolbarExportContainer.js +2 -2
  16. package/components/toolbar/GridToolbarFilterButton.js +4 -3
  17. package/components/virtualization/GridMainContainer.d.ts +10 -0
  18. package/components/virtualization/GridMainContainer.js +10 -2
  19. package/components/virtualization/GridVirtualScrollbar.d.ts +4 -0
  20. package/components/virtualization/GridVirtualScrollbar.js +5 -5
  21. package/components/virtualization/GridVirtualScroller.js +36 -16
  22. package/components/virtualization/GridVirtualScrollerContent.js +11 -2
  23. package/hooks/core/pipeProcessing/useGridRegisterPipeProcessor.d.ts +1 -1
  24. package/hooks/core/pipeProcessing/useGridRegisterPipeProcessor.js +6 -4
  25. package/hooks/core/useGridStateInitialization.js +3 -2
  26. package/hooks/features/columnHeaders/useGridColumnHeaders.js +10 -14
  27. package/hooks/features/columnResize/useGridColumnResize.js +2 -1
  28. package/hooks/features/columns/gridColumnsSelector.d.ts +0 -5
  29. package/hooks/features/columns/gridColumnsSelector.js +0 -12
  30. package/hooks/features/columns/useGridColumns.js +7 -3
  31. package/hooks/features/dimensions/gridDimensionsSelectors.d.ts +16 -0
  32. package/hooks/features/dimensions/gridDimensionsSelectors.js +26 -1
  33. package/hooks/features/dimensions/index.d.ts +1 -1
  34. package/hooks/features/dimensions/index.js +1 -2
  35. package/hooks/features/dimensions/useGridDimensions.js +102 -77
  36. package/hooks/features/editing/gridEditingSelectors.d.ts +10 -0
  37. package/hooks/features/editing/gridEditingSelectors.js +12 -1
  38. package/hooks/features/editing/index.d.ts +1 -1
  39. package/hooks/features/editing/index.js +1 -1
  40. package/hooks/features/editing/useGridCellEditing.js +3 -3
  41. package/hooks/features/editing/useGridRowEditing.js +8 -9
  42. package/hooks/features/filter/gridFilterState.d.ts +5 -0
  43. package/hooks/features/filter/gridFilterState.js +5 -0
  44. package/hooks/features/filter/useGridFilter.js +6 -13
  45. package/hooks/features/focus/useGridFocus.js +3 -2
  46. package/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +24 -16
  47. package/hooks/features/keyboardNavigation/utils.d.ts +1 -2
  48. package/hooks/features/keyboardNavigation/utils.js +0 -5
  49. package/hooks/features/listView/useGridListView.js +2 -1
  50. package/hooks/features/pagination/useGridPagination.js +1 -1
  51. package/hooks/features/rowSelection/useGridRowSelection.js +4 -4
  52. package/hooks/features/rowSelection/utils.js +1 -1
  53. package/hooks/features/rows/gridRowsMetaState.d.ts +8 -0
  54. package/hooks/features/rows/gridRowsUtils.d.ts +0 -4
  55. package/hooks/features/rows/gridRowsUtils.js +0 -16
  56. package/hooks/features/rows/useGridParamsApi.d.ts +1 -1
  57. package/hooks/features/rows/useGridParamsApi.js +33 -14
  58. package/hooks/features/rows/useGridRowSpanning.js +94 -91
  59. package/hooks/features/rows/useGridRows.js +7 -8
  60. package/hooks/features/rows/useGridRowsMeta.js +36 -19
  61. package/hooks/features/sorting/gridSortingSelector.js +10 -9
  62. package/hooks/features/virtualization/gridFocusedVirtualCellSelector.js +2 -2
  63. package/hooks/features/virtualization/useGridVirtualScroller.d.ts +15 -1
  64. package/hooks/features/virtualization/useGridVirtualScroller.js +74 -72
  65. package/hooks/utils/useGridSelector.d.ts +8 -1
  66. package/hooks/utils/useGridSelector.js +42 -8
  67. package/hooks/utils/useIsSSR.d.ts +1 -0
  68. package/hooks/utils/useIsSSR.js +5 -0
  69. package/index.js +1 -1
  70. package/internals/index.d.ts +2 -1
  71. package/internals/index.js +2 -1
  72. package/models/api/gridApiCommon.d.ts +2 -2
  73. package/models/api/gridParamsApi.d.ts +29 -2
  74. package/models/api/gridStateApi.d.ts +1 -0
  75. package/models/api/index.d.ts +1 -1
  76. package/models/api/index.js +0 -1
  77. package/models/events/gridEventLookup.d.ts +6 -0
  78. package/modern/DataGrid/DataGrid.js +1 -7
  79. package/modern/DataGrid/useDataGridComponent.js +2 -2
  80. package/modern/components/GridRow.js +32 -20
  81. package/modern/components/GridScrollArea.js +32 -25
  82. package/modern/components/GridSkeletonLoadingOverlay.js +2 -1
  83. package/modern/components/cell/GridCell.js +29 -52
  84. package/modern/components/containers/GridRoot.js +11 -9
  85. package/modern/components/containers/GridRootStyles.js +138 -40
  86. package/modern/components/toolbar/GridToolbarColumnsButton.js +5 -4
  87. package/modern/components/toolbar/GridToolbarDensitySelector.js +2 -2
  88. package/modern/components/toolbar/GridToolbarExportContainer.js +2 -2
  89. package/modern/components/toolbar/GridToolbarFilterButton.js +4 -3
  90. package/modern/components/virtualization/GridMainContainer.js +10 -2
  91. package/modern/components/virtualization/GridVirtualScrollbar.js +5 -5
  92. package/modern/components/virtualization/GridVirtualScroller.js +36 -16
  93. package/modern/components/virtualization/GridVirtualScrollerContent.js +11 -2
  94. package/modern/hooks/core/pipeProcessing/useGridRegisterPipeProcessor.js +6 -4
  95. package/modern/hooks/core/useGridStateInitialization.js +3 -2
  96. package/modern/hooks/features/columnHeaders/useGridColumnHeaders.js +10 -14
  97. package/modern/hooks/features/columnResize/useGridColumnResize.js +2 -1
  98. package/modern/hooks/features/columns/gridColumnsSelector.js +0 -12
  99. package/modern/hooks/features/columns/useGridColumns.js +7 -3
  100. package/modern/hooks/features/dimensions/gridDimensionsSelectors.js +26 -1
  101. package/modern/hooks/features/dimensions/index.js +1 -2
  102. package/modern/hooks/features/dimensions/useGridDimensions.js +102 -77
  103. package/modern/hooks/features/editing/gridEditingSelectors.js +12 -1
  104. package/modern/hooks/features/editing/index.js +1 -1
  105. package/modern/hooks/features/editing/useGridCellEditing.js +3 -3
  106. package/modern/hooks/features/editing/useGridRowEditing.js +8 -9
  107. package/modern/hooks/features/filter/gridFilterState.js +5 -0
  108. package/modern/hooks/features/filter/useGridFilter.js +6 -13
  109. package/modern/hooks/features/focus/useGridFocus.js +3 -2
  110. package/modern/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +24 -16
  111. package/modern/hooks/features/keyboardNavigation/utils.js +0 -5
  112. package/modern/hooks/features/listView/useGridListView.js +2 -1
  113. package/modern/hooks/features/pagination/useGridPagination.js +1 -1
  114. package/modern/hooks/features/rowSelection/useGridRowSelection.js +4 -4
  115. package/modern/hooks/features/rowSelection/utils.js +1 -1
  116. package/modern/hooks/features/rows/gridRowsUtils.js +0 -16
  117. package/modern/hooks/features/rows/useGridParamsApi.js +33 -14
  118. package/modern/hooks/features/rows/useGridRowSpanning.js +94 -91
  119. package/modern/hooks/features/rows/useGridRows.js +7 -8
  120. package/modern/hooks/features/rows/useGridRowsMeta.js +36 -19
  121. package/modern/hooks/features/sorting/gridSortingSelector.js +10 -9
  122. package/modern/hooks/features/virtualization/gridFocusedVirtualCellSelector.js +2 -2
  123. package/modern/hooks/features/virtualization/useGridVirtualScroller.js +74 -72
  124. package/modern/hooks/utils/useGridSelector.js +42 -8
  125. package/modern/hooks/utils/useIsSSR.js +5 -0
  126. package/modern/index.js +1 -1
  127. package/modern/internals/index.js +2 -1
  128. package/modern/models/api/index.js +0 -1
  129. package/modern/utils/roundToDecimalPlaces.js +3 -0
  130. package/modern/utils/utils.js +6 -1
  131. package/node/DataGrid/DataGrid.js +1 -7
  132. package/node/DataGrid/useDataGridComponent.js +2 -2
  133. package/node/components/GridRow.js +28 -17
  134. package/node/components/GridScrollArea.js +31 -24
  135. package/node/components/GridSkeletonLoadingOverlay.js +2 -1
  136. package/node/components/cell/GridCell.js +27 -50
  137. package/node/components/containers/GridRoot.js +10 -8
  138. package/node/components/containers/GridRootStyles.js +138 -40
  139. package/node/components/toolbar/GridToolbarColumnsButton.js +5 -4
  140. package/node/components/toolbar/GridToolbarDensitySelector.js +2 -2
  141. package/node/components/toolbar/GridToolbarExportContainer.js +2 -2
  142. package/node/components/toolbar/GridToolbarFilterButton.js +4 -3
  143. package/node/components/virtualization/GridMainContainer.js +10 -2
  144. package/node/components/virtualization/GridVirtualScrollbar.js +5 -5
  145. package/node/components/virtualization/GridVirtualScroller.js +36 -16
  146. package/node/components/virtualization/GridVirtualScrollerContent.js +11 -2
  147. package/node/hooks/core/pipeProcessing/useGridRegisterPipeProcessor.js +6 -4
  148. package/node/hooks/core/useGridStateInitialization.js +3 -2
  149. package/node/hooks/features/columnHeaders/useGridColumnHeaders.js +10 -14
  150. package/node/hooks/features/columnResize/useGridColumnResize.js +2 -1
  151. package/node/hooks/features/columns/gridColumnsSelector.js +1 -13
  152. package/node/hooks/features/columns/useGridColumns.js +7 -3
  153. package/node/hooks/features/dimensions/gridDimensionsSelectors.js +38 -2
  154. package/node/hooks/features/dimensions/index.js +13 -11
  155. package/node/hooks/features/dimensions/useGridDimensions.js +99 -74
  156. package/node/hooks/features/editing/gridEditingSelectors.js +12 -2
  157. package/node/hooks/features/editing/index.js +7 -11
  158. package/node/hooks/features/editing/useGridCellEditing.js +2 -2
  159. package/node/hooks/features/editing/useGridRowEditing.js +6 -7
  160. package/node/hooks/features/filter/gridFilterState.js +6 -1
  161. package/node/hooks/features/filter/useGridFilter.js +5 -12
  162. package/node/hooks/features/focus/useGridFocus.js +3 -2
  163. package/node/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +24 -15
  164. package/node/hooks/features/keyboardNavigation/utils.js +0 -6
  165. package/node/hooks/features/listView/useGridListView.js +2 -1
  166. package/node/hooks/features/pagination/useGridPagination.js +1 -1
  167. package/node/hooks/features/rowSelection/useGridRowSelection.js +3 -3
  168. package/node/hooks/features/rowSelection/utils.js +1 -1
  169. package/node/hooks/features/rows/gridRowsUtils.js +0 -17
  170. package/node/hooks/features/rows/useGridParamsApi.js +33 -14
  171. package/node/hooks/features/rows/useGridRowSpanning.js +92 -89
  172. package/node/hooks/features/rows/useGridRows.js +7 -8
  173. package/node/hooks/features/rows/useGridRowsMeta.js +36 -19
  174. package/node/hooks/features/sorting/gridSortingSelector.js +10 -9
  175. package/node/hooks/features/virtualization/gridFocusedVirtualCellSelector.js +2 -2
  176. package/node/hooks/features/virtualization/useGridVirtualScroller.js +73 -71
  177. package/node/hooks/utils/useGridSelector.js +42 -8
  178. package/node/hooks/utils/useIsSSR.js +12 -0
  179. package/node/index.js +1 -1
  180. package/node/internals/index.js +20 -7
  181. package/node/models/api/index.js +0 -11
  182. package/node/utils/roundToDecimalPlaces.js +9 -0
  183. package/node/utils/utils.js +8 -1
  184. package/package.json +3 -2
  185. package/utils/roundToDecimalPlaces.d.ts +1 -0
  186. package/utils/roundToDecimalPlaces.js +3 -0
  187. package/utils/utils.d.ts +1 -0
  188. 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 _dimensions = require("../dimensions");
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 gridHasFiller = dimensions.columnsTotalWidth < dimensions.viewportOuterSize.width;
65
- React.useEffect(() => {
66
- if (apiRef.current.columnHeadersContainerRef.current) {
67
- apiRef.current.columnHeadersContainerRef.current.scrollLeft = 0;
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 scrollbarWidth = dimensions.hasScrollY ? dimensions.scrollbarSize : 0;
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: dimensions.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 scrollbarWidth = dimensions.hasScrollY ? dimensions.scrollbarSize : 0;
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: dimensions.groupHeaderHeight,
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 availableWidth = apiRef.current.getRootDimensions().viewportInnerSize.width;
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.gridColumnsTotalWidthSelector = exports.gridColumnsStateSelector = exports.gridColumnVisibilityModelSelector = exports.gridColumnPositionsSelector = exports.gridColumnLookupSelector = exports.gridColumnFieldsSelector = exports.gridColumnDefinitionsSelector = void 0;
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 = viewportInnerSize => {
256
- if (prevInnerWidth.current !== viewportInnerSize.width) {
257
- prevInnerWidth.current = viewportInnerSize.width;
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
- exports.gridDimensionsSelector = gridDimensionsSelector;
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
- var _gridDimensionsSelectors = require("./gridDimensionsSelectors");
7
- Object.keys(_gridDimensionsSelectors).forEach(function (key) {
8
- if (key === "default" || key === "__esModule") return;
9
- if (key in exports && exports[key] === _gridDimensionsSelectors[key]) return;
10
- Object.defineProperty(exports, key, {
11
- enumerable: true,
12
- get: function () {
13
- return _gridDimensionsSelectors[key];
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 validRowHeight = React.useMemo(() => (0, _gridRowsUtils.getValidRowHeight)(props.rowHeight, _dataGridPropsDefaultValues.DATA_GRID_PROPS_DEFAULT_VALUES.rowHeight, _gridRowsUtils.rowHeightWarning), [props.rowHeight]);
70
- const rowHeight = Math.floor(validRowHeight * densityFactor);
71
- const headerHeight = Math.floor(props.columnHeaderHeight * densityFactor);
72
- const groupHeaderHeight = Math.floor((props.columnGroupHeaderHeight ?? props.columnHeaderHeight) * densityFactor);
73
- const headerFilterHeight = Math.floor((props.headerFilterHeight ?? props.columnHeaderHeight) * densityFactor);
74
- const columnsTotalWidth = roundToDecimalPlaces((0, _columns.gridColumnsTotalWidthSelector)(apiRef), 6);
75
- const headersTotalHeight = (0, _gridColumnsUtils.getTotalHeaderHeight)(apiRef, props);
76
- const leftPinnedWidth = pinnedColumns.left.reduce((w, col) => w + col.computedWidth, 0);
77
- const rightPinnedWidth = pinnedColumns.right.reduce((w, col) => w + col.computedWidth, 0);
78
- const [savedSize, setSavedSize] = React.useState();
79
- const debouncedSetSavedSize = React.useMemo(() => (0, _throttle.throttle)(setSavedSize, props.resizeThrottleMs), [props.resizeThrottleMs]);
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.dimensions;
83
- const setDimensions = (0, _utils.unstable_useEventCallback)(dimensions => {
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.pagination, props.paginationMode, props.getRowHeight, rowHeight]);
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 pinnedRowsHeight = (0, _gridRowsUtils.calculatePinnedRowsHeight)(apiRef);
126
- const scrollbarSize = measureScrollbarSize(rootElement, columnsTotalWidth, props.scrollbarSize);
127
- const topContainerHeight = headersTotalHeight + pinnedRowsHeight.top;
128
- const bottomContainerHeight = pinnedRowsHeight.bottom;
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, rowsMeta.currentPageTotalHeight, rowHeight, headerHeight, groupHeaderHeight, headerFilterHeight, columnsTotalWidth, headersTotalHeight, leftPinnedWidth, rightPinnedWidth]);
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
- (0, _utils.unstable_useEnhancedEffect)(() => {
223
- if (savedSize) {
224
- updateDimensions();
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
- debouncedSetSavedSize(size);
266
- }, [props.autoHeight, debouncedSetSavedSize, logger]);
267
- (0, _utils.unstable_useEnhancedEffect)(updateDimensions, [updateDimensions]);
268
- (0, _useGridApiEventHandler.useGridApiOptionHandler)(apiRef, 'sortedRowsSet', updateDimensions);
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 measureScrollbarSize(rootElement, columnsTotalWidth, scrollbarSize) {
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 || columnsTotalWidth === 0) {
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
- var _gridEditingSelectors = require("./gridEditingSelectors");
7
- Object.keys(_gridEditingSelectors).forEach(function (key) {
8
- if (key === "default" || key === "__esModule") return;
9
- if (key in exports && exports[key] === _gridEditingSelectors[key]) return;
10
- Object.defineProperty(exports, key, {
11
- enumerable: true,
12
- get: function () {
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 idToIdLookup = (0, _gridRowsSelector.gridRowsDataRowIdToIdLookupSelector)(apiRef);
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 = idToIdLookup[id] ?? id;
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
- if (props.editMode === _gridEditRowModel.GridEditModes.Cell) {
244
- return _gridEditRowModel.GridRowModes.View;
245
- }
246
- const editingState = (0, _gridEditingSelectors.gridEditRowsStateSelector)(apiRef.current.state);
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 idToIdLookup = (0, _gridRowsSelector.gridRowsDataRowIdToIdLookupSelector)(apiRef);
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 = idToIdLookup[id] ?? id;
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
- filteredRowsLookup: {},
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 = {};