@mui/x-data-grid 7.24.1 → 7.25.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 (118) hide show
  1. package/CHANGELOG.md +77 -0
  2. package/DataGrid/DataGrid.js +1 -7
  3. package/components/GridRow.d.ts +0 -1
  4. package/components/GridRow.js +25 -19
  5. package/components/cell/GridCell.d.ts +9 -6
  6. package/components/cell/GridCell.js +29 -52
  7. package/components/containers/GridRootStyles.js +135 -37
  8. package/components/toolbar/GridToolbarColumnsButton.js +5 -4
  9. package/components/toolbar/GridToolbarDensitySelector.js +2 -2
  10. package/components/toolbar/GridToolbarExportContainer.js +2 -2
  11. package/components/toolbar/GridToolbarFilterButton.js +4 -3
  12. package/components/virtualization/GridMainContainer.d.ts +10 -0
  13. package/components/virtualization/GridMainContainer.js +10 -2
  14. package/components/virtualization/GridVirtualScrollbar.d.ts +4 -0
  15. package/components/virtualization/GridVirtualScrollbar.js +5 -5
  16. package/components/virtualization/GridVirtualScroller.js +18 -5
  17. package/components/virtualization/GridVirtualScrollerContent.js +11 -2
  18. package/hooks/features/columnResize/useGridColumnResize.js +2 -1
  19. package/hooks/features/columns/useGridColumns.js +7 -3
  20. package/hooks/features/dimensions/useGridDimensions.js +6 -8
  21. package/hooks/features/editing/gridEditingSelectors.d.ts +6 -0
  22. package/hooks/features/editing/gridEditingSelectors.js +7 -1
  23. package/hooks/features/editing/index.d.ts +1 -1
  24. package/hooks/features/editing/index.js +1 -1
  25. package/hooks/features/editing/useGridCellEditing.js +3 -3
  26. package/hooks/features/editing/useGridRowEditing.js +5 -6
  27. package/hooks/features/focus/useGridFocus.js +3 -2
  28. package/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +24 -16
  29. package/hooks/features/keyboardNavigation/utils.d.ts +1 -2
  30. package/hooks/features/keyboardNavigation/utils.js +0 -5
  31. package/hooks/features/listView/useGridListView.js +2 -1
  32. package/hooks/features/rowSelection/useGridRowSelection.js +3 -3
  33. package/hooks/features/rows/useGridParamsApi.d.ts +1 -1
  34. package/hooks/features/rows/useGridParamsApi.js +33 -14
  35. package/hooks/features/rows/useGridRowSpanning.js +94 -91
  36. package/hooks/features/rows/useGridRows.js +7 -8
  37. package/hooks/features/rows/useGridRowsMeta.js +3 -2
  38. package/hooks/features/virtualization/gridFocusedVirtualCellSelector.js +2 -2
  39. package/hooks/features/virtualization/useGridVirtualScroller.d.ts +9 -1
  40. package/hooks/features/virtualization/useGridVirtualScroller.js +31 -45
  41. package/index.js +1 -1
  42. package/models/api/gridApiCommon.d.ts +2 -2
  43. package/models/api/gridParamsApi.d.ts +29 -2
  44. package/models/api/index.d.ts +1 -1
  45. package/models/api/index.js +0 -1
  46. package/modern/DataGrid/DataGrid.js +1 -7
  47. package/modern/components/GridRow.js +25 -19
  48. package/modern/components/cell/GridCell.js +29 -52
  49. package/modern/components/containers/GridRootStyles.js +135 -37
  50. package/modern/components/toolbar/GridToolbarColumnsButton.js +5 -4
  51. package/modern/components/toolbar/GridToolbarDensitySelector.js +2 -2
  52. package/modern/components/toolbar/GridToolbarExportContainer.js +2 -2
  53. package/modern/components/toolbar/GridToolbarFilterButton.js +4 -3
  54. package/modern/components/virtualization/GridMainContainer.js +10 -2
  55. package/modern/components/virtualization/GridVirtualScrollbar.js +5 -5
  56. package/modern/components/virtualization/GridVirtualScroller.js +18 -5
  57. package/modern/components/virtualization/GridVirtualScrollerContent.js +11 -2
  58. package/modern/hooks/features/columnResize/useGridColumnResize.js +2 -1
  59. package/modern/hooks/features/columns/useGridColumns.js +7 -3
  60. package/modern/hooks/features/dimensions/useGridDimensions.js +6 -8
  61. package/modern/hooks/features/editing/gridEditingSelectors.js +7 -1
  62. package/modern/hooks/features/editing/index.js +1 -1
  63. package/modern/hooks/features/editing/useGridCellEditing.js +3 -3
  64. package/modern/hooks/features/editing/useGridRowEditing.js +5 -6
  65. package/modern/hooks/features/focus/useGridFocus.js +3 -2
  66. package/modern/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +24 -16
  67. package/modern/hooks/features/keyboardNavigation/utils.js +0 -5
  68. package/modern/hooks/features/listView/useGridListView.js +2 -1
  69. package/modern/hooks/features/rowSelection/useGridRowSelection.js +3 -3
  70. package/modern/hooks/features/rows/useGridParamsApi.js +33 -14
  71. package/modern/hooks/features/rows/useGridRowSpanning.js +94 -91
  72. package/modern/hooks/features/rows/useGridRows.js +7 -8
  73. package/modern/hooks/features/rows/useGridRowsMeta.js +3 -2
  74. package/modern/hooks/features/virtualization/gridFocusedVirtualCellSelector.js +2 -2
  75. package/modern/hooks/features/virtualization/useGridVirtualScroller.js +31 -45
  76. package/modern/index.js +1 -1
  77. package/modern/models/api/index.js +0 -1
  78. package/modern/utils/roundToDecimalPlaces.js +3 -0
  79. package/modern/utils/utils.js +6 -1
  80. package/node/DataGrid/DataGrid.js +1 -7
  81. package/node/components/GridRow.js +22 -16
  82. package/node/components/cell/GridCell.js +27 -50
  83. package/node/components/containers/GridRootStyles.js +135 -37
  84. package/node/components/toolbar/GridToolbarColumnsButton.js +5 -4
  85. package/node/components/toolbar/GridToolbarDensitySelector.js +2 -2
  86. package/node/components/toolbar/GridToolbarExportContainer.js +2 -2
  87. package/node/components/toolbar/GridToolbarFilterButton.js +4 -3
  88. package/node/components/virtualization/GridMainContainer.js +10 -2
  89. package/node/components/virtualization/GridVirtualScrollbar.js +5 -5
  90. package/node/components/virtualization/GridVirtualScroller.js +18 -5
  91. package/node/components/virtualization/GridVirtualScrollerContent.js +11 -2
  92. package/node/hooks/features/columnResize/useGridColumnResize.js +2 -1
  93. package/node/hooks/features/columns/useGridColumns.js +7 -3
  94. package/node/hooks/features/dimensions/useGridDimensions.js +6 -8
  95. package/node/hooks/features/editing/gridEditingSelectors.js +8 -2
  96. package/node/hooks/features/editing/index.js +7 -11
  97. package/node/hooks/features/editing/useGridCellEditing.js +2 -2
  98. package/node/hooks/features/editing/useGridRowEditing.js +3 -4
  99. package/node/hooks/features/focus/useGridFocus.js +3 -2
  100. package/node/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +24 -15
  101. package/node/hooks/features/keyboardNavigation/utils.js +0 -6
  102. package/node/hooks/features/listView/useGridListView.js +2 -1
  103. package/node/hooks/features/rowSelection/useGridRowSelection.js +2 -2
  104. package/node/hooks/features/rows/useGridParamsApi.js +33 -14
  105. package/node/hooks/features/rows/useGridRowSpanning.js +92 -89
  106. package/node/hooks/features/rows/useGridRows.js +7 -8
  107. package/node/hooks/features/rows/useGridRowsMeta.js +5 -4
  108. package/node/hooks/features/virtualization/gridFocusedVirtualCellSelector.js +2 -2
  109. package/node/hooks/features/virtualization/useGridVirtualScroller.js +31 -45
  110. package/node/index.js +1 -1
  111. package/node/models/api/index.js +0 -11
  112. package/node/utils/roundToDecimalPlaces.js +9 -0
  113. package/node/utils/utils.js +8 -1
  114. package/package.json +2 -2
  115. package/utils/roundToDecimalPlaces.d.ts +1 -0
  116. package/utils/roundToDecimalPlaces.js +3 -0
  117. package/utils/utils.d.ts +1 -0
  118. package/utils/utils.js +6 -1
