@mui/x-data-grid 5.15.2 → 5.17.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 (286) hide show
  1. package/CHANGELOG.md +177 -2
  2. package/DataGrid/DataGrid.js +3 -1
  3. package/DataGrid/useDataGridComponent.js +5 -0
  4. package/README.md +2 -1
  5. package/components/DataGridColumnHeaders.js +4 -3
  6. package/components/ErrorBoundary.d.ts +1 -0
  7. package/components/GridAutoSizer.js +7 -0
  8. package/components/GridRow.d.ts +2 -1
  9. package/components/GridRow.js +136 -85
  10. package/components/base/GridBody.js +8 -5
  11. package/components/base/GridOverlays.js +4 -7
  12. package/components/cell/GridActionsCellItem.d.ts +2 -2
  13. package/components/cell/GridBooleanCell.js +2 -1
  14. package/components/cell/GridEditBooleanCell.js +2 -1
  15. package/components/cell/GridEditDateCell.js +3 -2
  16. package/components/cell/GridEditInputCell.js +2 -1
  17. package/components/cell/GridEditSingleSelectCell.js +11 -2
  18. package/components/cell/GridSkeletonCell.d.ts +12 -0
  19. package/components/cell/GridSkeletonCell.js +60 -0
  20. package/components/cell/index.d.ts +1 -0
  21. package/components/cell/index.js +2 -1
  22. package/components/columnHeaders/GridColumnGroupHeader.d.ts +14 -0
  23. package/components/columnHeaders/GridColumnGroupHeader.js +122 -0
  24. package/components/columnHeaders/GridColumnHeaderItem.js +55 -71
  25. package/components/columnHeaders/GridColumnHeadersInner.js +2 -1
  26. package/components/columnHeaders/GridGenericColumnHeaderItem.d.ts +32 -0
  27. package/components/columnHeaders/GridGenericColumnHeaderItem.js +104 -0
  28. package/components/columnSelection/GridCellCheckboxRenderer.js +2 -1
  29. package/components/containers/GridOverlay.js +7 -1
  30. package/components/containers/GridRoot.js +3 -3
  31. package/components/containers/GridRootStyles.js +16 -2
  32. package/components/menu/GridMenu.d.ts +3 -2
  33. package/components/menu/GridMenu.js +1 -0
  34. package/components/menu/columnMenu/GridColumnHeaderMenu.d.ts +1 -1
  35. package/components/panel/GridColumnsPanel.d.ts +6 -1
  36. package/components/panel/GridColumnsPanel.js +38 -6
  37. package/components/panel/GridPanel.d.ts +1 -1
  38. package/components/panel/GridPanel.js +1 -0
  39. package/components/panel/filterPanel/GridFilterForm.d.ts +4 -0
  40. package/components/panel/filterPanel/GridFilterForm.js +5 -0
  41. package/components/panel/filterPanel/GridFilterInputMultipleValue.d.ts +1 -1
  42. package/components/panel/filterPanel/GridFilterPanel.d.ts +4 -0
  43. package/components/panel/filterPanel/GridFilterPanel.js +5 -0
  44. package/components/toolbar/GridToolbarColumnsButton.d.ts +1 -1
  45. package/components/toolbar/GridToolbarDensitySelector.d.ts +1 -1
  46. package/components/toolbar/GridToolbarExportContainer.d.ts +1 -1
  47. package/constants/defaultGridSlotsComponents.js +2 -1
  48. package/constants/gridClasses.d.ts +24 -0
  49. package/constants/gridClasses.js +1 -1
  50. package/hooks/core/pipeProcessing/gridPipeProcessingApi.d.ts +5 -1
  51. package/hooks/features/columnGrouping/gridColumnGroupsInterfaces.d.ts +7 -0
  52. package/hooks/features/columnGrouping/gridColumnGroupsInterfaces.js +1 -0
  53. package/hooks/features/columnGrouping/gridColumnGroupsSelector.d.ts +7 -0
  54. package/hooks/features/columnGrouping/gridColumnGroupsSelector.js +8 -0
  55. package/hooks/features/columnGrouping/index.d.ts +2 -0
  56. package/hooks/features/columnGrouping/index.js +2 -0
  57. package/hooks/features/columnGrouping/useGridColumnGrouping.d.ts +24 -0
  58. package/hooks/features/columnGrouping/useGridColumnGrouping.js +153 -0
  59. package/hooks/features/columnGrouping/useGridColumnGroupingPreProcessors.d.ts +4 -0
  60. package/hooks/features/columnGrouping/useGridColumnGroupingPreProcessors.js +35 -0
  61. package/hooks/features/columnHeaders/useGridColumnHeaders.d.ts +7 -6
  62. package/hooks/features/columnHeaders/useGridColumnHeaders.js +204 -9
  63. package/hooks/features/density/densitySelector.d.ts +2 -0
  64. package/hooks/features/density/densitySelector.js +3 -1
  65. package/hooks/features/density/densityState.d.ts +1 -0
  66. package/hooks/features/density/useGridDensity.d.ts +1 -1
  67. package/hooks/features/density/useGridDensity.js +45 -9
  68. package/hooks/features/dimensions/useGridDimensions.js +4 -4
  69. package/hooks/features/export/useGridPrintExport.js +3 -3
  70. package/hooks/features/filter/gridFilterSelector.d.ts +3 -3
  71. package/hooks/features/filter/gridFilterUtils.d.ts +1 -1
  72. package/hooks/features/filter/gridFilterUtils.js +55 -54
  73. package/hooks/features/filter/useGridFilter.js +1 -1
  74. package/hooks/features/index.d.ts +1 -0
  75. package/hooks/features/index.js +1 -0
  76. package/hooks/features/pagination/gridPaginationSelector.d.ts +1 -1
  77. package/hooks/features/rows/gridRowsSelector.d.ts +1 -1
  78. package/hooks/features/rows/useGridParamsApi.js +1 -1
  79. package/hooks/features/rows/useGridRows.js +65 -8
  80. package/hooks/features/rows/useGridRowsMeta.js +36 -16
  81. package/hooks/features/selection/gridSelectionSelector.d.ts +1 -1
  82. package/hooks/features/sorting/gridSortingSelector.d.ts +1 -1
  83. package/hooks/features/virtualization/useGridVirtualScroller.d.ts +2 -2
  84. package/hooks/features/virtualization/useGridVirtualScroller.js +17 -5
  85. package/hooks/utils/useGridNativeEventListener.d.ts +1 -1
  86. package/hooks/utils/useGridNativeEventListener.js +2 -2
  87. package/hooks/utils/useGridVisibleRows.d.ts +2 -2
  88. package/index.js +1 -1
  89. package/internals/index.d.ts +2 -0
  90. package/internals/index.js +2 -0
  91. package/legacy/DataGrid/DataGrid.js +3 -1
  92. package/legacy/DataGrid/useDataGridComponent.js +5 -0
  93. package/legacy/components/DataGridColumnHeaders.js +4 -3
  94. package/legacy/components/GridAutoSizer.js +7 -0
  95. package/legacy/components/GridRow.js +138 -85
  96. package/legacy/components/base/GridBody.js +8 -5
  97. package/legacy/components/base/GridOverlays.js +4 -7
  98. package/legacy/components/cell/GridBooleanCell.js +2 -1
  99. package/legacy/components/cell/GridEditBooleanCell.js +2 -1
  100. package/legacy/components/cell/GridEditDateCell.js +3 -2
  101. package/legacy/components/cell/GridEditInputCell.js +2 -1
  102. package/legacy/components/cell/GridEditSingleSelectCell.js +11 -2
  103. package/legacy/components/cell/GridSkeletonCell.js +57 -0
  104. package/legacy/components/cell/index.js +2 -1
  105. package/legacy/components/columnHeaders/GridColumnGroupHeader.js +120 -0
  106. package/legacy/components/columnHeaders/GridColumnHeaderItem.js +78 -88
  107. package/legacy/components/columnHeaders/GridColumnHeadersInner.js +2 -1
  108. package/legacy/components/columnHeaders/GridGenericColumnHeaderItem.js +112 -0
  109. package/legacy/components/columnSelection/GridCellCheckboxRenderer.js +2 -1
  110. package/legacy/components/containers/GridOverlay.js +7 -1
  111. package/legacy/components/containers/GridRoot.js +3 -3
  112. package/legacy/components/containers/GridRootStyles.js +14 -5
  113. package/legacy/components/menu/GridMenu.js +1 -0
  114. package/legacy/components/panel/GridColumnsPanel.js +41 -6
  115. package/legacy/components/panel/GridPanel.js +1 -0
  116. package/legacy/components/panel/filterPanel/GridFilterForm.js +5 -0
  117. package/legacy/components/panel/filterPanel/GridFilterPanel.js +5 -0
  118. package/legacy/constants/defaultGridSlotsComponents.js +2 -1
  119. package/legacy/constants/gridClasses.js +1 -1
  120. package/legacy/hooks/features/columnGrouping/gridColumnGroupsInterfaces.js +1 -0
  121. package/legacy/hooks/features/columnGrouping/gridColumnGroupsSelector.js +12 -0
  122. package/legacy/hooks/features/columnGrouping/index.js +2 -0
  123. package/legacy/hooks/features/columnGrouping/useGridColumnGrouping.js +151 -0
  124. package/legacy/hooks/features/columnGrouping/useGridColumnGroupingPreProcessors.js +35 -0
  125. package/legacy/hooks/features/columnHeaders/useGridColumnHeaders.js +213 -12
  126. package/legacy/hooks/features/density/densitySelector.js +6 -0
  127. package/legacy/hooks/features/density/useGridDensity.js +44 -6
  128. package/legacy/hooks/features/dimensions/useGridDimensions.js +4 -4
  129. package/legacy/hooks/features/export/useGridPrintExport.js +3 -3
  130. package/legacy/hooks/features/filter/gridFilterUtils.js +61 -56
  131. package/legacy/hooks/features/filter/useGridFilter.js +1 -1
  132. package/legacy/hooks/features/index.js +1 -0
  133. package/legacy/hooks/features/rows/useGridParamsApi.js +1 -1
  134. package/legacy/hooks/features/rows/useGridRows.js +73 -8
  135. package/legacy/hooks/features/rows/useGridRowsMeta.js +45 -18
  136. package/legacy/hooks/features/virtualization/useGridVirtualScroller.js +31 -13
  137. package/legacy/hooks/utils/useGridNativeEventListener.js +2 -2
  138. package/legacy/index.js +1 -1
  139. package/legacy/internals/index.js +2 -0
  140. package/legacy/models/api/gridColumnGroupingApi.js +1 -0
  141. package/legacy/models/events/gridEvents.js +2 -0
  142. package/legacy/models/gridColumnGrouping.js +6 -0
  143. package/legacy/models/index.js +2 -1
  144. package/legacy/models/params/gridRenderedRowsIntervalChangeParams.js +1 -0
  145. package/legacy/models/params/index.js +2 -1
  146. package/legacy/utils/utils.js +18 -0
  147. package/models/api/gridApiCommon.d.ts +2 -1
  148. package/models/api/gridColumnGroupingApi.d.ts +19 -0
  149. package/models/api/gridColumnGroupingApi.js +1 -0
  150. package/models/api/gridDensityApi.d.ts +2 -1
  151. package/models/api/gridParamsApi.d.ts +1 -1
  152. package/models/api/gridRowApi.d.ts +6 -0
  153. package/models/api/gridRowsMetaApi.d.ts +6 -1
  154. package/models/colDef/gridColDef.d.ts +15 -1
  155. package/models/events/gridEventLookup.d.ts +7 -1
  156. package/models/events/gridEvents.d.ts +3 -1
  157. package/models/events/gridEvents.js +2 -0
  158. package/models/gridColumnGrouping.d.ts +67 -0
  159. package/models/gridColumnGrouping.js +6 -0
  160. package/models/gridRows.d.ts +5 -5
  161. package/models/gridSlotsComponent.d.ts +5 -0
  162. package/models/gridStateCommunity.d.ts +2 -1
  163. package/models/index.d.ts +1 -0
  164. package/models/index.js +2 -1
  165. package/models/params/gridCellParams.d.ts +7 -2
  166. package/models/params/gridMenuParams.d.ts +1 -2
  167. package/models/params/gridRenderedRowsIntervalChangeParams.d.ts +10 -0
  168. package/models/params/gridRenderedRowsIntervalChangeParams.js +1 -0
  169. package/models/params/index.d.ts +1 -0
  170. package/models/params/index.js +2 -1
  171. package/models/props/DataGridProps.d.ts +7 -1
  172. package/modern/DataGrid/DataGrid.js +3 -1
  173. package/modern/DataGrid/useDataGridComponent.js +5 -0
  174. package/modern/components/DataGridColumnHeaders.js +4 -3
  175. package/modern/components/GridAutoSizer.js +7 -0
  176. package/modern/components/GridRow.js +133 -84
  177. package/modern/components/base/GridBody.js +8 -5
  178. package/modern/components/base/GridOverlays.js +4 -7
  179. package/modern/components/cell/GridBooleanCell.js +2 -1
  180. package/modern/components/cell/GridEditBooleanCell.js +2 -1
  181. package/modern/components/cell/GridEditDateCell.js +3 -2
  182. package/modern/components/cell/GridEditInputCell.js +2 -1
  183. package/modern/components/cell/GridEditSingleSelectCell.js +11 -2
  184. package/modern/components/cell/GridSkeletonCell.js +60 -0
  185. package/modern/components/cell/index.js +2 -1
  186. package/modern/components/columnHeaders/GridColumnGroupHeader.js +120 -0
  187. package/modern/components/columnHeaders/GridColumnHeaderItem.js +53 -69
  188. package/modern/components/columnHeaders/GridColumnHeadersInner.js +2 -1
  189. package/modern/components/columnHeaders/GridGenericColumnHeaderItem.js +104 -0
  190. package/modern/components/columnSelection/GridCellCheckboxRenderer.js +2 -1
  191. package/modern/components/containers/GridOverlay.js +7 -1
  192. package/modern/components/containers/GridRoot.js +3 -3
  193. package/modern/components/containers/GridRootStyles.js +16 -2
  194. package/modern/components/menu/GridMenu.js +1 -0
  195. package/modern/components/panel/GridColumnsPanel.js +38 -6
  196. package/modern/components/panel/GridPanel.js +1 -0
  197. package/modern/components/panel/filterPanel/GridFilterForm.js +5 -0
  198. package/modern/components/panel/filterPanel/GridFilterPanel.js +5 -0
  199. package/modern/constants/defaultGridSlotsComponents.js +2 -1
  200. package/modern/constants/gridClasses.js +1 -1
  201. package/modern/hooks/features/columnGrouping/gridColumnGroupsInterfaces.js +1 -0
  202. package/modern/hooks/features/columnGrouping/gridColumnGroupsSelector.js +8 -0
  203. package/modern/hooks/features/columnGrouping/index.js +2 -0
  204. package/modern/hooks/features/columnGrouping/useGridColumnGrouping.js +145 -0
  205. package/modern/hooks/features/columnGrouping/useGridColumnGroupingPreProcessors.js +29 -0
  206. package/modern/hooks/features/columnHeaders/useGridColumnHeaders.js +186 -9
  207. package/modern/hooks/features/density/densitySelector.js +3 -1
  208. package/modern/hooks/features/density/useGridDensity.js +37 -9
  209. package/modern/hooks/features/dimensions/useGridDimensions.js +4 -4
  210. package/modern/hooks/features/export/useGridPrintExport.js +3 -3
  211. package/modern/hooks/features/filter/gridFilterUtils.js +54 -53
  212. package/modern/hooks/features/filter/useGridFilter.js +1 -1
  213. package/modern/hooks/features/index.js +1 -0
  214. package/modern/hooks/features/rows/useGridParamsApi.js +1 -1
  215. package/modern/hooks/features/rows/useGridRows.js +65 -8
  216. package/modern/hooks/features/rows/useGridRowsMeta.js +36 -16
  217. package/modern/hooks/features/virtualization/useGridVirtualScroller.js +17 -5
  218. package/modern/hooks/utils/useGridNativeEventListener.js +2 -2
  219. package/modern/index.js +1 -1
  220. package/modern/internals/index.js +2 -0
  221. package/modern/models/api/gridColumnGroupingApi.js +1 -0
  222. package/modern/models/events/gridEvents.js +2 -0
  223. package/modern/models/gridColumnGrouping.js +6 -0
  224. package/modern/models/index.js +2 -1
  225. package/modern/models/params/gridRenderedRowsIntervalChangeParams.js +1 -0
  226. package/modern/models/params/index.js +2 -1
  227. package/modern/utils/utils.js +16 -0
  228. package/node/DataGrid/DataGrid.js +3 -1
  229. package/node/DataGrid/useDataGridComponent.js +7 -0
  230. package/node/components/DataGridColumnHeaders.js +4 -3
  231. package/node/components/GridAutoSizer.js +7 -0
  232. package/node/components/GridRow.js +136 -77
  233. package/node/components/base/GridBody.js +7 -4
  234. package/node/components/base/GridOverlays.js +3 -6
  235. package/node/components/cell/GridBooleanCell.js +2 -1
  236. package/node/components/cell/GridEditBooleanCell.js +2 -1
  237. package/node/components/cell/GridEditDateCell.js +3 -2
  238. package/node/components/cell/GridEditInputCell.js +2 -1
  239. package/node/components/cell/GridEditSingleSelectCell.js +11 -2
  240. package/node/components/cell/GridSkeletonCell.js +81 -0
  241. package/node/components/cell/index.js +13 -0
  242. package/node/components/columnHeaders/GridColumnGroupHeader.js +141 -0
  243. package/node/components/columnHeaders/GridColumnHeaderItem.js +53 -72
  244. package/node/components/columnHeaders/GridColumnHeadersInner.js +2 -1
  245. package/node/components/columnHeaders/GridGenericColumnHeaderItem.js +126 -0
  246. package/node/components/columnSelection/GridCellCheckboxRenderer.js +2 -1
  247. package/node/components/containers/GridOverlay.js +7 -1
  248. package/node/components/containers/GridRoot.js +4 -4
  249. package/node/components/containers/GridRootStyles.js +16 -2
  250. package/node/components/menu/GridMenu.js +1 -0
  251. package/node/components/panel/GridColumnsPanel.js +36 -5
  252. package/node/components/panel/GridPanel.js +1 -0
  253. package/node/components/panel/filterPanel/GridFilterForm.js +5 -0
  254. package/node/components/panel/filterPanel/GridFilterPanel.js +5 -0
  255. package/node/constants/defaultGridSlotsComponents.js +1 -0
  256. package/node/constants/gridClasses.js +1 -1
  257. package/node/hooks/features/columnGrouping/gridColumnGroupsInterfaces.js +5 -0
  258. package/node/hooks/features/columnGrouping/gridColumnGroupsSelector.js +18 -0
  259. package/node/hooks/features/columnGrouping/index.js +18 -0
  260. package/node/hooks/features/columnGrouping/useGridColumnGrouping.js +182 -0
  261. package/node/hooks/features/columnGrouping/useGridColumnGroupingPreProcessors.js +55 -0
  262. package/node/hooks/features/columnHeaders/useGridColumnHeaders.js +207 -8
  263. package/node/hooks/features/density/densitySelector.js +6 -2
  264. package/node/hooks/features/density/useGridDensity.js +48 -9
  265. package/node/hooks/features/dimensions/useGridDimensions.js +3 -3
  266. package/node/hooks/features/export/useGridPrintExport.js +2 -2
  267. package/node/hooks/features/filter/gridFilterUtils.js +55 -55
  268. package/node/hooks/features/filter/useGridFilter.js +1 -1
  269. package/node/hooks/features/index.js +13 -0
  270. package/node/hooks/features/rows/useGridParamsApi.js +1 -1
  271. package/node/hooks/features/rows/useGridRows.js +60 -7
  272. package/node/hooks/features/rows/useGridRowsMeta.js +35 -15
  273. package/node/hooks/features/virtualization/useGridVirtualScroller.js +17 -5
  274. package/node/hooks/utils/useGridNativeEventListener.js +2 -2
  275. package/node/index.js +1 -1
  276. package/node/internals/index.js +22 -0
  277. package/node/models/api/gridColumnGroupingApi.js +5 -0
  278. package/node/models/events/gridEvents.js +2 -0
  279. package/node/models/gridColumnGrouping.js +13 -0
  280. package/node/models/index.js +13 -0
  281. package/node/models/params/gridRenderedRowsIntervalChangeParams.js +5 -0
  282. package/node/models/params/index.js +13 -0
  283. package/node/utils/utils.js +18 -0
  284. package/package.json +3 -3
  285. package/utils/utils.d.ts +1 -0
  286. package/utils/utils.js +16 -0
