@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,137 +1,95 @@
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
- var _apiRef$current$rootE;
48
- const rootElement = (_apiRef$current$rootE = apiRef.current.rootElementRef) == null ? void 0 : _apiRef$current$rootE.current;
49
- const columnsTotalWidth = gridColumnsTotalWidthSelector(apiRef);
50
- const pinnedRowsHeight = calculatePinnedRowsHeight(apiRef);
51
- if (!rootDimensionsRef.current) {
52
- return;
53
- }
54
- let scrollBarSize;
55
- if (props.scrollbarSize != null) {
56
- scrollBarSize = props.scrollbarSize;
57
- } else if (!columnsTotalWidth || !rootElement) {
58
- scrollBarSize = 0;
59
- } else {
60
- const doc = ownerDocument(rootElement);
61
- const scrollDiv = doc.createElement('div');
62
- scrollDiv.style.width = '99px';
63
- scrollDiv.style.height = '99px';
64
- scrollDiv.style.position = 'absolute';
65
- scrollDiv.style.overflow = 'scroll';
66
- scrollDiv.className = 'scrollDiv';
67
- rootElement.appendChild(scrollDiv);
68
- scrollBarSize = scrollDiv.offsetWidth - scrollDiv.clientWidth;
69
- rootElement.removeChild(scrollDiv);
70
- }
71
- let viewportOuterSize;
72
- let hasScrollX;
73
- let hasScrollY;
74
- if (props.autoHeight) {
75
- hasScrollY = false;
76
- hasScrollX = Math.round(columnsTotalWidth) > Math.round(rootDimensionsRef.current.width);
77
- viewportOuterSize = {
78
- width: rootDimensionsRef.current.width,
79
- height: rowsMeta.currentPageTotalHeight + (hasScrollX ? scrollBarSize : 0)
80
- };
81
- } else {
82
- viewportOuterSize = {
83
- width: rootDimensionsRef.current.width,
84
- height: Math.max(rootDimensionsRef.current.height - totalHeaderHeight, 0)
85
- };
86
- const scrollInformation = hasScroll({
87
- content: {
88
- width: Math.round(columnsTotalWidth),
89
- height: rowsMeta.currentPageTotalHeight
90
- },
91
- container: {
92
- width: Math.round(viewportOuterSize.width),
93
- height: viewportOuterSize.height - pinnedRowsHeight.top - pinnedRowsHeight.bottom
94
- },
95
- scrollBarSize
96
- });
97
- hasScrollY = scrollInformation.hasScrollY;
98
- hasScrollX = scrollInformation.hasScrollX;
99
- }
100
- const viewportInnerSize = {
101
- width: viewportOuterSize.width - (hasScrollY ? scrollBarSize : 0),
102
- height: viewportOuterSize.height - (hasScrollX ? scrollBarSize : 0)
103
- };
104
- const newFullDimensions = {
105
- viewportOuterSize,
106
- viewportInnerSize,
107
- hasScrollX,
108
- hasScrollY,
109
- scrollBarSize
110
- };
111
- const prevDimensions = fullDimensionsRef.current;
112
- fullDimensionsRef.current = newFullDimensions;
113
- if (newFullDimensions.viewportInnerSize.width !== (prevDimensions == null ? void 0 : prevDimensions.viewportInnerSize.width) || newFullDimensions.viewportInnerSize.height !== (prevDimensions == null ? void 0 : prevDimensions.viewportInnerSize.height)) {
114
- apiRef.current.publishEvent('viewportInnerSizeChange', newFullDimensions.viewportInnerSize);
115
- }
116
- }, [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);
117
61
  const [savedSize, setSavedSize] = React.useState();
118
62
  const debouncedSetSavedSize = React.useMemo(() => debounce(setSavedSize, 60), []);
119
63
  const previousSize = React.useRef();
