@mui/x-data-grid 7.0.0-alpha.8 → 7.0.0-beta.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 (566) hide show
  1. package/CHANGELOG.md +508 -30
  2. package/DataGrid/DataGrid.js +6 -6
  3. package/DataGrid/useDataGridComponent.js +2 -1
  4. package/DataGrid/useDataGridProps.js +1 -0
  5. package/README.md +3 -3
  6. package/components/GridColumnHeaders.d.ts +3 -2
  7. package/components/GridColumnHeaders.js +3 -11
  8. package/components/GridDetailPanels.d.ts +5 -0
  9. package/components/GridDetailPanels.js +4 -0
  10. package/components/GridHeaders.d.ts +4 -0
  11. package/components/GridHeaders.js +53 -0
  12. package/components/GridPinnedRows.d.ts +7 -0
  13. package/components/GridPinnedRows.js +4 -0
  14. package/components/GridRow.d.ts +7 -4
  15. package/components/GridRow.js +161 -97
  16. package/components/GridScrollbarFillerCell.d.ts +7 -0
  17. package/components/GridScrollbarFillerCell.js +39 -0
  18. package/components/base/GridBody.d.ts +2 -13
  19. package/components/base/GridBody.js +2 -116
  20. package/components/base/GridOverlays.js +10 -21
  21. package/components/cell/GridActionsCellItem.d.ts +2 -2
  22. package/components/cell/GridCell.d.ts +15 -21
  23. package/components/cell/GridCell.js +67 -372
  24. package/components/columnHeaders/GridBaseColumnHeaders.js +1 -6
  25. package/components/columnHeaders/GridColumnHeaderItem.d.ts +2 -1
  26. package/components/columnHeaders/GridColumnHeaderItem.js +7 -3
  27. package/components/columnHeaders/GridColumnHeaderSortIcon.d.ts +1 -0
  28. package/components/columnHeaders/GridColumnHeaderSortIcon.js +5 -2
  29. package/components/columnHeaders/GridColumnHeadersInner.js +1 -2
  30. package/components/columnsManagement/GridColumnsManagement.d.ts +36 -0
  31. package/components/columnsManagement/GridColumnsManagement.js +260 -0
  32. package/components/columnsManagement/index.d.ts +1 -0
  33. package/components/columnsManagement/index.js +1 -0
  34. package/components/columnsManagement/utils.d.ts +4 -0
  35. package/components/columnsManagement/utils.js +16 -0
  36. package/components/containers/GridRoot.js +18 -15
  37. package/components/containers/GridRootStyles.js +307 -204
  38. package/components/index.d.ts +1 -0
  39. package/components/index.js +1 -0
  40. package/components/menu/columnMenu/menuItems/GridColumnMenuSortItem.js +1 -1
  41. package/components/panel/GridColumnsPanel.d.ts +0 -28
  42. package/components/panel/GridColumnsPanel.js +5 -213
  43. package/components/panel/GridPanel.js +3 -4
  44. package/components/panel/filterPanel/GridFilterForm.d.ts +6 -4
  45. package/components/panel/filterPanel/GridFilterForm.js +31 -14
  46. package/components/panel/filterPanel/GridFilterPanel.js +46 -20
  47. package/components/toolbar/GridToolbarColumnsButton.d.ts +13 -1
  48. package/components/toolbar/GridToolbarColumnsButton.js +40 -22
  49. package/components/toolbar/GridToolbarDensitySelector.d.ts +13 -1
  50. package/components/toolbar/GridToolbarDensitySelector.js +40 -22
  51. package/components/toolbar/GridToolbarExport.d.ts +10 -1
  52. package/components/toolbar/GridToolbarExport.js +6 -1
  53. package/components/toolbar/GridToolbarExportContainer.d.ts +15 -1
  54. package/components/toolbar/GridToolbarExportContainer.js +41 -23
  55. package/components/toolbar/GridToolbarFilterButton.d.ts +5 -4
  56. package/components/toolbar/GridToolbarFilterButton.js +6 -10
  57. package/components/virtualization/GridBottomContainer.d.ts +2 -0
  58. package/components/virtualization/GridBottomContainer.js +25 -0
  59. package/components/{containers → virtualization}/GridMainContainer.d.ts +2 -0
  60. package/components/virtualization/GridMainContainer.js +20 -0
  61. package/components/virtualization/GridTopContainer.d.ts +2 -0
  62. package/components/virtualization/GridTopContainer.js +35 -0
  63. package/components/virtualization/GridVirtualScrollbar.d.ts +7 -0
  64. package/components/virtualization/GridVirtualScrollbar.js +131 -0
  65. package/components/virtualization/GridVirtualScroller.d.ts +4 -4
  66. package/components/virtualization/GridVirtualScroller.js +69 -16
  67. package/components/virtualization/GridVirtualScrollerFiller.d.ts +4 -0
  68. package/components/virtualization/GridVirtualScrollerFiller.js +71 -0
  69. package/components/virtualization/GridVirtualScrollerRenderZone.js +2 -1
  70. package/constants/defaultGridSlotsComponents.js +8 -3
  71. package/constants/gridClasses.d.ts +72 -12
  72. package/constants/gridClasses.js +1 -1
  73. package/constants/localeTextConstants.js +4 -6
  74. package/hooks/core/gridCoreSelector.d.ts +6 -0
  75. package/hooks/core/gridCoreSelector.js +5 -0
  76. package/hooks/core/useGridApiInitialization.js +4 -0
  77. package/hooks/core/useGridInitialization.js +4 -0
  78. package/hooks/core/useGridRefs.d.ts +3 -0
  79. package/hooks/core/useGridRefs.js +13 -0
  80. package/hooks/core/useGridTheme.d.ts +3 -0
  81. package/hooks/core/useGridTheme.js +19 -0
  82. package/hooks/features/columnGrouping/useGridColumnGrouping.d.ts +1 -1
  83. package/hooks/features/columnGrouping/useGridColumnGrouping.js +7 -14
  84. package/hooks/features/columnHeaders/useGridColumnHeaders.d.ts +13 -18
  85. package/hooks/features/columnHeaders/useGridColumnHeaders.js +68 -162
  86. package/hooks/features/columnMenu/useGridColumnMenu.js +28 -23
  87. package/hooks/features/columns/gridColumnsInterfaces.d.ts +17 -0
  88. package/hooks/features/columns/gridColumnsInterfaces.js +9 -1
  89. package/hooks/features/columns/gridColumnsSelector.d.ts +14 -1
  90. package/hooks/features/columns/gridColumnsSelector.js +52 -0
  91. package/hooks/features/columns/gridColumnsUtils.d.ts +1 -5
  92. package/hooks/features/columns/gridColumnsUtils.js +10 -12
  93. package/hooks/features/columns/index.d.ts +2 -2
  94. package/hooks/features/columns/index.js +2 -1
  95. package/hooks/features/columns/useGridColumnSpanning.js +62 -61
  96. package/hooks/features/columns/useGridColumns.js +20 -23
  97. package/hooks/features/dimensions/gridDimensionsApi.d.ts +60 -11
  98. package/hooks/features/dimensions/gridDimensionsSelectors.d.ts +2 -0
  99. package/hooks/features/dimensions/gridDimensionsSelectors.js +1 -0
  100. package/hooks/features/dimensions/index.d.ts +2 -0
  101. package/hooks/features/dimensions/index.js +1 -0
  102. package/hooks/features/dimensions/useGridDimensions.d.ts +7 -1
  103. package/hooks/features/dimensions/useGridDimensions.js +216 -148
  104. package/hooks/features/export/serializers/csvSerializer.js +2 -2
  105. package/hooks/features/filter/useGridFilter.js +3 -3
  106. package/hooks/features/focus/gridFocusStateSelector.d.ts +2 -2
  107. package/hooks/features/focus/gridFocusStateSelector.js +2 -6
  108. package/hooks/features/focus/useGridFocus.js +3 -3
  109. package/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +3 -16
  110. package/hooks/features/pagination/useGridPagination.js +3 -5
  111. package/hooks/features/rows/gridRowsInterfaces.d.ts +1 -0
  112. package/hooks/features/rows/gridRowsSelector.d.ts +2 -2
  113. package/hooks/features/rows/gridRowsSelector.js +5 -5
  114. package/hooks/features/rows/gridRowsUtils.d.ts +1 -1
  115. package/hooks/features/rows/gridRowsUtils.js +8 -5
  116. package/hooks/features/rows/useGridRowsMeta.js +7 -4
  117. package/hooks/features/scroll/useGridScroll.js +8 -10
  118. package/hooks/features/sorting/gridSortingUtils.js +1 -1
  119. package/hooks/features/sorting/useGridSorting.d.ts +1 -1
  120. package/hooks/features/sorting/useGridSorting.js +15 -10
  121. package/hooks/features/virtualization/gridVirtualizationSelectors.d.ts +14 -0
  122. package/hooks/features/virtualization/gridVirtualizationSelectors.js +22 -2
  123. package/hooks/features/virtualization/useGridVirtualScroller.d.ts +27 -42
  124. package/hooks/features/virtualization/useGridVirtualScroller.js +441 -438
  125. package/hooks/features/virtualization/useGridVirtualization.d.ts +8 -0
  126. package/hooks/features/virtualization/useGridVirtualization.js +8 -1
  127. package/hooks/utils/index.d.ts +3 -0
  128. package/hooks/utils/index.js +4 -1
  129. package/hooks/utils/useGridAriaAttributes.js +1 -2
  130. package/hooks/utils/useGridNativeEventListener.js +4 -9
  131. package/hooks/utils/useResizeObserver.d.ts +2 -0
  132. package/hooks/utils/useResizeObserver.js +36 -0
  133. package/hooks/utils/useRunOnce.d.ts +5 -0
  134. package/hooks/utils/useRunOnce.js +18 -0
  135. package/index.js +1 -1
  136. package/internals/index.d.ts +12 -9
  137. package/internals/index.js +9 -7
  138. package/legacy/DataGrid/DataGrid.js +6 -6
  139. package/legacy/DataGrid/useDataGridComponent.js +2 -1
  140. package/legacy/DataGrid/useDataGridProps.js +1 -0
  141. package/legacy/components/GridColumnHeaders.js +3 -11
  142. package/legacy/components/GridDetailPanels.js +4 -0
  143. package/legacy/components/GridHeaders.js +53 -0
  144. package/legacy/components/GridPinnedRows.js +4 -0
  145. package/legacy/components/GridRow.js +159 -98
  146. package/legacy/components/GridScrollbarFillerCell.js +36 -0
  147. package/legacy/components/base/GridBody.js +2 -114
  148. package/legacy/components/base/GridOverlays.js +10 -25
  149. package/legacy/components/cell/GridCell.js +69 -377
  150. package/legacy/components/columnHeaders/GridBaseColumnHeaders.js +1 -6
  151. package/legacy/components/columnHeaders/GridColumnHeaderItem.js +7 -3
  152. package/legacy/components/columnHeaders/GridColumnHeaderSortIcon.js +5 -2
  153. package/legacy/components/columnHeaders/GridColumnHeadersInner.js +1 -2
  154. package/legacy/components/columnsManagement/GridColumnsManagement.js +300 -0
  155. package/legacy/components/columnsManagement/index.js +1 -0
  156. package/legacy/components/columnsManagement/utils.js +22 -0
  157. package/legacy/components/containers/GridRoot.js +18 -15
  158. package/legacy/components/containers/GridRootStyles.js +215 -137
  159. package/legacy/components/index.js +1 -0
  160. package/legacy/components/menu/columnMenu/menuItems/GridColumnMenuSortItem.js +1 -1
  161. package/legacy/components/panel/GridColumnsPanel.js +5 -233
  162. package/legacy/components/panel/GridPanel.js +3 -4
  163. package/legacy/components/panel/filterPanel/GridFilterForm.js +30 -13
  164. package/legacy/components/panel/filterPanel/GridFilterPanel.js +49 -20
  165. package/legacy/components/toolbar/GridToolbarColumnsButton.js +40 -21
  166. package/legacy/components/toolbar/GridToolbarDensitySelector.js +40 -21
  167. package/legacy/components/toolbar/GridToolbarExport.js +6 -1
  168. package/legacy/components/toolbar/GridToolbarExportContainer.js +40 -21
  169. package/legacy/components/toolbar/GridToolbarFilterButton.js +6 -10
  170. package/legacy/components/virtualization/GridBottomContainer.js +25 -0
  171. package/legacy/components/virtualization/GridMainContainer.js +20 -0
  172. package/legacy/components/virtualization/GridTopContainer.js +35 -0
  173. package/legacy/components/virtualization/GridVirtualScrollbar.js +129 -0
  174. package/legacy/components/virtualization/GridVirtualScroller.js +67 -16
  175. package/legacy/components/virtualization/GridVirtualScrollerFiller.js +70 -0
  176. package/legacy/components/virtualization/GridVirtualScrollerRenderZone.js +2 -1
  177. package/legacy/constants/defaultGridSlotsComponents.js +8 -3
  178. package/legacy/constants/gridClasses.js +1 -1
  179. package/legacy/constants/localeTextConstants.js +4 -6
  180. package/legacy/hooks/core/gridCoreSelector.js +7 -0
  181. package/legacy/hooks/core/useGridApiInitialization.js +4 -0
  182. package/legacy/hooks/core/useGridInitialization.js +4 -0
  183. package/legacy/hooks/core/useGridRefs.js +13 -0
  184. package/legacy/hooks/core/useGridTheme.js +21 -0
  185. package/legacy/hooks/features/columnGrouping/useGridColumnGrouping.js +7 -14
  186. package/legacy/hooks/features/columnHeaders/useGridColumnHeaders.js +69 -181
  187. package/legacy/hooks/features/columnMenu/useGridColumnMenu.js +28 -23
  188. package/legacy/hooks/features/columns/gridColumnsInterfaces.js +9 -1
  189. package/legacy/hooks/features/columns/gridColumnsSelector.js +62 -0
  190. package/legacy/hooks/features/columns/gridColumnsUtils.js +10 -16
  191. package/legacy/hooks/features/columns/index.js +2 -1
  192. package/legacy/hooks/features/columns/useGridColumnSpanning.js +60 -59
  193. package/legacy/hooks/features/columns/useGridColumns.js +22 -23
  194. package/legacy/hooks/features/dimensions/gridDimensionsSelectors.js +3 -0
  195. package/legacy/hooks/features/dimensions/index.js +1 -0
  196. package/legacy/hooks/features/dimensions/useGridDimensions.js +226 -151
  197. package/legacy/hooks/features/export/serializers/csvSerializer.js +2 -2
  198. package/legacy/hooks/features/filter/useGridFilter.js +3 -3
  199. package/legacy/hooks/features/focus/gridFocusStateSelector.js +2 -6
  200. package/legacy/hooks/features/focus/useGridFocus.js +3 -3
  201. package/legacy/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +3 -16
  202. package/legacy/hooks/features/pagination/useGridPagination.js +3 -5
  203. package/legacy/hooks/features/rows/gridRowsSelector.js +5 -5
  204. package/legacy/hooks/features/rows/gridRowsUtils.js +8 -5
  205. package/legacy/hooks/features/rows/useGridRowsMeta.js +7 -4
  206. package/legacy/hooks/features/scroll/useGridScroll.js +8 -10
  207. package/legacy/hooks/features/sorting/gridSortingUtils.js +1 -1
  208. package/legacy/hooks/features/sorting/useGridSorting.js +15 -10
  209. package/legacy/hooks/features/virtualization/gridVirtualizationSelectors.js +29 -1
  210. package/legacy/hooks/features/virtualization/useGridVirtualScroller.js +490 -483
  211. package/legacy/hooks/features/virtualization/useGridVirtualization.js +8 -1
  212. package/legacy/hooks/utils/index.js +4 -1
  213. package/legacy/hooks/utils/useGridAriaAttributes.js +1 -2
  214. package/legacy/hooks/utils/useGridNativeEventListener.js +4 -9
  215. package/legacy/hooks/utils/useResizeObserver.js +36 -0
  216. package/legacy/hooks/utils/useRunOnce.js +18 -0
  217. package/legacy/index.js +1 -1
  218. package/legacy/internals/index.js +9 -7
  219. package/legacy/locales/arSD.js +5 -6
  220. package/legacy/locales/beBY.js +5 -6
  221. package/legacy/locales/bgBG.js +5 -6
  222. package/legacy/locales/csCZ.js +5 -6
  223. package/legacy/locales/daDK.js +5 -6
  224. package/legacy/locales/deDE.js +5 -6
  225. package/legacy/locales/elGR.js +5 -6
  226. package/legacy/locales/esES.js +5 -6
  227. package/legacy/locales/faIR.js +5 -6
  228. package/legacy/locales/fiFI.js +5 -6
  229. package/legacy/locales/frFR.js +5 -6
  230. package/legacy/locales/heIL.js +5 -6
  231. package/legacy/locales/hrHR.js +160 -0
  232. package/legacy/locales/huHU.js +5 -6
  233. package/legacy/locales/index.js +4 -1
  234. package/legacy/locales/itIT.js +5 -6
  235. package/legacy/locales/jaJP.js +5 -6
  236. package/legacy/locales/koKR.js +5 -6
  237. package/legacy/locales/nbNO.js +5 -6
  238. package/legacy/locales/nlNL.js +5 -6
  239. package/legacy/locales/plPL.js +5 -6
  240. package/legacy/locales/ptBR.js +5 -6
  241. package/legacy/locales/ptPT.js +160 -0
  242. package/legacy/locales/roRO.js +5 -6
  243. package/legacy/locales/ruRU.js +5 -6
  244. package/legacy/locales/skSK.js +5 -6
  245. package/legacy/locales/svSE.js +5 -6
  246. package/legacy/locales/trTR.js +5 -6
  247. package/legacy/locales/ukUA.js +5 -6
  248. package/legacy/locales/urPK.js +5 -6
  249. package/legacy/locales/viVN.js +5 -6
  250. package/legacy/locales/zhCN.js +5 -6
  251. package/legacy/locales/zhHK.js +160 -0
  252. package/legacy/locales/zhTW.js +5 -6
  253. package/legacy/models/index.js +0 -1
  254. package/legacy/models/params/index.js +1 -2
  255. package/legacy/utils/utils.js +10 -1
  256. package/locales/arSD.js +5 -6
  257. package/locales/beBY.js +5 -6
  258. package/locales/bgBG.js +5 -6
  259. package/locales/csCZ.js +5 -6
  260. package/locales/daDK.js +5 -6
  261. package/locales/deDE.js +5 -6
  262. package/locales/elGR.js +5 -6
  263. package/locales/esES.js +5 -6
  264. package/locales/faIR.js +5 -6
  265. package/locales/fiFI.js +5 -6
  266. package/locales/frFR.js +5 -6
  267. package/locales/heIL.js +5 -6
  268. package/locales/hrHR.d.ts +1 -0
  269. package/locales/hrHR.js +148 -0
  270. package/locales/huHU.js +5 -6
  271. package/locales/index.d.ts +3 -0
  272. package/locales/index.js +4 -1
  273. package/locales/itIT.js +5 -6
  274. package/locales/jaJP.js +5 -6
  275. package/locales/koKR.js +5 -6
  276. package/locales/nbNO.js +5 -6
  277. package/locales/nlNL.js +5 -6
  278. package/locales/plPL.js +5 -6
  279. package/locales/ptBR.js +5 -6
  280. package/locales/ptPT.d.ts +1 -0
  281. package/locales/ptPT.js +148 -0
  282. package/locales/roRO.js +5 -6
  283. package/locales/ruRU.js +5 -6
  284. package/locales/skSK.js +5 -6
  285. package/locales/svSE.js +5 -6
  286. package/locales/trTR.js +5 -6
  287. package/locales/ukUA.js +5 -6
  288. package/locales/urPK.js +5 -6
  289. package/locales/viVN.js +5 -6
  290. package/locales/zhCN.js +5 -6
  291. package/locales/zhHK.d.ts +1 -0
  292. package/locales/zhHK.js +148 -0
  293. package/locales/zhTW.js +5 -6
  294. package/models/api/gridColumnGroupingApi.d.ts +2 -2
  295. package/models/api/gridCoreApi.d.ts +16 -16
  296. package/models/api/gridLocaleTextApi.d.ts +3 -5
  297. package/models/api/gridRowsMetaApi.d.ts +1 -1
  298. package/models/api/gridVirtualizationApi.d.ts +2 -3
  299. package/models/colDef/gridColType.d.ts +11 -2
  300. package/models/events/gridEventLookup.d.ts +3 -3
  301. package/models/gridFilterModel.d.ts +1 -1
  302. package/models/gridSlotsComponent.d.ts +21 -2
  303. package/models/gridSlotsComponentsProps.d.ts +4 -0
  304. package/models/gridStateCommunity.d.ts +5 -1
  305. package/models/index.d.ts +0 -1
  306. package/models/index.js +0 -1
  307. package/models/params/index.d.ts +0 -1
  308. package/models/params/index.js +1 -2
  309. package/models/props/DataGridProps.d.ts +6 -11
  310. package/modern/DataGrid/DataGrid.js +6 -6
  311. package/modern/DataGrid/useDataGridComponent.js +2 -1
  312. package/modern/DataGrid/useDataGridProps.js +1 -0
  313. package/modern/components/GridColumnHeaders.js +3 -11
  314. package/modern/components/GridDetailPanels.js +4 -0
  315. package/modern/components/GridHeaders.js +53 -0
  316. package/modern/components/GridPinnedRows.js +4 -0
  317. package/modern/components/GridRow.js +159 -96
  318. package/modern/components/GridScrollbarFillerCell.js +39 -0
  319. package/modern/components/base/GridBody.js +2 -116
  320. package/modern/components/base/GridOverlays.js +10 -16
  321. package/modern/components/cell/GridCell.js +65 -369
  322. package/modern/components/columnHeaders/GridBaseColumnHeaders.js +1 -6
  323. package/modern/components/columnHeaders/GridColumnHeaderItem.js +7 -3
  324. package/modern/components/columnHeaders/GridColumnHeaderSortIcon.js +5 -2
  325. package/modern/components/columnHeaders/GridColumnHeadersInner.js +1 -1
  326. package/modern/components/columnsManagement/GridColumnsManagement.js +256 -0
  327. package/modern/components/columnsManagement/index.js +1 -0
  328. package/modern/components/columnsManagement/utils.js +16 -0
  329. package/modern/components/containers/GridRoot.js +18 -14
  330. package/modern/components/containers/GridRootStyles.js +307 -204
  331. package/modern/components/index.js +1 -0
  332. package/modern/components/menu/columnMenu/menuItems/GridColumnMenuSortItem.js +1 -1
  333. package/modern/components/panel/GridColumnsPanel.js +4 -209
  334. package/modern/components/panel/GridPanel.js +3 -4
  335. package/modern/components/panel/filterPanel/GridFilterForm.js +30 -13
  336. package/modern/components/panel/filterPanel/GridFilterPanel.js +46 -20
  337. package/modern/components/toolbar/GridToolbarColumnsButton.js +38 -21
  338. package/modern/components/toolbar/GridToolbarDensitySelector.js +38 -21
  339. package/modern/components/toolbar/GridToolbarExport.js +6 -1
  340. package/modern/components/toolbar/GridToolbarExportContainer.js +39 -22
  341. package/modern/components/toolbar/GridToolbarFilterButton.js +6 -10
  342. package/modern/components/virtualization/GridBottomContainer.js +25 -0
  343. package/modern/components/virtualization/GridMainContainer.js +20 -0
  344. package/modern/components/virtualization/GridTopContainer.js +35 -0
  345. package/modern/components/virtualization/GridVirtualScrollbar.js +131 -0
  346. package/modern/components/virtualization/GridVirtualScroller.js +69 -16
  347. package/modern/components/virtualization/GridVirtualScrollerFiller.js +71 -0
  348. package/modern/components/virtualization/GridVirtualScrollerRenderZone.js +2 -1
  349. package/modern/constants/defaultGridSlotsComponents.js +8 -3
  350. package/modern/constants/gridClasses.js +1 -1
  351. package/modern/constants/localeTextConstants.js +4 -6
  352. package/modern/hooks/core/gridCoreSelector.js +5 -0
  353. package/modern/hooks/core/useGridApiInitialization.js +3 -0
  354. package/modern/hooks/core/useGridInitialization.js +4 -0
  355. package/modern/hooks/core/useGridRefs.js +13 -0
  356. package/modern/hooks/core/useGridTheme.js +19 -0
  357. package/modern/hooks/features/columnGrouping/useGridColumnGrouping.js +5 -12
  358. package/modern/hooks/features/columnHeaders/useGridColumnHeaders.js +67 -160
  359. package/modern/hooks/features/columnMenu/useGridColumnMenu.js +28 -23
  360. package/modern/hooks/features/columns/gridColumnsInterfaces.js +9 -1
  361. package/modern/hooks/features/columns/gridColumnsSelector.js +51 -0
  362. package/modern/hooks/features/columns/gridColumnsUtils.js +10 -12
  363. package/modern/hooks/features/columns/index.js +2 -1
  364. package/modern/hooks/features/columns/useGridColumnSpanning.js +62 -61
  365. package/modern/hooks/features/columns/useGridColumns.js +19 -21
  366. package/modern/hooks/features/dimensions/gridDimensionsSelectors.js +1 -0
  367. package/modern/hooks/features/dimensions/index.js +1 -0
  368. package/modern/hooks/features/dimensions/useGridDimensions.js +214 -146
  369. package/modern/hooks/features/export/serializers/csvSerializer.js +2 -2
  370. package/modern/hooks/features/filter/useGridFilter.js +3 -3
  371. package/modern/hooks/features/focus/gridFocusStateSelector.js +2 -6
  372. package/modern/hooks/features/focus/useGridFocus.js +3 -3
  373. package/modern/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +3 -16
  374. package/modern/hooks/features/pagination/useGridPagination.js +3 -5
  375. package/modern/hooks/features/rows/gridRowsSelector.js +2 -2
  376. package/modern/hooks/features/rows/gridRowsUtils.js +8 -5
  377. package/modern/hooks/features/rows/useGridRowsMeta.js +7 -4
  378. package/modern/hooks/features/scroll/useGridScroll.js +8 -9
  379. package/modern/hooks/features/sorting/gridSortingUtils.js +1 -1
  380. package/modern/hooks/features/sorting/useGridSorting.js +15 -10
  381. package/modern/hooks/features/virtualization/gridVirtualizationSelectors.js +22 -2
  382. package/modern/hooks/features/virtualization/useGridVirtualScroller.js +435 -432
  383. package/modern/hooks/features/virtualization/useGridVirtualization.js +8 -1
  384. package/modern/hooks/utils/index.js +4 -1
  385. package/modern/hooks/utils/useGridAriaAttributes.js +1 -1
  386. package/modern/hooks/utils/useGridNativeEventListener.js +3 -9
  387. package/modern/hooks/utils/useResizeObserver.js +36 -0
  388. package/modern/hooks/utils/useRunOnce.js +18 -0
  389. package/modern/index.js +1 -1
  390. package/modern/internals/index.js +9 -7
  391. package/modern/locales/arSD.js +5 -6
  392. package/modern/locales/beBY.js +5 -6
  393. package/modern/locales/bgBG.js +5 -6
  394. package/modern/locales/csCZ.js +5 -6
  395. package/modern/locales/daDK.js +5 -6
  396. package/modern/locales/deDE.js +5 -6
  397. package/modern/locales/elGR.js +5 -6
  398. package/modern/locales/esES.js +5 -6
  399. package/modern/locales/faIR.js +5 -6
  400. package/modern/locales/fiFI.js +5 -6
  401. package/modern/locales/frFR.js +5 -6
  402. package/modern/locales/heIL.js +5 -6
  403. package/modern/locales/hrHR.js +148 -0
  404. package/modern/locales/huHU.js +5 -6
  405. package/modern/locales/index.js +4 -1
  406. package/modern/locales/itIT.js +5 -6
  407. package/modern/locales/jaJP.js +5 -6
  408. package/modern/locales/koKR.js +5 -6
  409. package/modern/locales/nbNO.js +5 -6
  410. package/modern/locales/nlNL.js +5 -6
  411. package/modern/locales/plPL.js +5 -6
  412. package/modern/locales/ptBR.js +5 -6
  413. package/modern/locales/ptPT.js +148 -0
  414. package/modern/locales/roRO.js +5 -6
  415. package/modern/locales/ruRU.js +5 -6
  416. package/modern/locales/skSK.js +5 -6
  417. package/modern/locales/svSE.js +5 -6
  418. package/modern/locales/trTR.js +5 -6
  419. package/modern/locales/ukUA.js +5 -6
  420. package/modern/locales/urPK.js +5 -6
  421. package/modern/locales/viVN.js +5 -6
  422. package/modern/locales/zhCN.js +5 -6
  423. package/modern/locales/zhHK.js +148 -0
  424. package/modern/locales/zhTW.js +5 -6
  425. package/modern/models/index.js +0 -1
  426. package/modern/models/params/index.js +1 -2
  427. package/modern/utils/utils.js +10 -1
  428. package/node/DataGrid/DataGrid.js +6 -6
  429. package/node/DataGrid/useDataGridComponent.js +1 -0
  430. package/node/DataGrid/useDataGridProps.js +1 -0
  431. package/node/components/GridColumnHeaders.js +3 -11
  432. package/node/components/GridDetailPanels.js +10 -0
  433. package/node/components/GridHeaders.js +60 -0
  434. package/node/components/GridPinnedRows.js +10 -0
  435. package/node/components/GridRow.js +157 -94
  436. package/node/components/GridScrollbarFillerCell.js +47 -0
  437. package/node/components/base/GridBody.js +7 -118
  438. package/node/components/base/GridOverlays.js +9 -15
  439. package/node/components/cell/GridCell.js +66 -369
  440. package/node/components/columnHeaders/GridBaseColumnHeaders.js +1 -6
  441. package/node/components/columnHeaders/GridColumnHeaderItem.js +8 -4
  442. package/node/components/columnHeaders/GridColumnHeaderSortIcon.js +5 -2
  443. package/node/components/columnHeaders/GridColumnHeadersInner.js +1 -1
  444. package/node/components/columnsManagement/GridColumnsManagement.js +264 -0
  445. package/node/components/columnsManagement/index.js +16 -0
  446. package/node/components/columnsManagement/utils.js +24 -0
  447. package/node/components/containers/GridRoot.js +17 -14
  448. package/node/components/containers/GridRootStyles.js +175 -72
  449. package/node/components/index.js +11 -0
  450. package/node/components/menu/columnMenu/menuItems/GridColumnMenuSortItem.js +1 -1
  451. package/node/components/panel/GridColumnsPanel.js +4 -208
  452. package/node/components/panel/GridPanel.js +3 -4
  453. package/node/components/panel/filterPanel/GridFilterForm.js +29 -12
  454. package/node/components/panel/filterPanel/GridFilterPanel.js +45 -19
  455. package/node/components/toolbar/GridToolbarColumnsButton.js +36 -20
  456. package/node/components/toolbar/GridToolbarDensitySelector.js +36 -20
  457. package/node/components/toolbar/GridToolbarExport.js +6 -1
  458. package/node/components/toolbar/GridToolbarExportContainer.js +37 -21
  459. package/node/components/toolbar/GridToolbarFilterButton.js +6 -10
  460. package/node/components/virtualization/GridBottomContainer.js +34 -0
  461. package/node/components/{containers → virtualization}/GridMainContainer.js +7 -29
  462. package/node/components/virtualization/GridTopContainer.js +44 -0
  463. package/node/components/virtualization/GridVirtualScrollbar.js +138 -0
  464. package/node/components/virtualization/GridVirtualScroller.js +69 -17
  465. package/node/components/virtualization/GridVirtualScrollerFiller.js +77 -0
  466. package/node/components/virtualization/GridVirtualScrollerRenderZone.js +2 -1
  467. package/node/constants/defaultGridSlotsComponents.js +6 -1
  468. package/node/constants/gridClasses.js +1 -1
  469. package/node/constants/localeTextConstants.js +4 -6
  470. package/node/hooks/core/gridCoreSelector.js +12 -0
  471. package/node/hooks/core/useGridApiInitialization.js +3 -0
  472. package/node/hooks/core/useGridInitialization.js +4 -0
  473. package/node/hooks/core/useGridRefs.js +22 -0
  474. package/node/hooks/core/useGridTheme.js +29 -0
  475. package/node/hooks/features/columnGrouping/useGridColumnGrouping.js +5 -12
  476. package/node/hooks/features/columnHeaders/useGridColumnHeaders.js +65 -159
  477. package/node/hooks/features/columnMenu/useGridColumnMenu.js +28 -23
  478. package/node/hooks/features/columns/gridColumnsInterfaces.js +11 -1
  479. package/node/hooks/features/columns/gridColumnsSelector.js +52 -1
  480. package/node/hooks/features/columns/gridColumnsUtils.js +10 -13
  481. package/node/hooks/features/columns/index.js +22 -61
  482. package/node/hooks/features/columns/useGridColumnSpanning.js +62 -61
  483. package/node/hooks/features/columns/useGridColumns.js +20 -22
  484. package/node/hooks/features/dimensions/gridDimensionsSelectors.js +8 -0
  485. package/node/hooks/features/dimensions/index.js +11 -0
  486. package/node/hooks/features/dimensions/useGridDimensions.js +215 -144
  487. package/node/hooks/features/export/serializers/csvSerializer.js +2 -2
  488. package/node/hooks/features/filter/useGridFilter.js +2 -2
  489. package/node/hooks/features/focus/gridFocusStateSelector.js +3 -7
  490. package/node/hooks/features/focus/useGridFocus.js +2 -2
  491. package/node/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +2 -15
  492. package/node/hooks/features/pagination/useGridPagination.js +3 -5
  493. package/node/hooks/features/rows/gridRowsSelector.js +2 -2
  494. package/node/hooks/features/rows/gridRowsUtils.js +8 -5
  495. package/node/hooks/features/rows/useGridRowsMeta.js +5 -3
  496. package/node/hooks/features/scroll/useGridScroll.js +8 -9
  497. package/node/hooks/features/sorting/gridSortingUtils.js +1 -1
  498. package/node/hooks/features/sorting/useGridSorting.js +15 -10
  499. package/node/hooks/features/virtualization/gridVirtualizationSelectors.js +22 -2
  500. package/node/hooks/features/virtualization/useGridVirtualScroller.js +434 -431
  501. package/node/hooks/features/virtualization/useGridVirtualization.js +9 -1
  502. package/node/hooks/utils/index.js +36 -0
  503. package/node/hooks/utils/useGridAriaAttributes.js +1 -1
  504. package/node/hooks/utils/useGridNativeEventListener.js +3 -9
  505. package/node/hooks/utils/useResizeObserver.js +44 -0
  506. package/node/hooks/utils/useRunOnce.js +27 -0
  507. package/node/index.js +1 -1
  508. package/node/internals/index.js +86 -71
  509. package/node/locales/arSD.js +5 -6
  510. package/node/locales/beBY.js +5 -6
  511. package/node/locales/bgBG.js +5 -6
  512. package/node/locales/csCZ.js +5 -6
  513. package/node/locales/daDK.js +5 -6
  514. package/node/locales/deDE.js +5 -6
  515. package/node/locales/elGR.js +5 -6
  516. package/node/locales/esES.js +5 -6
  517. package/node/locales/faIR.js +5 -6
  518. package/node/locales/fiFI.js +5 -6
  519. package/node/locales/frFR.js +5 -6
  520. package/node/locales/heIL.js +5 -6
  521. package/node/locales/hrHR.js +154 -0
  522. package/node/locales/huHU.js +5 -6
  523. package/node/locales/index.js +33 -0
  524. package/node/locales/itIT.js +5 -6
  525. package/node/locales/jaJP.js +5 -6
  526. package/node/locales/koKR.js +5 -6
  527. package/node/locales/nbNO.js +5 -6
  528. package/node/locales/nlNL.js +5 -6
  529. package/node/locales/plPL.js +5 -6
  530. package/node/locales/ptBR.js +5 -6
  531. package/node/locales/ptPT.js +154 -0
  532. package/node/locales/roRO.js +5 -6
  533. package/node/locales/ruRU.js +5 -6
  534. package/node/locales/skSK.js +5 -6
  535. package/node/locales/svSE.js +5 -6
  536. package/node/locales/trTR.js +5 -6
  537. package/node/locales/ukUA.js +5 -6
  538. package/node/locales/urPK.js +5 -6
  539. package/node/locales/viVN.js +5 -6
  540. package/node/locales/zhCN.js +5 -6
  541. package/node/locales/zhHK.js +154 -0
  542. package/node/locales/zhTW.js +5 -6
  543. package/node/models/index.js +0 -11
  544. package/node/models/params/index.js +0 -11
  545. package/node/utils/utils.js +11 -1
  546. package/package.json +6 -6
  547. package/utils/utils.d.ts +6 -0
  548. package/utils/utils.js +10 -1
  549. package/components/DataGridVirtualScroller.d.ts +0 -3
  550. package/components/DataGridVirtualScroller.js +0 -35
  551. package/components/containers/GridMainContainer.js +0 -43
  552. package/legacy/components/DataGridVirtualScroller.js +0 -32
  553. package/legacy/components/containers/GridMainContainer.js +0 -45
  554. package/legacy/models/gridRootContainerRef.js +0 -1
  555. package/legacy/models/params/gridRenderedRowsIntervalChangeParams.js +0 -1
  556. package/models/gridRootContainerRef.d.ts +0 -5
  557. package/models/gridRootContainerRef.js +0 -1
  558. package/models/params/gridRenderedRowsIntervalChangeParams.d.ts +0 -10
  559. package/models/params/gridRenderedRowsIntervalChangeParams.js +0 -1
  560. package/modern/components/DataGridVirtualScroller.js +0 -35
  561. package/modern/components/containers/GridMainContainer.js +0 -42
  562. package/modern/models/gridRootContainerRef.js +0 -1
  563. package/modern/models/params/gridRenderedRowsIntervalChangeParams.js +0 -1
  564. package/node/components/DataGridVirtualScroller.js +0 -42
  565. package/node/models/gridRootContainerRef.js +0 -5
  566. package/node/models/params/gridRenderedRowsIntervalChangeParams.js +0 -5