@@ -45,50 +45,76 @@ const ignoreSsrWarning = '/* emotion-disable-server-rendering-unsafe-selector-wa
45
45
  const GridRootStyles = exports.GridRootStyles = (0, _styles.styled)('div', {
46
46
  name: 'MuiDataGrid',
47
47
  slot: 'Root',
48
- overridesResolver: (props, styles) => [{
48
+ overridesResolver: (props, styles) => [
49
+ // Root overrides
50
+ styles.root, {
49
51
  [`&.${_gridClasses.gridClasses.autoHeight}`]: styles.autoHeight
50
52
  }, {
51
- [`&.${_gridClasses.gridClasses.aggregationColumnHeader}`]: styles.aggregationColumnHeader
53
+ [`&.${_gridClasses.gridClasses.autosizing}`]: styles.autosizing
52
54
  }, {
53
- [`&.${_gridClasses.gridClasses['aggregationColumnHeader--alignLeft']}`]: styles['aggregationColumnHeader--alignLeft']
55
+ [`&.${_gridClasses.gridClasses['root--densityStandard']}`]: styles['root--densityStandard']
54
56
  }, {
55
- [`&.${_gridClasses.gridClasses['aggregationColumnHeader--alignCenter']}`]: styles['aggregationColumnHeader--alignCenter']
57
+ [`&.${_gridClasses.gridClasses['root--densityComfortable']}`]: styles['root--densityComfortable']
56
58
  }, {
57
- [`&.${_gridClasses.gridClasses['aggregationColumnHeader--alignRight']}`]: styles['aggregationColumnHeader--alignRight']
59
+ [`&.${_gridClasses.gridClasses['root--densityCompact']}`]: styles['root--densityCompact']
58
60
  }, {
59
- [`&.${_gridClasses.gridClasses.aggregationColumnHeaderLabel}`]: styles.aggregationColumnHeaderLabel
61
+ [`&.${_gridClasses.gridClasses['root--disableUserSelection']}`]: styles['root--disableUserSelection']
60
62
  }, {
61
- [`&.${_gridClasses.gridClasses['root--disableUserSelection']} .${_gridClasses.gridClasses.cell}`]: styles['root--disableUserSelection']
63
+ [`&.${_gridClasses.gridClasses['root--noToolbar']}`]: styles['root--noToolbar']
62
64
  }, {
63
- [`&.${_gridClasses.gridClasses.autosizing}`]: styles.autosizing
65
+ [`&.${_gridClasses.gridClasses.withVerticalBorder}`]: styles.withVerticalBorder
66
+ },
67
+ // Child element overrides
68
+ // - Only declare overrides here for class names that are not applied to `styled` components.
69
+ // - For `styled` components, declare overrides in the component itself.
70
+ {
71
+ [`& .${_gridClasses.gridClasses.actionsCell}`]: styles.actionsCell
64
72
  }, {
65
- [`& .${_gridClasses.gridClasses.editBooleanCell}`]: styles.editBooleanCell
73
+ [`& .${_gridClasses.gridClasses.booleanCell}`]: styles.booleanCell
66
74
  }, {
67
75
  [`& .${_gridClasses.gridClasses.cell}`]: styles.cell
76
+ }, {
77
+ [`& .${_gridClasses.gridClasses['cell--editable']}`]: styles['cell--editable']
68
78
  }, {
69
79
  [`& .${_gridClasses.gridClasses['cell--editing']}`]: styles['cell--editing']
70
80
  }, {
71
- [`& .${_gridClasses.gridClasses['cell--textCenter']}`]: styles['cell--textCenter']
81
+ [`& .${_gridClasses.gridClasses['cell--flex']}`]: styles['cell--flex']
72
82
  }, {
73
- [`& .${_gridClasses.gridClasses['cell--textLeft']}`]: styles['cell--textLeft']
83
+ [`& .${_gridClasses.gridClasses['cell--pinnedLeft']}`]: styles['cell--pinnedLeft']
74
84
  }, {
75
- [`& .${_gridClasses.gridClasses['cell--textRight']}`]: styles['cell--textRight']
76
- }, {
77
- [`& .${_gridClasses.gridClasses['cell--rangeTop']}`]: styles['cell--rangeTop']
85
+ [`& .${_gridClasses.gridClasses['cell--pinnedRight']}`]: styles['cell--pinnedRight']
78
86
  }, {
79
87
  [`& .${_gridClasses.gridClasses['cell--rangeBottom']}`]: styles['cell--rangeBottom']
80
88
  }, {
81
89
  [`& .${_gridClasses.gridClasses['cell--rangeLeft']}`]: styles['cell--rangeLeft']
82
90
  }, {
83
91
  [`& .${_gridClasses.gridClasses['cell--rangeRight']}`]: styles['cell--rangeRight']
92
+ }, {
93
+ [`& .${_gridClasses.gridClasses['cell--rangeTop']}`]: styles['cell--rangeTop']
94
+ }, {
95
+ [`& .${_gridClasses.gridClasses['cell--selectionMode']}`]: styles['cell--selectionMode']
96
+ }, {
97
+ [`& .${_gridClasses.gridClasses['cell--textCenter']}`]: styles['cell--textCenter']
98
+ }, {
99
+ [`& .${_gridClasses.gridClasses['cell--textLeft']}`]: styles['cell--textLeft']
100
+ }, {
101
+ [`& .${_gridClasses.gridClasses['cell--textRight']}`]: styles['cell--textRight']
102
+ }, {
103
+ [`& .${_gridClasses.gridClasses['cell--withLeftBorder']}`]: styles['cell--withLeftBorder']
84
104
  }, {
85
105
  [`& .${_gridClasses.gridClasses['cell--withRightBorder']}`]: styles['cell--withRightBorder']
86
106
  }, {
87
107
  [`& .${_gridClasses.gridClasses.cellCheckbox}`]: styles.cellCheckbox
108
+ }, {
109
+ [`& .${_gridClasses.gridClasses.cellEmpty}`]: styles.cellEmpty
110
+ }, {
111
+ [`& .${_gridClasses.gridClasses.cellOffsetLeft}`]: styles.cellOffsetLeft
88
112
  }, {
89
113
  [`& .${_gridClasses.gridClasses.cellSkeleton}`]: styles.cellSkeleton
90
114
  }, {
91
115
  [`& .${_gridClasses.gridClasses.checkboxInput}`]: styles.checkboxInput
116
+ }, {
117
+ [`& .${_gridClasses.gridClasses.columnHeader}`]: styles.columnHeader
92
118
  }, {
93
119
  [`& .${_gridClasses.gridClasses['columnHeader--alignCenter']}`]: styles['columnHeader--alignCenter']
94
120
  }, {
@@ -97,75 +123,151 @@ const GridRootStyles = exports.GridRootStyles = (0, _styles.styled)('div', {
97
123
  [`& .${_gridClasses.gridClasses['columnHeader--alignRight']}`]: styles['columnHeader--alignRight']
98
124
  }, {
99
125
  [`& .${_gridClasses.gridClasses['columnHeader--dragging']}`]: styles['columnHeader--dragging']
126
+ }, {
127
+ [`& .${_gridClasses.gridClasses['columnHeader--emptyGroup']}`]: styles['columnHeader--emptyGroup']
128
+ }, {
129
+ [`& .${_gridClasses.gridClasses['columnHeader--filledGroup']}`]: styles['columnHeader--filledGroup']
130
+ }, {
131
+ [`& .${_gridClasses.gridClasses['columnHeader--filtered']}`]: styles['columnHeader--filtered']
132
+ }, {
133
+ [`& .${_gridClasses.gridClasses['columnHeader--last']}`]: styles['columnHeader--last']
134
+ }, {
135
+ [`& .${_gridClasses.gridClasses['columnHeader--lastUnpinned']}`]: styles['columnHeader--lastUnpinned']
100
136
  }, {
101
137
  [`& .${_gridClasses.gridClasses['columnHeader--moving']}`]: styles['columnHeader--moving']
102
138
  }, {
103
139
  [`& .${_gridClasses.gridClasses['columnHeader--numeric']}`]: styles['columnHeader--numeric']
140
+ }, {
141
+ [`& .${_gridClasses.gridClasses['columnHeader--pinnedLeft']}`]: styles['columnHeader--pinnedLeft']
142
+ }, {
143
+ [`& .${_gridClasses.gridClasses['columnHeader--pinnedRight']}`]: styles['columnHeader--pinnedRight']
144
+ }, {
145
+ [`& .${_gridClasses.gridClasses['columnHeader--siblingFocused']}`]: styles['columnHeader--siblingFocused']
104
146
  }, {
105
147
  [`& .${_gridClasses.gridClasses['columnHeader--sortable']}`]: styles['columnHeader--sortable']
106
148
  }, {
107
149
  [`& .${_gridClasses.gridClasses['columnHeader--sorted']}`]: styles['columnHeader--sorted']
108
150
  }, {
109
- [`& .${_gridClasses.gridClasses['columnHeader--withRightBorder']}`]: styles['columnHeader--withRightBorder']
110
- }, {
111
- [`& .${_gridClasses.gridClasses.columnHeader}`]: styles.columnHeader
151
+ [`& .${_gridClasses.gridClasses['columnHeader--withLeftBorder']}`]: styles['columnHeader--withLeftBorder']
112
152
  }, {
113
- [`& .${_gridClasses.gridClasses.headerFilterRow}`]: styles.headerFilterRow
153
+ [`& .${_gridClasses.gridClasses['columnHeader--withRightBorder']}`]: styles['columnHeader--withRightBorder']
114
154
  }, {
115
155
  [`& .${_gridClasses.gridClasses.columnHeaderCheckbox}`]: styles.columnHeaderCheckbox
116
156
  }, {
117
157
  [`& .${_gridClasses.gridClasses.columnHeaderDraggableContainer}`]: styles.columnHeaderDraggableContainer
118
158
  }, {
119
159
  [`& .${_gridClasses.gridClasses.columnHeaderTitleContainer}`]: styles.columnHeaderTitleContainer
160
+ }, {
161
+ [`& .${_gridClasses.gridClasses.columnHeaderTitleContainerContent}`]: styles.columnHeaderTitleContainerContent
162
+ }, {
163
+ [`& .${_gridClasses.gridClasses.columnSeparator}`]: styles.columnSeparator
120
164
  }, {
121
165
  [`& .${_gridClasses.gridClasses['columnSeparator--resizable']}`]: styles['columnSeparator--resizable']
122
166
  }, {
123
167
  [`& .${_gridClasses.gridClasses['columnSeparator--resizing']}`]: styles['columnSeparator--resizing']
124
168
  }, {
125
- [`& .${_gridClasses.gridClasses.columnSeparator}`]: styles.columnSeparator
169
+ [`& .${_gridClasses.gridClasses['columnSeparator--sideLeft']}`]: styles['columnSeparator--sideLeft']
170
+ }, {
171
+ [`& .${_gridClasses.gridClasses['columnSeparator--sideRight']}`]: styles['columnSeparator--sideRight']
172
+ }, {
173
+ [`& .${_gridClasses.gridClasses['container--bottom']}`]: styles['container--bottom']
174
+ }, {
175
+ [`& .${_gridClasses.gridClasses['container--top']}`]: styles['container--top']
176
+ }, {
177
+ [`& .${_gridClasses.gridClasses.detailPanelToggleCell}`]: styles.detailPanelToggleCell
178
+ }, {
179
+ [`& .${_gridClasses.gridClasses['detailPanelToggleCell--expanded']}`]: styles['detailPanelToggleCell--expanded']
180
+ }, {
181
+ [`& .${_gridClasses.gridClasses.editBooleanCell}`]: styles.editBooleanCell
126
182
  }, {
127
183
  [`& .${_gridClasses.gridClasses.filterIcon}`]: styles.filterIcon
184
+ }, {
185
+ [`& .${_gridClasses.gridClasses['filler--borderBottom']}`]: styles['filler--borderBottom']
186
+ }, {
187
+ [`& .${_gridClasses.gridClasses['filler--pinnedLeft']}`]: styles['filler--pinnedLeft']
188
+ }, {
189
+ [`& .${_gridClasses.gridClasses['filler--pinnedRight']}`]: styles['filler--pinnedRight']
190
+ }, {
191
+ [`& .${_gridClasses.gridClasses.groupingCriteriaCell}`]: styles.groupingCriteriaCell
192
+ }, {
193
+ [`& .${_gridClasses.gridClasses.groupingCriteriaCellLoadingContainer}`]: styles.groupingCriteriaCellLoadingContainer
194
+ }, {
195
+ [`& .${_gridClasses.gridClasses.groupingCriteriaCellToggle}`]: styles.groupingCriteriaCellToggle
196
+ }, {
197
+ [`& .${_gridClasses.gridClasses.headerFilterRow}`]: styles.headerFilterRow
128
198
  }, {
129
199
  [`& .${_gridClasses.gridClasses.iconSeparator}`]: styles.iconSeparator
130
200
  }, {
131
201
  [`& .${_gridClasses.gridClasses.menuIcon}`]: styles.menuIcon
132
202
  }, {
133
203
  [`& .${_gridClasses.gridClasses.menuIconButton}`]: styles.menuIconButton
204
+ }, {
205
+ [`& .${_gridClasses.gridClasses.menuList}`]: styles.menuList
134
206
  }, {
135
207
  [`& .${_gridClasses.gridClasses.menuOpen}`]: styles.menuOpen
136
208
  }, {
137
- [`& .${_gridClasses.gridClasses.menuList}`]: styles.menuList
209
+ [`& .${_gridClasses.gridClasses.overlayWrapperInner}`]: styles.overlayWrapperInner
138
210
  }, {
139
- [`& .${_gridClasses.gridClasses['row--editable']}`]: styles['row--editable']
211
+ [`& .${_gridClasses.gridClasses.pinnedRows}`]: styles.pinnedRows
140
212
  }, {
141
- [`& .${_gridClasses.gridClasses['row--editing']}`]: styles['row--editing']
213
+ [`& .${_gridClasses.gridClasses['pinnedRows--bottom']}`]: styles['pinnedRows--bottom']
142
214
  }, {
143
- [`& .${_gridClasses.gridClasses['row--dragging']}`]: styles['row--dragging']
215
+ [`& .${_gridClasses.gridClasses['pinnedRows--top']}`]: styles['pinnedRows--top']
144
216
  }, {
145
217
  [`& .${_gridClasses.gridClasses.row}`]: styles.row
146
218
  }, {
147
- [`& .${_gridClasses.gridClasses.rowReorderCellPlaceholder}`]: styles.rowReorderCellPlaceholder
219
+ [`& .${_gridClasses.gridClasses['row--borderBottom']}`]: styles['row--borderBottom']
220
+ }, {
221
+ [`& .${_gridClasses.gridClasses['row--detailPanelExpanded']}`]: styles['row--detailPanelExpanded']
222
+ }, {
223
+ [`& .${_gridClasses.gridClasses['row--dragging']}`]: styles['row--dragging']
224
+ }, {
225
+ [`& .${_gridClasses.gridClasses['row--dynamicHeight']}`]: styles['row--dynamicHeight']
226
+ }, {
227
+ [`& .${_gridClasses.gridClasses['row--editable']}`]: styles['row--editable']
228
+ }, {
229
+ [`& .${_gridClasses.gridClasses['row--editing']}`]: styles['row--editing']
230
+ }, {
231
+ [`& .${_gridClasses.gridClasses['row--firstVisible']}`]: styles['row--firstVisible']
232
+ }, {
233
+ [`& .${_gridClasses.gridClasses['row--lastVisible']}`]: styles['row--lastVisible']
148
234
  }, {
149
235
  [`& .${_gridClasses.gridClasses.rowReorderCell}`]: styles.rowReorderCell
150
236
  }, {
151
237
  [`& .${_gridClasses.gridClasses['rowReorderCell--draggable']}`]: styles['rowReorderCell--draggable']
152
238
  }, {
153
- [`& .${_gridClasses.gridClasses.sortIcon}`]: styles.sortIcon
239
+ [`& .${_gridClasses.gridClasses.rowReorderCellContainer}`]: styles.rowReorderCellContainer
154
240
  }, {
155
- [`& .${_gridClasses.gridClasses.withBorderColor}`]: styles.withBorderColor
241
+ [`& .${_gridClasses.gridClasses.rowReorderCellPlaceholder}`]: styles.rowReorderCellPlaceholder
156
242
  }, {
157
- [`& .${_gridClasses.gridClasses.treeDataGroupingCell}`]: styles.treeDataGroupingCell
243
+ [`& .${_gridClasses.gridClasses.rowSkeleton}`]: styles.rowSkeleton
158
244
  }, {
159
- [`& .${_gridClasses.gridClasses.treeDataGroupingCellToggle}`]: styles.treeDataGroupingCellToggle
245
+ [`& .${_gridClasses.gridClasses.scrollbar}`]: styles.scrollbar
160
246
  }, {
161
- [`& .${_gridClasses.gridClasses.treeDataGroupingCellLoadingContainer}`]: styles.treeDataGroupingCellLoadingContainer
247
+ [`& .${_gridClasses.gridClasses['scrollbar--horizontal']}`]: styles['scrollbar--horizontal']
162
248
  }, {
163
- [`& .${_gridClasses.gridClasses.groupingCriteriaCellLoadingContainer}`]: styles.groupingCriteriaCellLoadingContainer
249
+ [`& .${_gridClasses.gridClasses['scrollbar--vertical']}`]: styles['scrollbar--vertical']
164
250
  }, {
165
- [`& .${_gridClasses.gridClasses.detailPanelToggleCell}`]: styles.detailPanelToggleCell
251
+ [`& .${_gridClasses.gridClasses.scrollbarFiller}`]: styles.scrollbarFiller
166
252
  }, {
167
- [`& .${_gridClasses.gridClasses['detailPanelToggleCell--expanded']}`]: styles['detailPanelToggleCell--expanded']
168
- }, styles.root]
253
+ [`& .${_gridClasses.gridClasses['scrollbarFiller--borderBottom']}`]: styles['scrollbarFiller--borderBottom']
254
+ }, {
255
+ [`& .${_gridClasses.gridClasses['scrollbarFiller--borderTop']}`]: styles['scrollbarFiller--borderTop']
256
+ }, {
257
+ [`& .${_gridClasses.gridClasses['scrollbarFiller--header']}`]: styles['scrollbarFiller--header']
258
+ }, {
259
+ [`& .${_gridClasses.gridClasses['scrollbarFiller--pinnedRight']}`]: styles['scrollbarFiller--pinnedRight']
260
+ }, {
261
+ [`& .${_gridClasses.gridClasses.sortIcon}`]: styles.sortIcon
262
+ }, {
263
+ [`& .${_gridClasses.gridClasses.treeDataGroupingCell}`]: styles.treeDataGroupingCell
264
+ }, {
265
+ [`& .${_gridClasses.gridClasses.treeDataGroupingCellLoadingContainer}`]: styles.treeDataGroupingCellLoadingContainer
266
+ }, {
267
+ [`& .${_gridClasses.gridClasses.treeDataGroupingCellToggle}`]: styles.treeDataGroupingCellToggle
268
+ }, {
269
+ [`& .${_gridClasses.gridClasses.withBorderColor}`]: styles.withBorderColor
270
+ }]
169
271
  })(({
170
272
  theme: t
171
273
  }) => {
@@ -262,10 +364,6 @@ const GridRootStyles = exports.GridRootStyles = (0, _styles.styled)('div', {
262
364
  overflow: 'visible !important'
263
365
  },
264
366
  '@media (hover: hover)': {
265
- [`& .${_gridClasses.gridClasses.iconButtonContainer}`]: {
266
- width: '0 !important',
267
- visibility: 'hidden !important'
268
- },
269
367
  [`& .${_gridClasses.gridClasses.menuIcon}`]: {
270
368
  width: '0 !important',
271
369
  visibility: 'hidden !important'
@@ -53,14 +53,15 @@ const GridToolbarColumnsButton = exports.GridToolbarColumnsButton = (0, _forward
53
53
  "aria-haspopup": "menu",
54
54
  "aria-expanded": isOpen,
55
55
  "aria-controls": isOpen ? columnPanelId : undefined,
56
- startIcon: /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.columnSelectorIcon, {}),
57
- onClick: showColumns,
56
+ startIcon: /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.columnSelectorIcon, {})
57
+ }, rootProps.slotProps?.baseButton, buttonProps, {
58
58
  onPointerUp: event => {
59
59
  if (preferencePanel.open) {
60
60
  event.stopPropagation();
61
61
  }
62
- }
63
- }, rootProps.slotProps?.baseButton, buttonProps, {
62
+ buttonProps.onPointerUp?.(event);
63
+ },
64
+ onClick: showColumns,
64
65
  ref: ref,
65
66
  children: apiRef.current.getLocaleText('toolbarColumns')
66
67
  }))
@@ -102,9 +102,9 @@ const GridToolbarDensitySelector = exports.GridToolbarDensitySelector = (0, _for
102
102
  "aria-haspopup": "menu",
103
103
  "aria-expanded": open,
104
104
  "aria-controls": open ? densityMenuId : undefined,
105
- id: densityButtonId,
106
- onClick: handleDensitySelectorOpen
105
+ id: densityButtonId
107
106
  }, rootProps.slotProps?.baseButton, buttonProps, {
107
+ onClick: handleDensitySelectorOpen,
108
108
  ref: handleRef,
109
109
  children: apiRef.current.getLocaleText('toolbarDensity')
110
110
  }))