@@ -131,14 +131,14 @@ const useGridRows = (apiRef, props) => {
131
131
  } // we remove duplicate updates. A server can batch updates, and send several updates for the same row in one fn call.
132
132
 
133
133
 
134
- const uniqUpdates = new Map();
134
+ const uniqueUpdates = new Map();
135
135
  updates.forEach(update => {
136
136
  const id = (0, _gridRowsUtils.getRowIdFromRowModel)(update, props.getRowId, 'A row was provided without id when calling updateRows():');
137
137
 
138
- if (uniqUpdates.has(id)) {
139
- uniqUpdates.set(id, (0, _extends2.default)({}, uniqUpdates.get(id), update));
138
+ if (uniqueUpdates.has(id)) {
139
+ uniqueUpdates.set(id, (0, _extends2.default)({}, uniqueUpdates.get(id), update));
140
140
  } else {
141
- uniqUpdates.set(id, update);
141
+ uniqueUpdates.set(id, update);
142
142
  }
143
143
  });
144
144
  const deletedRowIds = [];
@@ -150,7 +150,7 @@ const useGridRows = (apiRef, props) => {
150
150
  idToIdLookup: (0, _extends2.default)({}, prevCache.idToIdLookup),
151
151
  ids: [...prevCache.ids]
152
152
  };
153
- uniqUpdates.forEach((partialRow, id) => {
153
+ uniqueUpdates.forEach((partialRow, id) => {
154
154
  // eslint-disable-next-line no-underscore-dangle
155
155
  if (partialRow._action === 'delete') {
156
156
  delete newCache.idRowsLookup[id];
@@ -267,8 +267,60 @@ const useGridRows = (apiRef, props) => {
267
267
  ids: updatedRows
268
268
  })
269
269
  }));
270
- apiRef.current.applySorting();
270
+ apiRef.current.publishEvent('rowsSet');
271
271
  }, [apiRef, logger]);