120
- useEnhancedEffect(() => {
121
- if (savedSize) {
122
- updateGridDimensionsRef();
123
- apiRef.current.publishEvent('debouncedResize', rootDimensionsRef.current);
124
- }
125
- }, [apiRef, savedSize, updateGridDimensionsRef]);
126
-
127
- // 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
+ });
128
70
  const resize = React.useCallback(() => {
129
- apiRef.current.computeSizeAndPublishResizeEvent();
71
+ var _previousSize$current, _previousSize$current2;
72
+ const element = apiRef.current.mainElementRef.current;
73
+ if (!element) {
74
+ return;
75
+ }
76
+ const computedStyle = ownerWindow(element).getComputedStyle(element);
77
+ const height = parseFloat(computedStyle.height) || 0;
78
+ const width = parseFloat(computedStyle.width) || 0;
79
+ const hasHeightChanged = height !== ((_previousSize$current = previousSize.current) == null ? void 0 : _previousSize$current.height);
80
+ const hasWidthChanged = width !== ((_previousSize$current2 = previousSize.current) == null ? void 0 : _previousSize$current2.width);
81
+ if (!previousSize.current || hasHeightChanged || hasWidthChanged) {
82
+ const size = {
83
+ width,
84
+ height
85
+ };
86
+ apiRef.current.publishEvent('resize', size);
87
+ previousSize.current = size;
88
+ }
130
89
  }, [apiRef]);