@@ -60,9 +60,9 @@ const GridToolbarExportContainer = exports.GridToolbarExportContainer = (0, _for
60
60
  "aria-label": apiRef.current.getLocaleText('toolbarExportLabel'),
61
61
  "aria-haspopup": "menu",
62
62
  "aria-controls": open ? exportMenuId : undefined,
63
- id: exportButtonId,
64
- onClick: handleMenuOpen
63
+ id: exportButtonId
65
64
  }, rootProps.slotProps?.baseButton, buttonProps, {
65
+ onClick: handleMenuOpen,
66
66
  ref: handleRef,
67
67
  children: apiRef.current.getLocaleText('toolbarExport')
68
68
  }))
@@ -117,14 +117,15 @@ const GridToolbarFilterButton = exports.GridToolbarFilterButton = (0, _forwardRe
117
117
  color: "primary"
118
118
  }, rootProps.slotProps?.baseBadge, badgeProps, {
119
119
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.openFilterButtonIcon, {})
120
- })),
120
+ }))
121
+ }, rootProps.slotProps?.baseButton, buttonProps, {
121
122
  onClick: toggleFilter,
122
123
  onPointerUp: event => {
123
124
  if (preferencePanel.open) {
124
125
  event.stopPropagation();
125
126
  }
126
- }
127
- }, rootProps.slotProps?.baseButton, buttonProps, {
127
+ buttonProps.onPointerUp?.(event);
128
+ },
128
129
  ref: ref,