272
+ const replaceRows = React.useCallback((firstRowToRender, newRows) => {
273
+ if (props.signature === _useGridApiEventHandler.GridSignature.DataGrid && newRows.length > 1) {
274
+ throw new Error(["MUI: You can't replace rows using `apiRef.current.unstable_replaceRows` on the DataGrid.", 'You need to upgrade to DataGridPro or DataGridPremium component to unlock this feature.'].join('\n'));
275
+ }
276
+
277
+ if (newRows.length === 0) {
278
+ return;
279
+ }
280
+
281
+ const allRows = (0, _gridRowsSelector.gridRowIdsSelector)(apiRef);
282
+ const updatedRows = [...allRows];
283
+ const idRowsLookup = (0, _gridRowsSelector.gridRowsLookupSelector)(apiRef);
284
+ const idToIdLookup = (0, _gridRowsSelector.gridRowsIdToIdLookupSelector)(apiRef);
285
+ const tree = (0, _gridRowsSelector.gridRowTreeSelector)(apiRef);
286
+ const updatedIdRowsLookup = (0, _extends2.default)({}, idRowsLookup);
287
+ const updatedIdToIdLookup = (0, _extends2.default)({}, idToIdLookup);
288
+ const updatedTree = (0, _extends2.default)({}, tree);
289
+ const newRowEntries = newRows.map(newRowModel => {
290
+ const rowId = (0, _gridRowsUtils.getRowIdFromRowModel)(newRowModel, props.getRowId, 'A row was provided without id when calling replaceRows().');
291
+ return {
292
+ id: rowId,
293
+ model: newRowModel
294
+ };
295
+ });
296
+ newRowEntries.forEach((row, index) => {
297
+ const [replacedRowId] = updatedRows.splice(firstRowToRender + index, 1, row.id);
298
+ delete updatedIdRowsLookup[replacedRowId];
299
+ delete updatedIdToIdLookup[replacedRowId];
300
+ delete updatedTree[replacedRowId];
301
+ });
302
+ newRowEntries.forEach(row => {
303
+ const rowTreeNodeConfig = {
304
+ id: row.id,
305
+ parent: null,
306
+ depth: 0,
307
+ groupingKey: null,
308
+ groupingField: null
309
+ };
310
+ updatedIdRowsLookup[row.id] = row.model;
311
+ updatedIdToIdLookup[row.id] = row.id;
312
+ updatedTree[row.id] = rowTreeNodeConfig;
313
+ });
314
+ apiRef.current.setState(state => (0, _extends2.default)({}, state, {
315
+ rows: (0, _extends2.default)({}, state.rows, {
316
+ idRowsLookup: updatedIdRowsLookup,
317
+ idToIdLookup: updatedIdToIdLookup,
318
+ tree: updatedTree,
319
+ ids: updatedRows
320
+ })
321
+ }));
322
+ apiRef.current.publishEvent('rowsSet');
323
+ }, [apiRef, props.signature, props.getRowId]);
272
324
  const rowApi = {
273
325
  getRow,
274
326
  getRowModels,
@@ -280,7 +332,8 @@ const useGridRows = (apiRef, props) => {
280
332
  setRowChildrenExpansion,
281
333
  getRowNode,
282
334
  getRowIndexRelativeToVisibleRows,
283
- getRowGroupChildren
335
+ getRowGroupChildren,
336
+ unstable_replaceRows: replaceRows
284
337
  };
285
338
  /**
286
339
  * EVENTS
@@ -75,7 +75,7 @@ const useGridRowsMeta = (apiRef, props) => {
75
75
  if (!rowsHeightLookup.current[row.id]) {
76
76
  rowsHeightLookup.current[row.id] = {
77
77
  sizes: {
78
- base: rowHeightFromDensity
78
+ baseCenter: rowHeightFromDensity
79
79
  },
80
80
  isResized: false,
81
81
  autoHeight: false,
@@ -90,7 +90,7 @@ const useGridRowsMeta = (apiRef, props) => {
90
90
  sizes
91
91
  } = rowsHeightLookup.current[row.id];
92
92
  let baseRowHeight = rowHeightFromDensity;
93
- const existingBaseRowHeight = sizes.base;
93
+ const existingBaseRowHeight = sizes.baseCenter;
94
94
 
95
95
  if (isResized) {
96
96
  // Do not recalculate resized row height and use the value from the lookup
@@ -121,12 +121,19 @@ const useGridRowsMeta = (apiRef, props) => {
121
121
  }
122
122
  } else {
123
123
  rowsHeightLookup.current[row.id].needsFirstMeasurement = false;
124
- } // We use an object to make simple to check if a height is already added or not
124
+ }
125
125
 
126
+ const existingBaseSizes = Object.entries(sizes).reduce((acc, [key, size]) => {
127
+ if (/^base[A-Z]/.test(key)) {
128
+ acc[key] = size;
129
+ }
126
130
 
127
- const initialHeights = {
128
- base: baseRowHeight
129
- };
131
+ return acc;
132
+ }, {}); // We use an object to make simple to check if a height is already added or not
133
+
134
+ const initialHeights = (0, _extends2.default)({}, existingBaseSizes, {
135
+ baseCenter: baseRowHeight
136
+ });
130
137
 
131
138
  if (getRowSpacing) {
132
139
  var _spacing$top, _spacing$bottom;
@@ -149,9 +156,17 @@ const useGridRowsMeta = (apiRef, props) => {
149
156
  const positions = [];
150
157
  const currentPageTotalHeight = currentPage.rows.reduce((acc, row) => {
151
158
  positions.push(acc);
159
+ let maximumBaseSize = 0;
160
+ let otherSizes = 0;
152
161
  const processedSizes = calculateRowProcessedSizes(row);
153
- const finalRowHeight = Object.values(processedSizes).reduce((acc2, value) => acc2 + value, 0);
154
- return acc + finalRowHeight;
162
+ Object.entries(processedSizes).forEach(([size, value]) => {
163
+ if (/^base[A-Z]/.test(size)) {
164
+ maximumBaseSize = value > maximumBaseSize ? value : maximumBaseSize;
165
+ } else {
166
+ otherSizes += value;
167
+ }
168
+ });
169
+ return acc + maximumBaseSize + otherSizes;
155
170
  }, 0);
156
171
  pinnedRows == null ? void 0 : (_pinnedRows$top = pinnedRows.top) == null ? void 0 : _pinnedRows$top.forEach(row => {
157
172
  calculateRowProcessedSizes(row);
@@ -177,7 +192,7 @@ const useGridRowsMeta = (apiRef, props) => {
177
192
  }, [apiRef, currentPage.rows, rowHeightFromDensity, getRowHeightProp, getRowSpacing, getEstimatedRowHeight, pinnedRows]);
178
193
  const getRowHeight = React.useCallback(rowId => {
179
194
  const height = rowsHeightLookup.current[rowId];
180
- return height ? height.sizes.base : rowHeightFromDensity;
195
+ return height ? height.sizes.baseCenter : rowHeightFromDensity;
181
196
  }, [rowHeightFromDensity]);
182
197
 
183
198
  const getRowInternalSizes = rowId => {
@@ -187,21 +202,21 @@ const useGridRowsMeta = (apiRef, props) => {
187
202
  };
188
203
 
189
204
  const setRowHeight = React.useCallback((id, height) => {
190
- rowsHeightLookup.current[id].sizes.base = height;
205
+ rowsHeightLookup.current[id].sizes.baseCenter = height;
191
206
  rowsHeightLookup.current[id].isResized = true;
192
207
  rowsHeightLookup.current[id].needsFirstMeasurement = false;
193
208
  hydrateRowsMeta();
194
209
  }, [hydrateRowsMeta]);
195
210
  const debouncedHydrateRowsMeta = React.useMemo(() => (0, _utils.debounce)(hydrateRowsMeta), [hydrateRowsMeta]);
196
- const storeMeasuredRowHeight = React.useCallback((id, height) => {
211
+ const storeMeasuredRowHeight = React.useCallback((id, height, position) => {
197
212
  if (!rowsHeightLookup.current[id] || !rowsHeightLookup.current[id].autoHeight) {
198
213
  return;
199
214
  } // Only trigger hydration if the value is different, otherwise we trigger a loop
200
215
 
201
216
 
202
- const needsHydration = rowsHeightLookup.current[id].sizes.base !== height;
217
+ const needsHydration = rowsHeightLookup.current[id].sizes[`base${(0, _utils.capitalize)(position)}`] !== height;
203
218
  rowsHeightLookup.current[id].needsFirstMeasurement = false;
204
- rowsHeightLookup.current[id].sizes.base = height;
219
+ rowsHeightLookup.current[id].sizes[`base${(0, _utils.capitalize)(position)}`] = height;
205
220
 
206
221
  if (needsHydration) {
207
222
  debouncedHydrateRowsMeta();
@@ -219,7 +234,11 @@ const useGridRowsMeta = (apiRef, props) => {
219
234
  if (hasRowWithAutoHeight.current && index > lastMeasuredRowIndex.current) {
220
235
  lastMeasuredRowIndex.current = index;
221
236
  }
222
- }, []); // The effect is used to build the rows meta data - currentPageTotalHeight and positions.
237
+ }, []);
238
+ const resetRowHeights = React.useCallback(() => {
239
+ rowsHeightLookup.current = {};
240
+ hydrateRowsMeta();
241
+ }, [hydrateRowsMeta]); // The effect is used to build the rows meta data - currentPageTotalHeight and positions.
223
242
  // Because of variable row height this is needed for the virtualization
224
243
 
225
244
  React.useEffect(() => {
@@ -233,7 +252,8 @@ const useGridRowsMeta = (apiRef, props) => {
233
252
  unstable_getRowHeight: getRowHeight,
234
253
  unstable_getRowInternalSizes: getRowInternalSizes,
235
254
  unstable_setRowHeight: setRowHeight,
236
- unstable_storeRowHeightMeasurement: storeMeasuredRowHeight
255
+ unstable_storeRowHeightMeasurement: storeMeasuredRowHeight,
256
+ resetRowHeights
237
257
  };
238
258
  (0, _useGridApiMethod.useGridApiMethod)(apiRef, rowsMetaApi, 'GridRowsMetaApi');
239
259
  };
@@ -252,8 +252,19 @@ const useGridVirtualScroller = props => {
252
252
  }, [renderContext, updateRenderZonePosition]);
253
253
  const updateRenderContext = React.useCallback(nextRenderContext => {
254
254
  setRenderContext(nextRenderContext);
255
+ const [firstRowToRender, lastRowToRender] = getRenderableIndexes({
256
+ firstIndex: nextRenderContext.firstRowIndex,
257
+ lastIndex: nextRenderContext.lastRowIndex,
258
+ minFirstIndex: 0,
259
+ maxLastIndex: currentPage.rows.length,
260
+ buffer: rootProps.rowBuffer
261
+ });
262
+ apiRef.current.publishEvent('renderedRowsIntervalChange', {
263
+ firstRowToRender,
264
+ lastRowToRender
265
+ });
255
266
  prevRenderContext.current = nextRenderContext;
256
- }, [setRenderContext, prevRenderContext]);
267
+ }, [apiRef, setRenderContext, prevRenderContext, currentPage.rows.length, rootProps.rowBuffer]);
257
268
  React.useEffect(() => {
258
269
  if (containerWidth == null) {
259
270
  return;
@@ -324,8 +335,8 @@ const useGridVirtualScroller = props => {
324
335
  minFirstColumn = renderZoneMinColumnIndex,
325
336
  maxLastColumn = renderZoneMaxColumnIndex,
326
337
  availableSpace = containerWidth,
327
- ignoreAutoHeight,
328
- rowIndexOffset = 0
338
+ rowIndexOffset = 0,
339
+ position = 'center'
329
340
  } = params;
330
341
 
331
342
  if (!nextRenderContext || availableSpace == null) {
@@ -395,7 +406,7 @@ const useGridVirtualScroller = props => {
395
406
  model
396
407
  } = renderedRows[i];
397
408
  const lastVisibleRowIndex = firstRowToRender + i === currentPage.rows.length - 1;
398
- const baseRowHeight = !apiRef.current.unstable_rowHasAutoHeight(id) || ignoreAutoHeight ? apiRef.current.unstable_getRowHeight(id) : 'auto';
409
+ const baseRowHeight = !apiRef.current.unstable_rowHasAutoHeight(id) ? apiRef.current.unstable_getRowHeight(id) : 'auto';
399
410
  let isSelected;
400
411
 
401
412
  if (selectedRowsLookup[id] == null) {
@@ -421,7 +432,8 @@ const useGridVirtualScroller = props => {
421
432
  selected: isSelected,
422
433
  index: rowIndexOffset + ((currentPage == null ? void 0 : (_currentPage$range5 = currentPage.range) == null ? void 0 : _currentPage$range5.firstRowIndex) || 0) + firstRowToRender + i,
423
434
  containerWidth: availableSpace,
424
- isLastVisible: lastVisibleRowIndex
435
+ isLastVisible: lastVisibleRowIndex,
436
+ position: position
425
437
  }, typeof getRowProps === 'function' ? getRowProps(id, model) : {}, (_rootProps$components = rootProps.componentsProps) == null ? void 0 : _rootProps$components.row), id));
426
438
  }
427
439
 
@@ -19,8 +19,8 @@ const useGridNativeEventListener = (apiRef, ref, eventName, handler, options) =>
19
19
  const logger = (0, _useGridLogger.useGridLogger)(apiRef, 'useNativeEventListener');
20
20
  const [added, setAdded] = React.useState(false);
21
21
  const handlerRef = React.useRef(handler);
22
- const wrapHandler = React.useCallback(args => {
23
- return handlerRef.current && handlerRef.current(args);
22
+ const wrapHandler = React.useCallback(event => {
23
+ return handlerRef.current && handlerRef.current(event);
24
24
  }, []);
25
25
  React.useEffect(() => {
26
26
  handlerRef.current = handler;
package/node/index.js CHANGED
@@ -1,4 +1,4 @@
1
- /** @license MUI v5.15.2
1
+ /** @license MUI v5.17.0
2
2
  *
3
3
  * This source code is licensed under the MIT license found in the
4
4
  * LICENSE file in the root directory of this source tree.
@@ -57,6 +57,12 @@ Object.defineProperty(exports, "clamp", {
57
57
  return _utils2.clamp;
58
58
  }
59
59
  });
60
+ Object.defineProperty(exports, "columnGroupsStateInitializer", {
61
+ enumerable: true,
62
+ get: function () {
63
+ return _useGridColumnGrouping.columnGroupsStateInitializer;
64
+ }
65
+ });
60
66
  Object.defineProperty(exports, "columnMenuStateInitializer", {
61
67
  enumerable: true,
62
68
  get: function () {
@@ -225,6 +231,18 @@ Object.defineProperty(exports, "useGridClipboard", {
225
231
  return _useGridClipboard.useGridClipboard;
226
232
  }
227
233
  });
234
+ Object.defineProperty(exports, "useGridColumnGrouping", {
235
+ enumerable: true,
236
+ get: function () {
237
+ return _useGridColumnGrouping.useGridColumnGrouping;
238
+ }
239
+ });
240
+ Object.defineProperty(exports, "useGridColumnGroupingPreProcessors", {
241
+ enumerable: true,
242
+ get: function () {
243
+ return _useGridColumnGroupingPreProcessors.useGridColumnGroupingPreProcessors;
244
+ }
245
+ });
228
246
  Object.defineProperty(exports, "useGridColumnHeaders", {
229
247
  enumerable: true,
230
248
  get: function () {
@@ -438,6 +456,10 @@ var _useGridColumns = require("../hooks/features/columns/useGridColumns");
438
456
 
439
457
  var _useGridColumnSpanning = require("../hooks/features/columns/useGridColumnSpanning");
440
458
 
459
+ var _useGridColumnGrouping = require("../hooks/features/columnGrouping/useGridColumnGrouping");
460
+
461
+ var _useGridColumnGroupingPreProcessors = require("../hooks/features/columnGrouping/useGridColumnGroupingPreProcessors");
462
+
441
463
  var _useGridDensity = require("../hooks/features/density/useGridDensity");
442
464
 
443
465
  var _useGridCsvExport = require("../hooks/features/export/useGridCsvExport");
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
@@ -92,4 +92,6 @@ exports.GridEvents = GridEvents;
92
92
  GridEvents["preferencePanelOpen"] = "preferencePanelOpen";
93
93
  GridEvents["menuOpen"] = "menuOpen";
94
94
  GridEvents["menuClose"] = "menuClose";
95
+ GridEvents["renderedRowsIntervalChange"] = "renderedRowsIntervalChange";
96
+ GridEvents["fetchRows"] = "fetchRows";
95
97
  })(GridEvents || (exports.GridEvents = GridEvents = {}));
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.isLeaf = isLeaf;
7
+
8
+ function isLeaf(node) {
9
+ return node.field !== undefined;
10
+ }
11
+ /**
12
+ * A function used to process headerClassName params.
13
+ */
@@ -316,6 +316,19 @@ Object.keys(_gridSortModel).forEach(function (key) {
316
316
  });
317
317
  });