@@ -1,136 +1,94 @@
1
+ import _extends from "@babel/runtime/helpers/esm/extends";
1
2
  import * as React from 'react';
2
- import { unstable_debounce as debounce, unstable_ownerDocument as ownerDocument, unstable_useEnhancedEffect as useEnhancedEffect, unstable_ownerWindow as ownerWindow } from '@mui/utils';
3
+ import { unstable_debounce as debounce, unstable_ownerDocument as ownerDocument, unstable_useEnhancedEffect as useEnhancedEffect, unstable_useEventCallback as useEventCallback, unstable_ownerWindow as ownerWindow } from '@mui/utils';
3
4
  import { useGridApiEventHandler, useGridApiOptionHandler } from '../../utils/useGridApiEventHandler';
4
5
  import { useGridApiMethod } from '../../utils/useGridApiMethod';
5
6
  import { useGridLogger } from '../../utils/useGridLogger';
6
- import { gridColumnsTotalWidthSelector } from '../columns';
7
+ import { gridColumnsTotalWidthSelector, gridVisiblePinnedColumnDefinitionsSelector } from '../columns';
8
+ import { gridDimensionsSelector } from './gridDimensionsSelectors';
7
9
  import { gridDensityFactorSelector } from '../density';
10
+ import { gridRenderContextSelector } from '../virtualization';
8
11
  import { useGridSelector } from '../../utils';