129
130
  children: apiRef.current.getLocaleText('toolbarFilters')
130
131
  }))
@@ -22,7 +22,12 @@ const GridPanelAnchor = (0, _system.styled)('div')({
22
22
  const Element = (0, _system.styled)('div', {
23
23
  name: 'MuiDataGrid',
24
24
  slot: 'Main',
25
- overridesResolver: (props, styles) => styles.main
25
+ overridesResolver: (props, styles) => {
26
+ const {
27
+ ownerState
28
+ } = props;
29
+ return [styles.main, ownerState.dimensions.rightPinnedWidth > 0 && styles['main--hasPinnedRight'], ownerState.loadingOverlayVariant === 'skeleton' && styles['main--hasSkeletonLoadingOverlay']];
30
+ }
26
31
  })({
27
32
  flexGrow: 1,
28
33
  position: 'relative',
@@ -31,11 +36,14 @@ const Element = (0, _system.styled)('div', {
31
36
  flexDirection: 'column'
32
37
  });
33
38
  const GridMainContainer = exports.GridMainContainer = (0, _forwardRef.forwardRef)((props, ref) => {
39
+ const {
40
+ ownerState
41
+ } = props;
34
42
  const rootProps = (0, _useGridRootProps.useGridRootProps)();
35
43
  const configuration = (0, _useGridConfiguration.useGridConfiguration)();
36
44
  const ariaAttributes = configuration.hooks.useGridAriaAttributes();
37
45
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(Element, (0, _extends2.default)({
38
- ownerState: rootProps,
46
+ ownerState: ownerState,
39
47
  className: props.className,
40
48
  tabIndex: -1
41
49
  }, ariaAttributes, rootProps.slotProps?.main, {
@@ -74,26 +74,27 @@ const GridVirtualScrollbar = exports.GridVirtualScrollbar = (0, _forwardRef.forw
74
74
  const dimensions = (0, _hooks.useGridSelector)(apiRef, _hooks.gridDimensionsSelector);
75
75
  const propertyDimension = props.position === 'vertical' ? 'height' : 'width';
76
76
  const propertyScroll = props.position === 'vertical' ? 'scrollTop' : 'scrollLeft';
77
+ const propertyScrollPosition = props.position === 'vertical' ? 'top' : 'left';
77
78
  const hasScroll = props.position === 'vertical' ? dimensions.hasScrollX : dimensions.hasScrollY;
78
79
  const contentSize = dimensions.minimumSize[propertyDimension] + (hasScroll ? dimensions.scrollbarSize : 0);
79
80
  const scrollbarSize = props.position === 'vertical' ? dimensions.viewportInnerSize.height : dimensions.viewportOuterSize.width;
80
81
  const scrollbarInnerSize = scrollbarSize * (contentSize / dimensions.viewportOuterSize[propertyDimension]);
81
82
  const onScrollerScroll = (0, _utils.unstable_useEventCallback)(() => {
82
- const scroller = apiRef.current.virtualScrollerRef.current;
83
83
  const scrollbar = scrollbarRef.current;
84
+ const scrollPosition = props.scrollPosition.current;
84
85
  if (!scrollbar) {
85
86
  return;
86
87
  }
87
- if (scroller[propertyScroll] === lastPosition.current) {
88
+ if (scrollPosition[propertyScrollPosition] === lastPosition.current) {
88
89
  return;
89
90
  }
90
- lastPosition.current = scroller[propertyScroll];
91
+ lastPosition.current = scrollPosition[propertyScrollPosition];
91
92
  if (isLocked.current) {
92
93
  isLocked.current = false;
93
94
  return;
94
95
  }
95
96
  isLocked.current = true;
96
- const value = scroller[propertyScroll] / contentSize;
97
+ const value = scrollPosition[propertyScrollPosition] / contentSize;
97
98
  scrollbar[propertyScroll] = value * scrollbarInnerSize;
98
99
  });
99
100
  const onScrollbarScroll = (0, _utils.unstable_useEventCallback)(() => {
@@ -114,7 +115,6 @@ const GridVirtualScrollbar = exports.GridVirtualScrollbar = (0, _forwardRef.forw
114
115
  const scroller = apiRef.current.virtualScrollerRef.current;
115
116
  const scrollbar = scrollbarRef.current;
116
117
  const options = {
117
- capture: true,
118
118
  passive: true
119
119
  };
120
120
  scroller.addEventListener('scroll', onScrollerScroll, options);
@@ -28,9 +28,11 @@ var _GridVirtualScrollerFiller = require("./GridVirtualScrollerFiller");
28
28
  var _GridVirtualScrollerRenderZone = require("./GridVirtualScrollerRenderZone");
29
29
  var _GridVirtualScrollbar = require("./GridVirtualScrollbar");
30
30
  var _jsxRuntime = require("react/jsx-runtime");
31
- const useUtilityClasses = (ownerState, dimensions, loadingOverlayVariant) => {
31
+ const useUtilityClasses = ownerState => {
32
32
  const {
33
- classes
33
+ classes,
34
+ dimensions,
35
+ loadingOverlayVariant
34
36
  } = ownerState;
35
37
  const slots = {
36
38
  root: ['main', dimensions.rightPinnedWidth > 0 && 'main--hasPinnedRight', loadingOverlayVariant === 'skeleton' && 'main--hasSkeletonLoadingOverlay'],
@@ -41,7 +43,12 @@ const useUtilityClasses = (ownerState, dimensions, loadingOverlayVariant) => {
41
43
  const Scroller = (0, _system.styled)('div', {
42
44
  name: 'MuiDataGrid',
43
45
  slot: 'VirtualScroller',
44
- overridesResolver: (props, styles) => styles.virtualScroller
46
+ overridesResolver: (props, styles) => {
47
+ const {
48
+ ownerState
49
+ } = props;
50
+ return [styles.virtualScroller, ownerState.dimensions.hasScrollX && styles['virtualScroller--hasScrollX']];
51
+ }
45
52
  })({
46
53
  position: 'relative',
47
54
  height: '100%',
@@ -64,7 +71,12 @@ function GridVirtualScroller(props) {
64
71
  const rootProps = (0, _useGridRootProps.useGridRootProps)();
65
72
  const dimensions = (0, _useGridSelector.useGridSelector)(apiRef, _dimensions.gridDimensionsSelector);
66
73
  const overlaysProps = (0, _useGridOverlays.useGridOverlays)();
67
- const classes = useUtilityClasses(rootProps, dimensions, overlaysProps.loadingOverlayVariant);
74
+ const ownerState = {
75
+ classes: rootProps.classes,
76
+ dimensions,
77
+ loadingOverlayVariant: overlaysProps.loadingOverlayVariant
78
+ };
79
+ const classes = useUtilityClasses(ownerState);
68
80
  const virtualScroller = (0, _useGridVirtualScroller.useGridVirtualScroller)();
69
81
  const {
70
82
  getContainerProps,
@@ -79,6 +91,7 @@ function GridVirtualScroller(props) {
79
91
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_GridMainContainer.GridMainContainer, (0, _extends2.default)({
80
92
  className: classes.root
81
93
  }, getContainerProps(), {
94
+ ownerState: ownerState,
82
95
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_GridScrollArea.GridScrollArea, {
83
96
  scrollDirection: "left"
84
97
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridScrollArea.GridScrollArea, {
@@ -86,7 +99,7 @@ function GridVirtualScroller(props) {
86
99
  }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(Scroller, (0, _extends2.default)({
87
100
  className: classes.scroller
88
101
  }, getScrollerProps(), {
89
- ownerState: rootProps,
102
+ ownerState: ownerState,
90
103
  children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_GridTopContainer.GridTopContainer, {
91
104
  children: [!rootProps.unstable_listView && /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridHeaders.GridHeaders, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.pinnedRows, {
92
105
  position: "top",
@@ -27,14 +27,23 @@ const useUtilityClasses = (props, overflowedContent) => {
27
27
  const VirtualScrollerContentRoot = (0, _system.styled)('div', {
28
28
  name: 'MuiDataGrid',
29
29
  slot: 'VirtualScrollerContent',
30
- overridesResolver: (props, styles) => styles.virtualScrollerContent
30
+ overridesResolver: (props, styles) => {
31
+ const {
32
+ ownerState
33
+ } = props;
34
+ return [styles.virtualScrollerContent, ownerState.overflowedContent && styles['virtualScrollerContent--overflowed']];
35
+ }
31
36
  })({});
32
37
  const GridVirtualScrollerContent = exports.GridVirtualScrollerContent = (0, _forwardRef.forwardRef)(function GridVirtualScrollerContent(props, ref) {
33
38
  const rootProps = (0, _useGridRootProps.useGridRootProps)();
34
39
  const overflowedContent = !rootProps.autoHeight && props.style?.minHeight === 'auto';
35
40
  const classes = useUtilityClasses(rootProps, overflowedContent);
41
+ const ownerState = {
42
+ classes: rootProps.classes,
43
+ overflowedContent
44
+ };
36
45
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(VirtualScrollerContentRoot, (0, _extends2.default)({}, props, {
37
- ownerState: rootProps,
46
+ ownerState: ownerState,
38
47
  className: (0, _clsx.default)(classes.root, props.className),
39
48
  ref: ref
40
49
  }));
@@ -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);
@@ -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
  };
@@ -24,6 +24,7 @@ var _gridRowsMetaSelector = require("../rows/gridRowsMetaSelector");
24
24
  var _gridRowsUtils = require("../rows/gridRowsUtils");
25
25
  var _gridColumnsUtils = require("../columns/gridColumnsUtils");
26
26
  var _dataGridPropsDefaultValues = require("../../../constants/dataGridPropsDefaultValues");
27
+ var _roundToDecimalPlaces = require("../../../utils/roundToDecimalPlaces");
27
28
  var _isJSDOM = require("../../../utils/isJSDOM");
28
29
  const EMPTY_SIZE = {
29
30
  width: 0,
@@ -71,7 +72,7 @@ function useGridDimensions(apiRef, props) {
71
72
  const headerHeight = Math.floor(props.columnHeaderHeight * densityFactor);
72
73
  const groupHeaderHeight = Math.floor((props.columnGroupHeaderHeight ?? props.columnHeaderHeight) * densityFactor);
73
74
  const headerFilterHeight = Math.floor((props.headerFilterHeight ?? props.columnHeaderHeight) * densityFactor);
74
- const columnsTotalWidth = roundToDecimalPlaces((0, _columns.gridColumnsTotalWidthSelector)(apiRef), 6);
75
+ const columnsTotalWidth = (0, _roundToDecimalPlaces.roundToDecimalPlaces)((0, _columns.gridColumnsTotalWidthSelector)(apiRef), 1);
75
76
  const headersTotalHeight = (0, _gridColumnsUtils.getTotalHeaderHeight)(apiRef, props);
76
77
  const leftPinnedWidth = pinnedColumns.left.reduce((w, col) => w + col.computedWidth, 0);
77
78
  const rightPinnedWidth = pinnedColumns.right.reduce((w, col) => w + col.computedWidth, 0);
@@ -121,6 +122,9 @@ function useGridDimensions(apiRef, props) {
121
122
  return Math.min(maximumPageSizeWithoutScrollBar, currentPage.rows.length);
122
123
  }, [apiRef, props.pagination, props.paginationMode, props.getRowHeight, rowHeight]);
123
124
  const updateDimensions = React.useCallback(() => {
125
+ // All the floating point dimensions should be rounded to .1 decimal places to avoid subpixel rendering issues
126
+ // https://github.com/mui/mui-x/issues/9550#issuecomment-1619020477
127
+ // https://github.com/mui/mui-x/issues/15721
124
128
  const rootElement = apiRef.current.rootElementRef.current;
125
129
  const pinnedRowsHeight = (0, _gridRowsUtils.calculatePinnedRowsHeight)(apiRef);
126
130
  const scrollbarSize = measureScrollbarSize(rootElement, columnsTotalWidth, props.scrollbarSize);
@@ -129,7 +133,7 @@ function useGridDimensions(apiRef, props) {
129
133
  const nonPinnedColumnsTotalWidth = columnsTotalWidth - leftPinnedWidth - rightPinnedWidth;
130
134
  const contentSize = {
131
135
  width: nonPinnedColumnsTotalWidth,
132
- height: rowsMeta.currentPageTotalHeight
136
+ height: (0, _roundToDecimalPlaces.roundToDecimalPlaces)(rowsMeta.currentPageTotalHeight, 1)
133
137
  };
134
138
  let viewportOuterSize;
135
139
  let viewportInnerSize;
@@ -290,12 +294,6 @@ function measureScrollbarSize(rootElement, columnsTotalWidth, scrollbarSize) {
290
294
  rootElement.removeChild(scrollDiv);
291
295
  return size;
292
296
  }
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
297
  function areElementSizesEqual(a, b) {
300
298
  return a.width === b.width && a.height === b.height;
301
299
  }
@@ -3,9 +3,15 @@
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");
7
8
  /**
8
9
  * Select the row editing state.
9
10
  */
10
11
  const gridEditRowsStateSelector = state => state.editRows;
11
- exports.gridEditRowsStateSelector = gridEditRowsStateSelector;
12
+ exports.gridEditRowsStateSelector = gridEditRowsStateSelector;
13
+ const gridRowIsEditingSelector = exports.gridRowIsEditingSelector = (0, _createSelector.createSelectorV8)(gridEditRowsStateSelector, (editRows, rowId) => Boolean(editRows[rowId]));
14
+ const gridEditCellStateSelector = exports.gridEditCellStateSelector = (0, _createSelector.createSelectorV8)(gridEditRowsStateSelector, (editRows, {
15
+ rowId,
16
+ field
17
+ }) => 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,