318
318
 
319
+ var _gridColumnGrouping = require("./gridColumnGrouping");
320
+
321
+ Object.keys(_gridColumnGrouping).forEach(function (key) {
322
+ if (key === "default" || key === "__esModule") return;
323
+ if (key in exports && exports[key] === _gridColumnGrouping[key]) return;
324
+ Object.defineProperty(exports, key, {
325
+ enumerable: true,
326
+ get: function () {
327
+ return _gridColumnGrouping[key];
328
+ }
329
+ });
330
+ });
331
+
319
332
  var _gridFilterOperator = require("./gridFilterOperator");
320
333
 
321
334
  Object.keys(_gridFilterOperator).forEach(function (key) {
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
@@ -184,4 +184,17 @@ Object.keys(_gridMenuParams).forEach(function (key) {
184
184
  return _gridMenuParams[key];
185
185
  }
186
186
  });
187
+ });
188
+
189
+ var _gridRenderedRowsIntervalChangeParams = require("./gridRenderedRowsIntervalChangeParams");
190
+
191
+ Object.keys(_gridRenderedRowsIntervalChangeParams).forEach(function (key) {
192
+ if (key === "default" || key === "__esModule") return;
193
+ if (key in exports && exports[key] === _gridRenderedRowsIntervalChangeParams[key]) return;
194
+ Object.defineProperty(exports, key, {
195
+ enumerable: true,
196
+ get: function () {
197
+ return _gridRenderedRowsIntervalChangeParams[key];
198
+ }
199
+ });
187
200
  });