9
12
  import { getVisibleRows } from '../../utils/useGridVisibleRows';
10
13
  import { gridRowsMetaSelector } from '../rows/gridRowsMetaSelector';
11
14
  import { calculatePinnedRowsHeight } from '../rows/gridRowsUtils';
12
15
  import { getTotalHeaderHeight } from '../columns/gridColumnsUtils';
13
- const isTestEnvironment = process.env.NODE_ENV === 'test';
14
- const hasScroll = ({
15
- content,
16
- container,
17
- scrollBarSize
18
- }) => {
19
- const hasScrollXIfNoYScrollBar = content.width > container.width;
20
- const hasScrollYIfNoXScrollBar = content.height > container.height;
21
- let hasScrollX = false;
22
- let hasScrollY = false;
23
- if (hasScrollXIfNoYScrollBar || hasScrollYIfNoXScrollBar) {
24
- hasScrollX = hasScrollXIfNoYScrollBar;
25
- hasScrollY = content.height + (hasScrollX ? scrollBarSize : 0) > container.height;
26
-
27
- // We recalculate the scroll x to consider the size of the y scrollbar.
28
- if (hasScrollY) {
29
- hasScrollX = content.width + scrollBarSize > container.width;
30
- }
31
- }
32
- return {
33
- hasScrollX,
34
- hasScrollY
35
- };
16
+ const EMPTY_SIZE = {
17
+ width: 0,
18
+ height: 0
19
+ };
20
+ const EMPTY_DIMENSIONS = {
21
+ isReady: false,
22
+ root: EMPTY_SIZE,
23
+ viewportOuterSize: EMPTY_SIZE,
24
+ viewportInnerSize: EMPTY_SIZE,
25
+ contentSize: EMPTY_SIZE,
26
+ minimumSize: EMPTY_SIZE,
27
+ hasScrollX: false,
28
+ hasScrollY: false,
29
+ scrollbarSize: 0,
30
+ headerHeight: 0,
31
+ rowWidth: 0,
32
+ rowHeight: 0,
33
+ columnsTotalWidth: 0,
34
+ leftPinnedWidth: 0,
35
+ rightPinnedWidth: 0,
36
+ headersTotalHeight: 0,
37
+ topContainerHeight: 0,
38
+ bottomContainerHeight: 0
39
+ };
40
+ export const dimensionsStateInitializer = state => {
41
+ const dimensions = EMPTY_DIMENSIONS;
42
+ return _extends({}, state, {
43
+ dimensions
44
+ });
36
45
  };
37
46
  export function useGridDimensions(apiRef, props) {
38
47
  const logger = useGridLogger(apiRef, 'useResizeContainer');
39
48
  const errorShown = React.useRef(false);
40
- const rootDimensionsRef = React.useRef(null);
41
- const fullDimensionsRef = React.useRef(null);
49
+ const rootDimensionsRef = React.useRef(EMPTY_SIZE);
42
50
  const rowsMeta = useGridSelector(apiRef, gridRowsMetaSelector);
51
+ const pinnedColumns = useGridSelector(apiRef, gridVisiblePinnedColumnDefinitionsSelector);
43
52
  const densityFactor = useGridSelector(apiRef, gridDensityFactorSelector);
44
53
  const rowHeight = Math.floor(props.rowHeight * densityFactor);
45
- const totalHeaderHeight = getTotalHeaderHeight(apiRef, props.columnHeaderHeight);
46
- const updateGridDimensionsRef = React.useCallback(() => {
47
- const rootElement = apiRef.current.rootElementRef?.current;
48
- const columnsTotalWidth = gridColumnsTotalWidthSelector(apiRef);
49
- const pinnedRowsHeight = calculatePinnedRowsHeight(apiRef);
50
- if (!rootDimensionsRef.current) {
51
- return;
52
- }
53
- let scrollBarSize;
54
- if (props.scrollbarSize != null) {
55
- scrollBarSize = props.scrollbarSize;
56
- } else if (!columnsTotalWidth || !rootElement) {
57
- scrollBarSize = 0;
58
- } else {
59
- const doc = ownerDocument(rootElement);
60
- const scrollDiv = doc.createElement('div');
61
- scrollDiv.style.width = '99px';
62
- scrollDiv.style.height = '99px';
63
- scrollDiv.style.position = 'absolute';
64
- scrollDiv.style.overflow = 'scroll';
65
- scrollDiv.className = 'scrollDiv';
66
- rootElement.appendChild(scrollDiv);
67
- scrollBarSize = scrollDiv.offsetWidth - scrollDiv.clientWidth;
68
- rootElement.removeChild(scrollDiv);
69
- }
70
- let viewportOuterSize;
71
- let hasScrollX;
72
- let hasScrollY;
73
- if (props.autoHeight) {
74
- hasScrollY = false;
75
- hasScrollX = Math.round(columnsTotalWidth) > Math.round(rootDimensionsRef.current.width);
76
- viewportOuterSize = {
77
- width: rootDimensionsRef.current.width,
78
- height: rowsMeta.currentPageTotalHeight + (hasScrollX ? scrollBarSize : 0)
79
- };
80
- } else {
81
- viewportOuterSize = {
82
- width: rootDimensionsRef.current.width,
83
- height: Math.max(rootDimensionsRef.current.height - totalHeaderHeight, 0)
84
- };
85
- const scrollInformation = hasScroll({
86
- content: {
87
- width: Math.round(columnsTotalWidth),
88
- height: rowsMeta.currentPageTotalHeight
89
- },
90
- container: {
91
- width: Math.round(viewportOuterSize.width),
92
- height: viewportOuterSize.height - pinnedRowsHeight.top - pinnedRowsHeight.bottom
93
- },
94
- scrollBarSize
95
- });
96
- hasScrollY = scrollInformation.hasScrollY;
97
- hasScrollX = scrollInformation.hasScrollX;
98
- }
99
- const viewportInnerSize = {
100
- width: viewportOuterSize.width - (hasScrollY ? scrollBarSize : 0),
101
- height: viewportOuterSize.height - (hasScrollX ? scrollBarSize : 0)
102
- };
103
- const newFullDimensions = {
104
- viewportOuterSize,
105
- viewportInnerSize,
106
- hasScrollX,
107
- hasScrollY,
108
- scrollBarSize
109
- };
110
- const prevDimensions = fullDimensionsRef.current;
111
- fullDimensionsRef.current = newFullDimensions;
112
- if (newFullDimensions.viewportInnerSize.width !== prevDimensions?.viewportInnerSize.width || newFullDimensions.viewportInnerSize.height !== prevDimensions?.viewportInnerSize.height) {
113
- apiRef.current.publishEvent('viewportInnerSizeChange', newFullDimensions.viewportInnerSize);
114
- }
115
- }, [apiRef, props.scrollbarSize, props.autoHeight, rowsMeta.currentPageTotalHeight, totalHeaderHeight]);
54
+ const headerHeight = Math.floor(props.columnHeaderHeight * densityFactor);
55
+ const columnsTotalWidth = roundToDecimalPlaces(gridColumnsTotalWidthSelector(apiRef), 6);
56
+ // XXX: The `props as any` below is not resilient to change.
57
+ const hasHeaderFilters = Boolean(props.headerFilters);
58
+ const headersTotalHeight = getTotalHeaderHeight(apiRef, props.columnHeaderHeight) + Number(hasHeaderFilters) * headerHeight;
59
+ const leftPinnedWidth = pinnedColumns.left.reduce((w, col) => w + col.computedWidth, 0);
60
+ const rightPinnedWidth = pinnedColumns.right.reduce((w, col) => w + col.computedWidth, 0);
116
61
  const [savedSize, setSavedSize] = React.useState();
117
62
  const debouncedSetSavedSize = React.useMemo(() => debounce(setSavedSize, 60), []);
118
63
  const previousSize = React.useRef();
119
- useEnhancedEffect(() => {
120
- if (savedSize) {
121
- updateGridDimensionsRef();
122
- apiRef.current.publishEvent('debouncedResize', rootDimensionsRef.current);
123
- }
124
- }, [apiRef, savedSize, updateGridDimensionsRef]);
125
-
126
- // This is the function called by apiRef.current.resize()
64
+ const getRootDimensions = () => apiRef.current.state.dimensions;
65
+ const setDimensions = useEventCallback(dimensions => {
66
+ apiRef.current.setState(state => _extends({}, state, {
67
+ dimensions
68
+ }));
69
+ });
127
70
  const resize = React.useCallback(() => {
128
- apiRef.current.computeSizeAndPublishResizeEvent();
71
+ const element = apiRef.current.mainElementRef.current;
72
+ if (!element) {
73
+ return;
74
+ }
75
+ const computedStyle = ownerWindow(element).getComputedStyle(element);
76
+ const height = parseFloat(computedStyle.height) || 0;
77
+ const width = parseFloat(computedStyle.width) || 0;
78
+ const hasHeightChanged = height !== previousSize.current?.height;
79
+ const hasWidthChanged = width !== previousSize.current?.width;
80
+ if (!previousSize.current || hasHeightChanged || hasWidthChanged) {
81
+ const size = {
82
+ width,
83
+ height
84
+ };
85
+ apiRef.current.publishEvent('resize', size);
86
+ previousSize.current = size;
87
+ }
129
88
  }, [apiRef]);
130
- const getRootDimensions = React.useCallback(() => fullDimensionsRef.current, []);
131
89
  const getViewportPageSize = React.useCallback(() => {
132
- const dimensions = apiRef.current.getRootDimensions();
133
- if (!dimensions) {
90
+ const dimensions = gridDimensionsSelector(apiRef.current.state);
91
+ if (!dimensions.isReady) {
134
92
  return 0;
135
93
  }
136
94
  const currentPage = getVisibleRows(apiRef, {
@@ -141,44 +99,135 @@ export function useGridDimensions(apiRef, props) {
141
99
  // TODO: Use a combination of scrollTop, dimensions.viewportInnerSize.height and rowsMeta.possitions
142
100
  // to find out the maximum number of rows that can fit in the visible part of the grid
143
101
  if (props.getRowHeight) {
144
- const renderContext = apiRef.current.getRenderContext();
102
+ const renderContext = gridRenderContextSelector(apiRef);
145
103
  const viewportPageSize = renderContext.lastRowIndex - renderContext.firstRowIndex;
146
104
  return Math.min(viewportPageSize - 1, currentPage.rows.length);
147
105
  }
148
106
  const maximumPageSizeWithoutScrollBar = Math.floor(dimensions.viewportInnerSize.height / rowHeight);
149
107
  return Math.min(maximumPageSizeWithoutScrollBar, currentPage.rows.length);
150
108
  }, [apiRef, props.pagination, props.paginationMode, props.getRowHeight, rowHeight]);
151
- const computeSizeAndPublishResizeEvent = React.useCallback(() => {
152
- const mainEl = apiRef.current.mainElementRef?.current;
153
- if (!mainEl) {
154
- return;
155
- }
156
- const win = ownerWindow(mainEl);
157
- const computedStyle = win.getComputedStyle(mainEl);
158
- const height = parseFloat(computedStyle.height) || 0;
159
- const width = parseFloat(computedStyle.width) || 0;
160
- const hasHeightChanged = height !== previousSize.current?.height;
161
- const hasWidthChanged = width !== previousSize.current?.width;
162
- if (!previousSize.current || hasHeightChanged || hasWidthChanged) {
163
- const size = {
164
- width,
165
- height
109
+ const updateDimensions = React.useCallback(() => {
110
+ const rootElement = apiRef.current.rootElementRef.current;
111
+ const pinnedRowsHeight = calculatePinnedRowsHeight(apiRef);
112
+ const scrollbarSize = measureScrollbarSize(rootElement, columnsTotalWidth, props.scrollbarSize);
113
+ const topContainerHeight = headersTotalHeight + pinnedRowsHeight.top;
114
+ const bottomContainerHeight = pinnedRowsHeight.bottom;
115
+ const contentSize = {
116
+ width: columnsTotalWidth,
117
+ height: rowsMeta.currentPageTotalHeight
118
+ };
119
+ let viewportOuterSize;
120
+ let viewportInnerSize;
121
+ let hasScrollX = false;
122
+ let hasScrollY = false;
123
+ if (props.autoHeight) {
124
+ hasScrollY = false;
125
+ hasScrollX = Math.round(columnsTotalWidth) > Math.round(rootDimensionsRef.current.width);
126
+ viewportOuterSize = {
127
+ width: rootDimensionsRef.current.width,
128
+ height: topContainerHeight + bottomContainerHeight + contentSize.height
166
129
  };
167
- apiRef.current.publishEvent('resize', size);
168
- previousSize.current = size;
130
+ viewportInnerSize = {
131
+ width: Math.max(0, viewportOuterSize.width - (hasScrollY ? scrollbarSize : 0)),
132
+ height: Math.max(0, viewportOuterSize.height - (hasScrollX ? scrollbarSize : 0))
133
+ };
134
+ } else {
135
+ viewportOuterSize = {
136
+ width: rootDimensionsRef.current.width,
137
+ height: rootDimensionsRef.current.height
138
+ };
139
+ viewportInnerSize = {
140
+ width: Math.max(0, viewportOuterSize.width - leftPinnedWidth - rightPinnedWidth),
141
+ height: Math.max(0, viewportOuterSize.height - topContainerHeight - bottomContainerHeight)
142
+ };
143
+ const content = contentSize;
144
+ const container = viewportInnerSize;
145
+ const hasScrollXIfNoYScrollBar = content.width > container.width;
146
+ const hasScrollYIfNoXScrollBar = content.height > container.height;
147
+ if (hasScrollXIfNoYScrollBar || hasScrollYIfNoXScrollBar) {
148
+ hasScrollY = hasScrollYIfNoXScrollBar;
149
+ hasScrollX = content.width + (hasScrollY ? scrollbarSize : 0) > container.width;
150
+
151
+ // We recalculate the scroll y to consider the size of the x scrollbar.
152
+ if (hasScrollX) {
153
+ hasScrollY = content.height + scrollbarSize > container.height;
154
+ }
155
+ }
156
+ if (hasScrollY) {
157
+ viewportInnerSize.width -= scrollbarSize;
158
+ }
159
+ if (hasScrollX) {
160
+ viewportInnerSize.height -= scrollbarSize;
161
+ }
169
162
  }
170
- }, [apiRef]);
171
- const dimensionsApi = {
163
+ const rowWidth = Math.max(viewportOuterSize.width, columnsTotalWidth + (hasScrollY ? scrollbarSize : 0));
164
+ const minimumSize = {
165
+ width: contentSize.width,
166
+ height: topContainerHeight + contentSize.height + bottomContainerHeight
167
+ };
168
+ const newDimensions = {
169
+ isReady: true,
170
+ root: rootDimensionsRef.current,
171
+ viewportOuterSize,
172
+ viewportInnerSize,
173
+ contentSize,
174
+ minimumSize,
175
+ hasScrollX,
176
+ hasScrollY,
177
+ scrollbarSize,
178
+ headerHeight,
179
+ rowWidth,
180
+ rowHeight,
181
+ columnsTotalWidth,
182
+ leftPinnedWidth,
183
+ rightPinnedWidth,
184
+ headersTotalHeight,
185
+ topContainerHeight,
186
+ bottomContainerHeight
187
+ };
188
+ const prevDimensions = apiRef.current.state.dimensions;
189
+ setDimensions(newDimensions);
190
+ if (newDimensions.viewportInnerSize.width !== prevDimensions.viewportInnerSize.width || newDimensions.viewportInnerSize.height !== prevDimensions.viewportInnerSize.height) {
191
+ apiRef.current.publishEvent('viewportInnerSizeChange', newDimensions.viewportInnerSize);
192
+ }
193
+ apiRef.current.updateRenderContext?.();
194
+ }, [apiRef, setDimensions, props.scrollbarSize, props.autoHeight, rowsMeta.currentPageTotalHeight, rowHeight, headerHeight, columnsTotalWidth, headersTotalHeight, leftPinnedWidth, rightPinnedWidth]);
195
+ const apiPublic = {
172
196
  resize,
173
197
  getRootDimensions
174
198
  };
175
- const dimensionsPrivateApi = {
176
- getViewportPageSize,
177
- updateGridDimensionsRef,
178
- computeSizeAndPublishResizeEvent
199
+ const apiPrivate = {
200
+ updateDimensions,
201
+ getViewportPageSize
179
202
  };
180
- useGridApiMethod(apiRef, dimensionsApi, 'public');
181
- useGridApiMethod(apiRef, dimensionsPrivateApi, 'private');
203
+ useGridApiMethod(apiRef, apiPublic, 'public');
204
+ useGridApiMethod(apiRef, apiPrivate, 'private');
205
+ useEnhancedEffect(() => {
206
+ if (savedSize) {
207
+ updateDimensions();
208
+ apiRef.current.publishEvent('debouncedResize', rootDimensionsRef.current);
209
+ }
210
+ }, [apiRef, savedSize, updateDimensions]);
211
+ const root = apiRef.current.rootElementRef.current;
212
+ const dimensions = apiRef.current.state.dimensions;
213
+ useEnhancedEffect(() => {
214
+ if (!root) {
215
+ return;
216
+ }
217
+ const set = (k, v) => root.style.setProperty(k, v);
218
+ set('--DataGrid-width', `${dimensions.viewportOuterSize.width}px`);
219
+ set('--DataGrid-hasScrollX', `${Number(dimensions.hasScrollX)}`);
220
+ set('--DataGrid-hasScrollY', `${Number(dimensions.hasScrollY)}`);
221
+ set('--DataGrid-scrollbarSize', `${dimensions.scrollbarSize}px`);
222
+ set('--DataGrid-rowWidth', `${dimensions.rowWidth}px`);
223
+ set('--DataGrid-columnsTotalWidth', `${dimensions.columnsTotalWidth}px`);
224
+ set('--DataGrid-leftPinnedWidth', `${dimensions.leftPinnedWidth}px`);
225
+ set('--DataGrid-rightPinnedWidth', `${dimensions.rightPinnedWidth}px`);
226
+ set('--DataGrid-headerHeight', `${dimensions.headerHeight}px`);
227
+ set('--DataGrid-headersTotalHeight', `${dimensions.headersTotalHeight}px`);
228
+ set('--DataGrid-topContainerHeight', `${dimensions.topContainerHeight}px`);
229
+ set('--DataGrid-bottomContainerHeight', `${dimensions.bottomContainerHeight}px`);
230
+ }, [root, dimensions]);
182
231
  const isFirstSizing = React.useRef(true);
183
232
  const handleResize = React.useCallback(size => {
184
233
  rootDimensionsRef.current = size;
@@ -193,12 +242,6 @@ export function useGridDimensions(apiRef, props) {
193
242
  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'));
194
243
  errorShown.current = true;
195
244
  }
196
- if (isTestEnvironment) {
197
- // We don't need to debounce the resize for tests.
198
- setSavedSize(size);
199
- isFirstSizing.current = false;
200
- return;
201
- }
202
245
  if (isFirstSizing.current) {
203
246
  // We want to initialize the grid dimensions as soon as possible to avoid flickering
204
247
  setSavedSize(size);
@@ -207,10 +250,35 @@ export function useGridDimensions(apiRef, props) {
207
250
  }
208
251
  debouncedSetSavedSize(size);
209
252
  }, [props.autoHeight, debouncedSetSavedSize, logger]);
210
- useEnhancedEffect(() => updateGridDimensionsRef(), [updateGridDimensionsRef]);
211
- useGridApiOptionHandler(apiRef, 'sortedRowsSet', updateGridDimensionsRef);
212
- useGridApiOptionHandler(apiRef, 'paginationModelChange', updateGridDimensionsRef);
213
- useGridApiOptionHandler(apiRef, 'columnsChange', updateGridDimensionsRef);
253
+ useEnhancedEffect(updateDimensions, [updateDimensions]);
254
+ useGridApiOptionHandler(apiRef, 'sortedRowsSet', updateDimensions);
255
+ useGridApiOptionHandler(apiRef, 'paginationModelChange', updateDimensions);
256
+ useGridApiOptionHandler(apiRef, 'columnsChange', updateDimensions);
214
257
  useGridApiEventHandler(apiRef, 'resize', handleResize);
215
258
  useGridApiOptionHandler(apiRef, 'debouncedResize', props.onResize);
259
+ }
260
+ function measureScrollbarSize(rootElement, columnsTotalWidth, scrollbarSize) {
261
+ if (scrollbarSize !== undefined) {
262
+ return scrollbarSize;
263
+ }
264
+ if (rootElement === null || columnsTotalWidth === 0) {
265
+ return 0;
266
+ }
267
+ const doc = ownerDocument(rootElement);
268
+ const scrollDiv = doc.createElement('div');
269
+ scrollDiv.style.width = '99px';
270
+ scrollDiv.style.height = '99px';
271
+ scrollDiv.style.position = 'absolute';
272
+ scrollDiv.style.overflow = 'scroll';
273
+ scrollDiv.className = 'scrollDiv';
274
+ rootElement.appendChild(scrollDiv);
275
+ const size = scrollDiv.offsetWidth - scrollDiv.clientWidth;
276
+ rootElement.removeChild(scrollDiv);
277
+ return size;
278
+ }
279
+
280
+ // Get rid of floating point imprecision errors
281
+ // https://github.com/mui/mui-x/issues/9550#issuecomment-1619020477
282
+ function roundToDecimalPlaces(value, decimals) {
283
+ return Math.round(value * 10 ** decimals) / 10 ** decimals;
216
284
  }
@@ -104,10 +104,10 @@ export function buildCSV(options) {
104
104
  const filteredColumns = columns.filter(column => column.field !== GRID_CHECKBOX_SELECTION_COL_DEF.field);
105
105
  const headerRows = [];
106
106
  if (includeColumnGroupsHeaders) {
107
- const columnGroupLookup = apiRef.current.unstable_getAllGroupDetails();
107
+ const columnGroupLookup = apiRef.current.getAllGroupDetails();
108
108
  let maxColumnGroupsDepth = 0;
109
109
  const columnGroupPathsLookup = filteredColumns.reduce((acc, column) => {
110
- const columnGroupPath = apiRef.current.unstable_getColumnGroupPath(column.field);
110
+ const columnGroupPath = apiRef.current.getColumnGroupPath(column.field);
111
111
  acc[column.field] = columnGroupPath;
112
112
  maxColumnGroupsDepth = Math.max(maxColumnGroupsDepth, columnGroupPath.length);
113
113
  return acc;
@@ -6,7 +6,7 @@ import { useLazyRef } from '../../utils/useLazyRef';
6
6
  import { useGridApiEventHandler } from '../../utils/useGridApiEventHandler';
7
7
  import { useGridApiMethod } from '../../utils/useGridApiMethod';
8
8
  import { useGridLogger } from '../../utils/useGridLogger';
9
- import { gridFilterableColumnLookupSelector } from '../columns/gridColumnsSelector';
9
+ import { gridColumnLookupSelector } from '../columns/gridColumnsSelector';
10
10
  import { GridPreferencePanelsValue } from '../preferencesPanel/gridPreferencePanelsValue';
11
11
  import { getDefaultGridFilterModel } from './gridFilterState';
12
12
  import { gridFilterModelSelector } from './gridFilterSelector';
@@ -309,8 +309,8 @@ export const useGridFilter = (apiRef, props) => {
309
309
  const handleColumnsChange = React.useCallback(() => {
310
310
  logger.debug('onColUpdated - GridColumns changed, applying filters');
311
311
  const filterModel = gridFilterModelSelector(apiRef);
312
- const filterableColumnsLookup = gridFilterableColumnLookupSelector(apiRef);
313
- const newFilterItems = filterModel.items.filter(item => item.field && filterableColumnsLookup[item.field]);
312
+ const columnsLookup = gridColumnLookupSelector(apiRef);
313
+ const newFilterItems = filterModel.items.filter(item => item.field && columnsLookup[item.field]);
314
314
  if (newFilterItems.length < filterModel.items.length) {
315
315
  apiRef.current.setFilterModel(_extends({}, filterModel, {
316
316
  items: newFilterItems
@@ -3,13 +3,9 @@ export const gridFocusStateSelector = state => state.focus;
3
3
  export const gridFocusCellSelector = createSelector(gridFocusStateSelector, focusState => focusState.cell);
4
4
  export const gridFocusColumnHeaderSelector = createSelector(gridFocusStateSelector, focusState => focusState.columnHeader);
5
5
  export const gridFocusColumnHeaderFilterSelector = createSelector(gridFocusStateSelector, focusState => focusState.columnHeaderFilter);
6
-
7
- // eslint-disable-next-line @typescript-eslint/naming-convention
8
- export const unstable_gridFocusColumnGroupHeaderSelector = createSelector(gridFocusStateSelector, focusState => focusState.columnGroupHeader);
6
+ export const gridFocusColumnGroupHeaderSelector = createSelector(gridFocusStateSelector, focusState => focusState.columnGroupHeader);
9
7
  export const gridTabIndexStateSelector = state => state.tabIndex;
10
8
  export const gridTabIndexCellSelector = createSelector(gridTabIndexStateSelector, state => state.cell);
11
9
  export const gridTabIndexColumnHeaderSelector = createSelector(gridTabIndexStateSelector, state => state.columnHeader);
12
10
  export const gridTabIndexColumnHeaderFilterSelector = createSelector(gridTabIndexStateSelector, state => state.columnHeaderFilter);
13
-
14
- // eslint-disable-next-line @typescript-eslint/naming-convention
15
- export const unstable_gridTabIndexColumnGroupHeaderSelector = createSelector(gridTabIndexStateSelector, state => state.columnGroupHeader);
11
+ export const gridTabIndexColumnGroupHeaderSelector = createSelector(gridTabIndexStateSelector, state => state.columnGroupHeader);
@@ -6,7 +6,7 @@ import { useGridApiMethod } from '../../utils/useGridApiMethod';
6
6
  import { useGridLogger } from '../../utils/useGridLogger';
7
7
  import { useGridApiEventHandler } from '../../utils/useGridApiEventHandler';
8
8
  import { isNavigationKey } from '../../../utils/keyboardUtils';
9
- import { gridFocusCellSelector, unstable_gridFocusColumnGroupHeaderSelector } from './gridFocusStateSelector';
9
+ import { gridFocusCellSelector, gridFocusColumnGroupHeaderSelector } from './gridFocusStateSelector';
10
10
  import { gridVisibleColumnDefinitionsSelector } from '../columns/gridColumnsSelector';
11
11
  import { getVisibleRows } from '../../utils/useGridVisibleRows';
12
12
  import { clamp } from '../../../utils/utils';
@@ -164,7 +164,7 @@ export const useGridFocus = (apiRef, props) => {
164
164
  });
165
165
  apiRef.current.forceUpdate();
166
166
  }, [apiRef]);
167
- const getColumnGroupHeaderFocus = React.useCallback(() => unstable_gridFocusColumnGroupHeaderSelector(apiRef), [apiRef]);
167
+ const getColumnGroupHeaderFocus = React.useCallback(() => gridFocusColumnGroupHeaderSelector(apiRef), [apiRef]);
168
168
  const moveFocusToRelativeCell = React.useCallback((id, field, direction) => {
169
169
  let columnIndexToFocus = apiRef.current.getColumnIndex(field);
170
170
  const visibleColumns = gridVisibleColumnDefinitionsSelector(apiRef);
@@ -244,7 +244,7 @@ export const useGridFocus = (apiRef, props) => {
244
244
  if (event.target !== event.currentTarget) {
245
245
  return;
246
246
  }
247
- const focusedColumnGroup = unstable_gridFocusColumnGroupHeaderSelector(apiRef);
247
+ const focusedColumnGroup = gridFocusColumnGroupHeaderSelector(apiRef);
248
248
  if (focusedColumnGroup !== null && focusedColumnGroup.depth === depth && fields.includes(focusedColumnGroup.field)) {
249
249
  // This group cell has already been focused
250
250
  return;
@@ -11,7 +11,7 @@ import { GridCellModes } from '../../../models/gridEditRowModel';
11
11
  import { isNavigationKey } from '../../../utils/keyboardUtils';
12
12
  import { GRID_DETAIL_PANEL_TOGGLE_FIELD } from '../../../constants/gridDetailPanelToggleField';
13
13
  import { gridPinnedRowsSelector } from '../rows/gridRowsSelector';
14
- import { unstable_gridFocusColumnGroupHeaderSelector } from '../focus';
14
+ import { gridFocusColumnGroupHeaderSelector } from '../focus';
15
15
  import { gridColumnGroupsHeaderMaxDepthSelector } from '../columnGrouping/gridColumnGroupsSelector';
16
16
  import { gridHeaderFilteringEditFieldSelector, gridHeaderFilteringMenuSelector } from '../headerFiltering/gridHeaderFilteringSelectors';
17
17
  import { useGridRegisterPipeProcessor } from '../../core/pipeProcessing';
@@ -137,10 +137,6 @@ export const useGridKeyboardNavigation = (apiRef, props) => {
137
137
  // There is one exception for the checkBoxHeader
138
138
  return;
139
139
  }
140
- const dimensions = apiRef.current.getRootDimensions();
141
- if (!dimensions) {
142
- return;
143
- }
144
140
  const viewportPageSize = apiRef.current.getViewportPageSize();
145
141
  const colIndexBefore = params.field ? apiRef.current.getColumnIndex(params.field) : 0;
146
142
  const firstRowIndexInPage = currentPageRows.length > 0 ? 0 : null;
@@ -233,10 +229,6 @@ export const useGridKeyboardNavigation = (apiRef, props) => {
233
229
  }
234
230
  }, [apiRef, currentPageRows.length, headerFilteringEnabled, goToHeaderFilter, goToCell, getRowIdFromIndex, theme.direction, goToHeader, goToGroupHeader]);
235
231
  const handleHeaderFilterKeyDown = React.useCallback((params, event) => {
236
- const dimensions = apiRef.current.getRootDimensions();
237
- if (!dimensions) {
238
- return;
239
- }
240
232
  const isEditing = gridHeaderFilteringEditFieldSelector(apiRef) === params.field;
241
233
  const isHeaderMenuOpen = gridHeaderFilteringMenuSelector(apiRef) === params.field;
242
234
  if (isEditing || isHeaderMenuOpen || !isNavigationKey(event.key)) {
@@ -323,11 +315,7 @@ export const useGridKeyboardNavigation = (apiRef, props) => {
323
315
  }
324
316
  }, [apiRef, currentPageRows.length, goToHeaderFilter, theme.direction, goToHeader, goToCell, getRowIdFromIndex]);
325
317
  const handleColumnGroupHeaderKeyDown = React.useCallback((params, event) => {
326
- const dimensions = apiRef.current.getRootDimensions();
327
- if (!dimensions) {
328
- return;
329
- }
330
- const focusedColumnGroup = unstable_gridFocusColumnGroupHeaderSelector(apiRef);
318
+ const focusedColumnGroup = gridFocusColumnGroupHeaderSelector(apiRef);
331
319
  if (focusedColumnGroup === null) {
332
320
  return;
333
321
  }
@@ -430,8 +418,7 @@ export const useGridKeyboardNavigation = (apiRef, props) => {
430
418
  if (!canUpdateFocus) {
431
419
  return;
432
420
  }
433
- const dimensions = apiRef.current.getRootDimensions();
434
- if (currentPageRows.length === 0 || !dimensions) {
421
+ if (currentPageRows.length === 0) {
435
422
  return;
436
423
  }
437
424
  const direction = theme.direction;
@@ -5,7 +5,6 @@ import { gridDensityFactorSelector } from '../density';
5
5
  import { useGridLogger, useGridSelector, useGridApiMethod, useGridApiEventHandler } from '../../utils';
6
6
  import { useGridRegisterPipeProcessor } from '../../core/pipeProcessing';
7
7
  import { gridPaginationModelSelector } from './gridPaginationSelector';
8
- import { calculatePinnedRowsHeight } from '../rows/gridRowsUtils';
9
8
  import { getPageCount, noRowCountInServerMode, defaultPageSize, throwIfPageSizeExceedsTheLimit, getDefaultGridPaginationModel, getValidPage } from './gridPaginationUtils';
10
9
  export const paginationStateInitializer = (state, props) => {
11
10
  const paginationModel = _extends({}, getDefaultGridPaginationModel(props.autoPageSize), props.paginationModel ?? props.initialState?.pagination?.paginationModel);
@@ -137,12 +136,11 @@ export const useGridPagination = (apiRef, props) => {
137
136
  apiRef.current.forceUpdate();
138
137
  };
139
138
  const handleUpdateAutoPageSize = React.useCallback(() => {
140
- const dimensions = apiRef.current.getRootDimensions();
141
- if (!props.autoPageSize || !dimensions) {
139
+ if (!props.autoPageSize) {
142
140
  return;
143
141
  }
144
- const pinnedRowsHeight = calculatePinnedRowsHeight(apiRef);
145
- const maximumPageSizeWithoutScrollBar = Math.floor((dimensions.viewportInnerSize.height - pinnedRowsHeight.top - pinnedRowsHeight.bottom) / rowHeight);
142
+ const dimensions = apiRef.current.getRootDimensions();
143
+ const maximumPageSizeWithoutScrollBar = Math.floor(dimensions.viewportInnerSize.height / rowHeight);
146
144
  apiRef.current.setPageSize(maximumPageSizeWithoutScrollBar);
147
145
  }, [apiRef, props.autoPageSize, rowHeight]);
148
146
  useGridApiEventHandler(apiRef, 'viewportInnerSizeChange', handleUpdateAutoPageSize);
@@ -33,11 +33,11 @@ export const gridPinnedRowsSelector = createSelectorMemoized(gridAdditionalRowGr
33
33
  bottom: rawPinnedRows?.bottom?.map(rowEntry => ({
34
34
  id: rowEntry.id,
35
35
  model: rowEntry.model ?? {}
36
- })),
36
+ })) ?? [],
37
37
  top: rawPinnedRows?.top?.map(rowEntry => ({
38
38
  id: rowEntry.id,
39
39
  model: rowEntry.model ?? {}
40
- }))
40
+ })) ?? []
41
41
  };
42
42
  });
43
43
 
@@ -1,6 +1,6 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import { gridPinnedRowsSelector } from './gridRowsSelector';
3
- import { gridDensityFactorSelector } from '../density/densitySelector';
3
+ import { gridDimensionsSelector } from '../dimensions';
4
4
  export const GRID_ROOT_GROUP_ID = `auto-generated-group-node-root`;
5
5
  export const GRID_ID_AUTOGENERATED = Symbol('mui.id_autogenerated');
6
6
  export const buildRootGroup = () => ({
@@ -131,7 +131,10 @@ export const getTreeNodeDescendants = (tree, parentId, skipAutoGeneratedRows) =>
131
131
  if (!skipAutoGeneratedRows || !isAutoGeneratedRow(tree[child])) {
132
132
  validDescendants.push(child);
133
133
  }
134
- validDescendants.push(...getTreeNodeDescendants(tree, child, skipAutoGeneratedRows));
134
+ const childDescendants = getTreeNodeDescendants(tree, child, skipAutoGeneratedRows);
135
+ for (let j = 0; j < childDescendants.length; j += 1) {
136
+ validDescendants.push(childDescendants[j]);
137
+ }
135
138
  }
136
139
  if (!skipAutoGeneratedRows && node.footerId != null) {
137
140
  validDescendants.push(node.footerId);
@@ -275,7 +278,7 @@ export function calculatePinnedRowsHeight(apiRef) {
275
278
  bottom: bottomPinnedRowsHeight
276
279
  };
277
280
  }
278
- export function getMinimalContentHeight(apiRef, rowHeight) {
279
- const densityFactor = gridDensityFactorSelector(apiRef);
280
- return `var(--DataGrid-overlayHeight, ${2 * Math.floor(rowHeight * densityFactor)}px)`;
281
+ export function getMinimalContentHeight(apiRef) {
282
+ const dimensions = gridDimensionsSelector(apiRef.current.state);
283
+ return `var(--DataGrid-overlayHeight, ${2 * dimensions.rowHeight}px)`;
281
284
  }