131
- const getRootDimensions = React.useCallback(() => fullDimensionsRef.current, []);
132
90
  const getViewportPageSize = React.useCallback(() => {
133
- const dimensions = apiRef.current.getRootDimensions();
134
- if (!dimensions) {
91
+ const dimensions = gridDimensionsSelector(apiRef.current.state);
92
+ if (!dimensions.isReady) {
135
93
  return 0;
136
94
  }
137
95
  const currentPage = getVisibleRows(apiRef, {
@@ -142,45 +100,136 @@ export function useGridDimensions(apiRef, props) {
142
100
  // TODO: Use a combination of scrollTop, dimensions.viewportInnerSize.height and rowsMeta.possitions
143
101
  // to find out the maximum number of rows that can fit in the visible part of the grid
144
102
  if (props.getRowHeight) {
145
- const renderContext = apiRef.current.getRenderContext();
103
+ const renderContext = gridRenderContextSelector(apiRef);
146
104
  const viewportPageSize = renderContext.lastRowIndex - renderContext.firstRowIndex;
147
105
  return Math.min(viewportPageSize - 1, currentPage.rows.length);
148
106
  }
149
107
  const maximumPageSizeWithoutScrollBar = Math.floor(dimensions.viewportInnerSize.height / rowHeight);
150
108
  return Math.min(maximumPageSizeWithoutScrollBar, currentPage.rows.length);
151
109
  }, [apiRef, props.pagination, props.paginationMode, props.getRowHeight, rowHeight]);
152
- const computeSizeAndPublishResizeEvent = React.useCallback(() => {
153
- var _apiRef$current$mainE, _previousSize$current, _previousSize$current2;
154
- const mainEl = (_apiRef$current$mainE = apiRef.current.mainElementRef) == null ? void 0 : _apiRef$current$mainE.current;
155
- if (!mainEl) {
156
- return;
157
- }
158
- const win = ownerWindow(mainEl);
159
- const computedStyle = win.getComputedStyle(mainEl);
160
- const height = parseFloat(computedStyle.height) || 0;
161
- const width = parseFloat(computedStyle.width) || 0;
162
- const hasHeightChanged = height !== ((_previousSize$current = previousSize.current) == null ? void 0 : _previousSize$current.height);
163
- const hasWidthChanged = width !== ((_previousSize$current2 = previousSize.current) == null ? void 0 : _previousSize$current2.width);
164
- if (!previousSize.current || hasHeightChanged || hasWidthChanged) {
165
- const size = {
166
- width,
167
- height
110
+ const updateDimensions = React.useCallback(() => {
111
+ var _apiRef$current$updat, _apiRef$current;
112
+ const rootElement = apiRef.current.rootElementRef.current;
113
+ const pinnedRowsHeight = calculatePinnedRowsHeight(apiRef);
114
+ const scrollbarSize = measureScrollbarSize(rootElement, columnsTotalWidth, props.scrollbarSize);
115
+ const topContainerHeight = headersTotalHeight + pinnedRowsHeight.top;
116
+ const bottomContainerHeight = pinnedRowsHeight.bottom;
117
+ const contentSize = {
118
+ width: columnsTotalWidth,
119
+ height: rowsMeta.currentPageTotalHeight
120
+ };
121
+ let viewportOuterSize;
122
+ let viewportInnerSize;
123
+ let hasScrollX = false;
124
+ let hasScrollY = false;
125
+ if (props.autoHeight) {
126
+ hasScrollY = false;
127
+ hasScrollX = Math.round(columnsTotalWidth) > Math.round(rootDimensionsRef.current.width);
128
+ viewportOuterSize = {
129
+ width: rootDimensionsRef.current.width,
130
+ height: topContainerHeight + bottomContainerHeight + contentSize.height
168
131
  };
169
- apiRef.current.publishEvent('resize', size);
170
- previousSize.current = size;
132
+ viewportInnerSize = {
133
+ width: Math.max(0, viewportOuterSize.width - (hasScrollY ? scrollbarSize : 0)),
134
+ height: Math.max(0, viewportOuterSize.height - (hasScrollX ? scrollbarSize : 0))
135
+ };
136
+ } else {
137
+ viewportOuterSize = {
138
+ width: rootDimensionsRef.current.width,
139
+ height: rootDimensionsRef.current.height
140
+ };
141
+ viewportInnerSize = {
142
+ width: Math.max(0, viewportOuterSize.width - leftPinnedWidth - rightPinnedWidth),
143
+ height: Math.max(0, viewportOuterSize.height - topContainerHeight - bottomContainerHeight)
144
+ };
145
+ const content = contentSize;
146
+ const container = viewportInnerSize;
147
+ const hasScrollXIfNoYScrollBar = content.width > container.width;
148
+ const hasScrollYIfNoXScrollBar = content.height > container.height;
149
+ if (hasScrollXIfNoYScrollBar || hasScrollYIfNoXScrollBar) {
150
+ hasScrollY = hasScrollYIfNoXScrollBar;
151
+ hasScrollX = content.width + (hasScrollY ? scrollbarSize : 0) > container.width;
152
+
153
+ // We recalculate the scroll y to consider the size of the x scrollbar.
154
+ if (hasScrollX) {
155
+ hasScrollY = content.height + scrollbarSize > container.height;
156
+ }
157
+ }
158
+ if (hasScrollY) {
159
+ viewportInnerSize.width -= scrollbarSize;
160
+ }
161
+ if (hasScrollX) {
162
+ viewportInnerSize.height -= scrollbarSize;
163
+ }
171
164
  }
172
- }, [apiRef]);
173
- const dimensionsApi = {
165
+ const rowWidth = Math.max(viewportOuterSize.width, columnsTotalWidth + (hasScrollY ? scrollbarSize : 0));
166
+ const minimumSize = {
167
+ width: contentSize.width,
168
+ height: topContainerHeight + contentSize.height + bottomContainerHeight
169
+ };
170
+ const newDimensions = {
171
+ isReady: true,
172
+ root: rootDimensionsRef.current,
173
+ viewportOuterSize,
174
+ viewportInnerSize,
175
+ contentSize,
176
+ minimumSize,
177
+ hasScrollX,
178
+ hasScrollY,
179
+ scrollbarSize,
180
+ headerHeight,
181
+ rowWidth,
182
+ rowHeight,
183
+ columnsTotalWidth,
184
+ leftPinnedWidth,
185
+ rightPinnedWidth,
186
+ headersTotalHeight,
187
+ topContainerHeight,
188
+ bottomContainerHeight
189
+ };
190
+ const prevDimensions = apiRef.current.state.dimensions;
191
+ setDimensions(newDimensions);
192
+ if (newDimensions.viewportInnerSize.width !== prevDimensions.viewportInnerSize.width || newDimensions.viewportInnerSize.height !== prevDimensions.viewportInnerSize.height) {
193
+ apiRef.current.publishEvent('viewportInnerSizeChange', newDimensions.viewportInnerSize);
194
+ }
195
+ (_apiRef$current$updat = (_apiRef$current = apiRef.current).updateRenderContext) == null || _apiRef$current$updat.call(_apiRef$current);
196
+ }, [apiRef, setDimensions, props.scrollbarSize, props.autoHeight, rowsMeta.currentPageTotalHeight, rowHeight, headerHeight, columnsTotalWidth, headersTotalHeight, leftPinnedWidth, rightPinnedWidth]);
197
+ const apiPublic = {
174
198
  resize,
175
199
  getRootDimensions
176
200
  };
177
- const dimensionsPrivateApi = {
178
- getViewportPageSize,
179
- updateGridDimensionsRef,
180
- computeSizeAndPublishResizeEvent
201
+ const apiPrivate = {
202
+ updateDimensions,
203
+ getViewportPageSize
181
204
  };
182
- useGridApiMethod(apiRef, dimensionsApi, 'public');
183
- useGridApiMethod(apiRef, dimensionsPrivateApi, 'private');
205
+ useGridApiMethod(apiRef, apiPublic, 'public');
206
+ useGridApiMethod(apiRef, apiPrivate, 'private');
207
+ useEnhancedEffect(() => {
208
+ if (savedSize) {
209
+ updateDimensions();
210
+ apiRef.current.publishEvent('debouncedResize', rootDimensionsRef.current);
211
+ }
212
+ }, [apiRef, savedSize, updateDimensions]);
213
+ const root = apiRef.current.rootElementRef.current;
214
+ const dimensions = apiRef.current.state.dimensions;
215
+ useEnhancedEffect(() => {
216
+ if (!root) {
217
+ return;
218
+ }
219
+ const set = (k, v) => root.style.setProperty(k, v);
220
+ set('--DataGrid-width', `${dimensions.viewportOuterSize.width}px`);
221
+ set('--DataGrid-hasScrollX', `${Number(dimensions.hasScrollX)}`);
222
+ set('--DataGrid-hasScrollY', `${Number(dimensions.hasScrollY)}`);
223
+ set('--DataGrid-scrollbarSize', `${dimensions.scrollbarSize}px`);
224
+ set('--DataGrid-rowWidth', `${dimensions.rowWidth}px`);
225
+ set('--DataGrid-columnsTotalWidth', `${dimensions.columnsTotalWidth}px`);
226
+ set('--DataGrid-leftPinnedWidth', `${dimensions.leftPinnedWidth}px`);
227
+ set('--DataGrid-rightPinnedWidth', `${dimensions.rightPinnedWidth}px`);
228
+ set('--DataGrid-headerHeight', `${dimensions.headerHeight}px`);
229
+ set('--DataGrid-headersTotalHeight', `${dimensions.headersTotalHeight}px`);
230
+ set('--DataGrid-topContainerHeight', `${dimensions.topContainerHeight}px`);
231
+ set('--DataGrid-bottomContainerHeight', `${dimensions.bottomContainerHeight}px`);
232
+ }, [root, dimensions]);
184
233
  const isFirstSizing = React.useRef(true);
185
234
  const handleResize = React.useCallback(size => {
186
235
  rootDimensionsRef.current = size;
@@ -195,12 +244,6 @@ export function useGridDimensions(apiRef, props) {
195
244
  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'));
196
245
  errorShown.current = true;
197
246
  }
198
- if (isTestEnvironment) {
199
- // We don't need to debounce the resize for tests.
200
- setSavedSize(size);
201
- isFirstSizing.current = false;
202
- return;
203
- }
204
247
  if (isFirstSizing.current) {
205
248
  // We want to initialize the grid dimensions as soon as possible to avoid flickering
206
249
  setSavedSize(size);
@@ -209,10 +252,35 @@ export function useGridDimensions(apiRef, props) {
209
252
  }
210
253
  debouncedSetSavedSize(size);
211
254
  }, [props.autoHeight, debouncedSetSavedSize, logger]);
212
- useEnhancedEffect(() => updateGridDimensionsRef(), [updateGridDimensionsRef]);
213
- useGridApiOptionHandler(apiRef, 'sortedRowsSet', updateGridDimensionsRef);
214
- useGridApiOptionHandler(apiRef, 'paginationModelChange', updateGridDimensionsRef);
215
- useGridApiOptionHandler(apiRef, 'columnsChange', updateGridDimensionsRef);
255
+ useEnhancedEffect(updateDimensions, [updateDimensions]);
256
+ useGridApiOptionHandler(apiRef, 'sortedRowsSet', updateDimensions);
257
+ useGridApiOptionHandler(apiRef, 'paginationModelChange', updateDimensions);
258
+ useGridApiOptionHandler(apiRef, 'columnsChange', updateDimensions);
216
259
  useGridApiEventHandler(apiRef, 'resize', handleResize);
217
260
  useGridApiOptionHandler(apiRef, 'debouncedResize', props.onResize);
261
+ }
262
+ function measureScrollbarSize(rootElement, columnsTotalWidth, scrollbarSize) {
263
+ if (scrollbarSize !== undefined) {
264
+ return scrollbarSize;
265
+ }
266
+ if (rootElement === null || columnsTotalWidth === 0) {
267
+ return 0;
268
+ }
269
+ const doc = ownerDocument(rootElement);
270
+ const scrollDiv = doc.createElement('div');
271
+ scrollDiv.style.width = '99px';
272
+ scrollDiv.style.height = '99px';
273
+ scrollDiv.style.position = 'absolute';
274
+ scrollDiv.style.overflow = 'scroll';
275
+ scrollDiv.className = 'scrollDiv';
276
+ rootElement.appendChild(scrollDiv);
277
+ const size = scrollDiv.offsetWidth - scrollDiv.clientWidth;
278
+ rootElement.removeChild(scrollDiv);
279
+ return size;
280
+ }
281
+
282
+ // Get rid of floating point imprecision errors
283
+ // https://github.com/mui/mui-x/issues/9550#issuecomment-1619020477
284
+ function roundToDecimalPlaces(value, decimals) {
285
+ return Math.round(value * 10 ** decimals) / 10 ** decimals;
218
286
  }
@@ -106,10 +106,10 @@ export function buildCSV(options) {
106
106
  const filteredColumns = columns.filter(column => column.field !== GRID_CHECKBOX_SELECTION_COL_DEF.field);
107
107
  const headerRows = [];
108
108
  if (includeColumnGroupsHeaders) {
109
- const columnGroupLookup = apiRef.current.unstable_getAllGroupDetails();
109
+ const columnGroupLookup = apiRef.current.getAllGroupDetails();
110
110
  let maxColumnGroupsDepth = 0;
111
111
  const columnGroupPathsLookup = filteredColumns.reduce((acc, column) => {
112
- const columnGroupPath = apiRef.current.unstable_getColumnGroupPath(column.field);
112
+ const columnGroupPath = apiRef.current.getColumnGroupPath(column.field);
113
113
  acc[column.field] = columnGroupPath;
114
114
  maxColumnGroupsDepth = Math.max(maxColumnGroupsDepth, columnGroupPath.length);
115
115
  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';
@@ -315,8 +315,8 @@ export const useGridFilter = (apiRef, props) => {
315
315
  const handleColumnsChange = React.useCallback(() => {
316
316
  logger.debug('onColUpdated - GridColumns changed, applying filters');
317
317
  const filterModel = gridFilterModelSelector(apiRef);
318
- const filterableColumnsLookup = gridFilterableColumnLookupSelector(apiRef);
319
- const newFilterItems = filterModel.items.filter(item => item.field && filterableColumnsLookup[item.field]);
318
+ const columnsLookup = gridColumnLookupSelector(apiRef);
319
+ const newFilterItems = filterModel.items.filter(item => item.field && columnsLookup[item.field]);
320
320
  if (newFilterItems.length < filterModel.items.length) {
321
321
  apiRef.current.setFilterModel(_extends({}, filterModel, {
322
322
  items: newFilterItems
@@ -4,9 +4,9 @@ export declare const gridFocusStateSelector: (state: GridStateCommunity) => Grid
4
4
  export declare const gridFocusCellSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, import("../../..").GridCellCoordinates | null>;
5
5
  export declare const gridFocusColumnHeaderSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, import("./gridFocusState").GridColumnIdentifier | null>;
6
6
  export declare const gridFocusColumnHeaderFilterSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, import("./gridFocusState").GridColumnIdentifier | null>;
7
- export declare const unstable_gridFocusColumnGroupHeaderSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, import("./gridFocusState").GridColumnGroupIdentifier | null>;
7
+ export declare const gridFocusColumnGroupHeaderSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, import("./gridFocusState").GridColumnGroupIdentifier | null>;
8
8
  export declare const gridTabIndexStateSelector: (state: GridStateCommunity) => GridTabIndexState;
9
9
  export declare const gridTabIndexCellSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, import("../../..").GridCellCoordinates | null>;
10
10
  export declare const gridTabIndexColumnHeaderSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, import("./gridFocusState").GridColumnIdentifier | null>;
11
11
  export declare const gridTabIndexColumnHeaderFilterSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, import("./gridFocusState").GridColumnIdentifier | null>;
12
- export declare const unstable_gridTabIndexColumnGroupHeaderSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, import("./gridFocusState").GridColumnGroupIdentifier | null>;
12
+ export declare const gridTabIndexColumnGroupHeaderSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, import("./gridFocusState").GridColumnGroupIdentifier | null>;
@@ -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';
@@ -138,10 +138,6 @@ export const useGridKeyboardNavigation = (apiRef, props) => {
138
138
  // There is one exception for the checkBoxHeader
139
139
  return;
140
140
  }
141
- const dimensions = apiRef.current.getRootDimensions();
142
- if (!dimensions) {
143
- return;
144
- }
145
141
  const viewportPageSize = apiRef.current.getViewportPageSize();
146
142
  const colIndexBefore = params.field ? apiRef.current.getColumnIndex(params.field) : 0;
147
143
  const firstRowIndexInPage = currentPageRows.length > 0 ? 0 : null;
@@ -234,10 +230,6 @@ export const useGridKeyboardNavigation = (apiRef, props) => {
234
230
  }
235
231
  }, [apiRef, currentPageRows.length, headerFilteringEnabled, goToHeaderFilter, goToCell, getRowIdFromIndex, theme.direction, goToHeader, goToGroupHeader]);
236
232
  const handleHeaderFilterKeyDown = React.useCallback((params, event) => {
237
- const dimensions = apiRef.current.getRootDimensions();
238
- if (!dimensions) {
239
- return;
240
- }
241
233
  const isEditing = gridHeaderFilteringEditFieldSelector(apiRef) === params.field;
242
234
  const isHeaderMenuOpen = gridHeaderFilteringMenuSelector(apiRef) === params.field;
243
235
  if (isEditing || isHeaderMenuOpen || !isNavigationKey(event.key)) {
@@ -324,11 +316,7 @@ export const useGridKeyboardNavigation = (apiRef, props) => {
324
316
  }
325
317
  }, [apiRef, currentPageRows.length, goToHeaderFilter, theme.direction, goToHeader, goToCell, getRowIdFromIndex]);
326
318
  const handleColumnGroupHeaderKeyDown = React.useCallback((params, event) => {
327
- const dimensions = apiRef.current.getRootDimensions();
328
- if (!dimensions) {
329
- return;
330
- }
331
- const focusedColumnGroup = unstable_gridFocusColumnGroupHeaderSelector(apiRef);
319
+ const focusedColumnGroup = gridFocusColumnGroupHeaderSelector(apiRef);
332
320
  if (focusedColumnGroup === null) {
333
321
  return;
334
322
  }
@@ -431,8 +419,7 @@ export const useGridKeyboardNavigation = (apiRef, props) => {
431
419
  if (!canUpdateFocus) {
432
420
  return;
433
421
  }
434
- const dimensions = apiRef.current.getRootDimensions();
435
- if (currentPageRows.length === 0 || !dimensions) {
422
+ if (currentPageRows.length === 0) {
436
423
  return;
437
424
  }
438
425
  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
  var _props$paginationMode, _props$initialState;
@@ -144,12 +143,11 @@ export const useGridPagination = (apiRef, props) => {
144
143
  apiRef.current.forceUpdate();
145
144
  };
146
145
  const handleUpdateAutoPageSize = React.useCallback(() => {
147
- const dimensions = apiRef.current.getRootDimensions();
148
- if (!props.autoPageSize || !dimensions) {
146
+ if (!props.autoPageSize) {
149
147
  return;
150
148
  }
151
- const pinnedRowsHeight = calculatePinnedRowsHeight(apiRef);
152
- const maximumPageSizeWithoutScrollBar = Math.floor((dimensions.viewportInnerSize.height - pinnedRowsHeight.top - pinnedRowsHeight.bottom) / rowHeight);
149
+ const dimensions = apiRef.current.getRootDimensions();
150
+ const maximumPageSizeWithoutScrollBar = Math.floor(dimensions.viewportInnerSize.height / rowHeight);
153
151
  apiRef.current.setPageSize(maximumPageSizeWithoutScrollBar);
154
152
  }, [apiRef, props.autoPageSize, rowHeight]);
155
153
  useGridApiEventHandler(apiRef, 'viewportInnerSizeChange', handleUpdateAutoPageSize);
@@ -108,3 +108,4 @@ export interface GridPinnedRowsState {
108
108
  top?: GridRowEntry[];
109
109
  bottom?: GridRowEntry[];
110
110
  }
111
+ export type GridPinnedRowsPosition = keyof GridPinnedRowsState;
@@ -22,11 +22,11 @@ export declare const gridPinnedRowsSelector: import("../../../utils/createSelect
22
22
  bottom: {
23
23
  id: import("../../..").GridRowId;
24
24
  model: import("../../..").GridValidRowModel;
25
- }[] | undefined;
25
+ }[];
26
26
  top: {
27
27
  id: import("../../..").GridRowId;
28
28
  model: import("../../..").GridValidRowModel;
29
- }[] | undefined;
29
+ }[];
30
30
  }>;
31
31
  /**
32
32
  * @ignore - do not document.
@@ -28,23 +28,23 @@ export const gridAdditionalRowGroupsSelector = createSelector(gridRowsStateSelec
28
28
  * @ignore - do not document.
29
29
  */
30
30
  export const gridPinnedRowsSelector = createSelectorMemoized(gridAdditionalRowGroupsSelector, additionalRowGroups => {
31
- var _rawPinnedRows$bottom, _rawPinnedRows$top;
31
+ var _rawPinnedRows$bottom, _rawPinnedRows$bottom2, _rawPinnedRows$top$ma, _rawPinnedRows$top;
32
32
  const rawPinnedRows = additionalRowGroups == null ? void 0 : additionalRowGroups.pinnedRows;
33
33
  return {
34
- bottom: rawPinnedRows == null || (_rawPinnedRows$bottom = rawPinnedRows.bottom) == null ? void 0 : _rawPinnedRows$bottom.map(rowEntry => {
34
+ bottom: (_rawPinnedRows$bottom = rawPinnedRows == null || (_rawPinnedRows$bottom2 = rawPinnedRows.bottom) == null ? void 0 : _rawPinnedRows$bottom2.map(rowEntry => {
35
35
  var _rowEntry$model;
36
36
  return {
37
37
  id: rowEntry.id,
38
38
  model: (_rowEntry$model = rowEntry.model) != null ? _rowEntry$model : {}
39
39
  };
40
- }),
41
- top: rawPinnedRows == null || (_rawPinnedRows$top = rawPinnedRows.top) == null ? void 0 : _rawPinnedRows$top.map(rowEntry => {
40
+ })) != null ? _rawPinnedRows$bottom : [],
41
+ top: (_rawPinnedRows$top$ma = rawPinnedRows == null || (_rawPinnedRows$top = rawPinnedRows.top) == null ? void 0 : _rawPinnedRows$top.map(rowEntry => {
42
42
  var _rowEntry$model2;
43
43
  return {
44
44
  id: rowEntry.id,
45
45
  model: (_rowEntry$model2 = rowEntry.model) != null ? _rowEntry$model2 : {}
46
46
  };
47
- })
47
+ })) != null ? _rawPinnedRows$top$ma : []
48
48
  };
49
49
  });
50
50