@@ -10,6 +10,7 @@ exports.isFunction = isFunction;
10
10
  exports.isNumber = isNumber;
11
11
  exports.isObject = isObject;
12
12
  exports.localStorageAvailable = localStorageAvailable;
13
+ exports.randomNumberBetween = randomNumberBetween;
13
14
 
14
15
  function isNumber(value) {
15
16
  return typeof value === 'number';
@@ -198,4 +199,21 @@ function isDeepEqual(a, b) {
198
199
 
199
200
 
200
201
  return a !== a && b !== b;
202
+ } // Pseudo random number. See https://stackoverflow.com/a/47593316
203
+
204
+
205
+ function mulberry32(a) {
206
+ return () => {
207
+ /* eslint-disable */
208
+ let t = a += 0x6d2b79f5;
209
+ t = Math.imul(t ^ t >>> 15, t | 1);
210
+ t ^= t + Math.imul(t ^ t >>> 7, t | 61);
211
+ return ((t ^ t >>> 14) >>> 0) / 4294967296;
212
+ /* eslint-enable */
213
+ };
214
+ }
215
+
216
+ function randomNumberBetween(seed, min, max) {
217
+ const random = mulberry32(seed);
218
+ return () => min + (max - min) * random();
201
219
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mui/x-data-grid",
3
- "version": "5.15.2",
3
+ "version": "5.17.0",
4
4
  "description": "The community edition of the data grid component (MUI X).",
5
5
  "author": "MUI Team",
6
6
  "main": "./node/index.js",
@@ -35,8 +35,8 @@
35
35
  "directory": "packages/grid/x-data-grid"
36
36
  },
37
37
  "dependencies": {
38
- "@babel/runtime": "^7.18.6",
39
- "@mui/utils": "^5.4.1",
38
+ "@babel/runtime": "^7.18.9",
39
+ "@mui/utils": "^5.9.3",
40
40
  "clsx": "^1.2.1",
41
41
  "prop-types": "^15.8.1",
42
42
  "reselect": "^4.1.6"
package/utils/utils.d.ts CHANGED
@@ -35,3 +35,4 @@ export declare const clamp: (value: number, min: number, max: number) => number;
35
35
  * We only type the public interface to avoid dozens of `as` in the function.
36
36
  */
37
37
  export declare function isDeepEqual<T>(actual: any, expected: T): actual is T;
38
+ export declare function randomNumberBetween(seed: number, min: number, max: number): () => number;
package/utils/utils.js CHANGED
@@ -177,4 +177,20 @@ export function isDeepEqual(a, b) {
177
177
 
178
178
 
179
179
  return a !== a && b !== b;
180
+ } // Pseudo random number. See https://stackoverflow.com/a/47593316
181
+
182
+ function mulberry32(a) {
183
+ return () => {
184
+ /* eslint-disable */
185
+ let t = a += 0x6d2b79f5;
186
+ t = Math.imul(t ^ t >>> 15, t | 1);
187
+ t ^= t + Math.imul(t ^ t >>> 7, t | 61);
188
+ return ((t ^ t >>> 14) >>> 0) / 4294967296;
189
+ /* eslint-enable */
190
+ };
191
+ }
192
+
193
+ export function randomNumberBetween(seed, min, max) {
194
+ const random = mulberry32(seed);
195
+ return () => min + (max - min) * random();
180
196
  }