@mui/x-data-grid 7.0.0-alpha.8 → 7.0.0-alpha.9

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 (410) hide show
  1. package/CHANGELOG.md +379 -2
  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 +1 -1
  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 +260 -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/containers/GridRoot.js +18 -15
  31. package/components/containers/GridRootStyles.js +307 -204
  32. package/components/menu/columnMenu/menuItems/GridColumnMenuSortItem.js +1 -1
  33. package/components/panel/GridPanel.js +3 -4
  34. package/components/panel/filterPanel/GridFilterForm.d.ts +6 -4
  35. package/components/panel/filterPanel/GridFilterForm.js +31 -14
  36. package/components/panel/filterPanel/GridFilterPanel.js +46 -20
  37. package/components/toolbar/GridToolbarColumnsButton.d.ts +13 -1
  38. package/components/toolbar/GridToolbarColumnsButton.js +40 -22
  39. package/components/toolbar/GridToolbarDensitySelector.d.ts +13 -1
  40. package/components/toolbar/GridToolbarDensitySelector.js +40 -22
  41. package/components/toolbar/GridToolbarExport.d.ts +10 -1
  42. package/components/toolbar/GridToolbarExport.js +6 -1
  43. package/components/toolbar/GridToolbarExportContainer.d.ts +15 -1
  44. package/components/toolbar/GridToolbarExportContainer.js +41 -23
  45. package/components/toolbar/GridToolbarFilterButton.d.ts +5 -4
  46. package/components/toolbar/GridToolbarFilterButton.js +6 -10
  47. package/components/virtualization/GridBottomContainer.d.ts +2 -0
  48. package/components/virtualization/GridBottomContainer.js +25 -0
  49. package/components/{containers → virtualization}/GridMainContainer.d.ts +2 -0
  50. package/components/virtualization/GridMainContainer.js +20 -0
  51. package/components/virtualization/GridTopContainer.d.ts +2 -0
  52. package/components/virtualization/GridTopContainer.js +35 -0
  53. package/components/virtualization/GridVirtualScrollbar.d.ts +7 -0
  54. package/components/virtualization/GridVirtualScrollbar.js +131 -0
  55. package/components/virtualization/GridVirtualScroller.d.ts +4 -4
  56. package/components/virtualization/GridVirtualScroller.js +69 -16
  57. package/components/virtualization/GridVirtualScrollerFiller.d.ts +4 -0
  58. package/components/virtualization/GridVirtualScrollerFiller.js +71 -0
  59. package/components/virtualization/GridVirtualScrollerRenderZone.js +2 -1
  60. package/constants/defaultGridSlotsComponents.js +6 -2
  61. package/constants/gridClasses.d.ts +60 -8
  62. package/constants/gridClasses.js +1 -1
  63. package/hooks/core/gridCoreSelector.d.ts +6 -0
  64. package/hooks/core/gridCoreSelector.js +5 -0
  65. package/hooks/core/useGridInitialization.js +4 -0
  66. package/hooks/core/useGridRefs.d.ts +3 -0
  67. package/hooks/core/useGridRefs.js +13 -0
  68. package/hooks/core/useGridTheme.d.ts +3 -0
  69. package/hooks/core/useGridTheme.js +19 -0
  70. package/hooks/features/columnGrouping/useGridColumnGrouping.d.ts +1 -1
  71. package/hooks/features/columnGrouping/useGridColumnGrouping.js +7 -14
  72. package/hooks/features/columnHeaders/useGridColumnHeaders.d.ts +13 -18
  73. package/hooks/features/columnHeaders/useGridColumnHeaders.js +68 -162
  74. package/hooks/features/columnMenu/useGridColumnMenu.js +28 -23
  75. package/hooks/features/columns/gridColumnsInterfaces.d.ts +17 -0
  76. package/hooks/features/columns/gridColumnsInterfaces.js +9 -1
  77. package/hooks/features/columns/gridColumnsSelector.d.ts +14 -1
  78. package/hooks/features/columns/gridColumnsSelector.js +52 -0
  79. package/hooks/features/columns/gridColumnsUtils.d.ts +1 -5
  80. package/hooks/features/columns/gridColumnsUtils.js +10 -12
  81. package/hooks/features/columns/index.d.ts +2 -2
  82. package/hooks/features/columns/index.js +2 -1
  83. package/hooks/features/columns/useGridColumnSpanning.js +62 -61
  84. package/hooks/features/columns/useGridColumns.js +20 -23
  85. package/hooks/features/dimensions/gridDimensionsApi.d.ts +60 -11
  86. package/hooks/features/dimensions/gridDimensionsSelectors.d.ts +2 -0
  87. package/hooks/features/dimensions/gridDimensionsSelectors.js +1 -0
  88. package/hooks/features/dimensions/index.d.ts +2 -0
  89. package/hooks/features/dimensions/index.js +1 -0
  90. package/hooks/features/dimensions/useGridDimensions.d.ts +7 -1
  91. package/hooks/features/dimensions/useGridDimensions.js +216 -148
  92. package/hooks/features/export/serializers/csvSerializer.js +2 -2
  93. package/hooks/features/filter/useGridFilter.js +3 -3
  94. package/hooks/features/focus/gridFocusStateSelector.d.ts +2 -2
  95. package/hooks/features/focus/gridFocusStateSelector.js +2 -6
  96. package/hooks/features/focus/useGridFocus.js +3 -3
  97. package/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +3 -16
  98. package/hooks/features/pagination/useGridPagination.js +3 -5
  99. package/hooks/features/rows/gridRowsInterfaces.d.ts +1 -0
  100. package/hooks/features/rows/gridRowsSelector.d.ts +2 -2
  101. package/hooks/features/rows/gridRowsSelector.js +5 -5
  102. package/hooks/features/rows/gridRowsUtils.d.ts +1 -1
  103. package/hooks/features/rows/gridRowsUtils.js +4 -4
  104. package/hooks/features/rows/useGridRowsMeta.js +7 -4
  105. package/hooks/features/scroll/useGridScroll.js +8 -10
  106. package/hooks/features/sorting/gridSortingUtils.js +1 -1
  107. package/hooks/features/sorting/useGridSorting.d.ts +1 -1
  108. package/hooks/features/sorting/useGridSorting.js +15 -10
  109. package/hooks/features/virtualization/gridVirtualizationSelectors.d.ts +14 -0
  110. package/hooks/features/virtualization/gridVirtualizationSelectors.js +22 -2
  111. package/hooks/features/virtualization/useGridVirtualScroller.d.ts +27 -42
  112. package/hooks/features/virtualization/useGridVirtualScroller.js +441 -438
  113. package/hooks/features/virtualization/useGridVirtualization.d.ts +8 -0
  114. package/hooks/features/virtualization/useGridVirtualization.js +8 -1
  115. package/hooks/utils/index.d.ts +3 -0
  116. package/hooks/utils/index.js +4 -1
  117. package/hooks/utils/useGridAriaAttributes.js +1 -2
  118. package/hooks/utils/useGridNativeEventListener.js +4 -9
  119. package/hooks/utils/useResizeObserver.d.ts +2 -0
  120. package/hooks/utils/useResizeObserver.js +36 -0
  121. package/hooks/utils/useRunOnce.d.ts +5 -0
  122. package/hooks/utils/useRunOnce.js +18 -0
  123. package/index.js +1 -1
  124. package/internals/index.d.ts +12 -9
  125. package/internals/index.js +9 -7
  126. package/legacy/DataGrid/DataGrid.js +6 -6
  127. package/legacy/DataGrid/useDataGridComponent.js +2 -1
  128. package/legacy/DataGrid/useDataGridProps.js +1 -0
  129. package/legacy/components/GridColumnHeaders.js +3 -11
  130. package/legacy/components/GridDetailPanels.js +4 -0
  131. package/legacy/components/GridHeaders.js +53 -0
  132. package/legacy/components/GridPinnedRows.js +4 -0
  133. package/legacy/components/GridRow.js +258 -98
  134. package/legacy/components/GridScrollbarFillerCell.js +36 -0
  135. package/legacy/components/base/GridBody.js +2 -114
  136. package/legacy/components/base/GridOverlays.js +10 -25
  137. package/legacy/components/cell/GridCell.js +69 -377
  138. package/legacy/components/columnHeaders/GridBaseColumnHeaders.js +1 -6
  139. package/legacy/components/columnHeaders/GridColumnHeaderItem.js +7 -3
  140. package/legacy/components/columnHeaders/GridColumnHeaderSortIcon.js +5 -2
  141. package/legacy/components/columnHeaders/GridColumnHeadersInner.js +1 -2
  142. package/legacy/components/containers/GridRoot.js +18 -15
  143. package/legacy/components/containers/GridRootStyles.js +215 -137
  144. package/legacy/components/menu/columnMenu/menuItems/GridColumnMenuSortItem.js +1 -1
  145. package/legacy/components/panel/GridPanel.js +3 -4
  146. package/legacy/components/panel/filterPanel/GridFilterForm.js +30 -13
  147. package/legacy/components/panel/filterPanel/GridFilterPanel.js +49 -20
  148. package/legacy/components/toolbar/GridToolbarColumnsButton.js +40 -21
  149. package/legacy/components/toolbar/GridToolbarDensitySelector.js +40 -21
  150. package/legacy/components/toolbar/GridToolbarExport.js +6 -1
  151. package/legacy/components/toolbar/GridToolbarExportContainer.js +40 -21
  152. package/legacy/components/toolbar/GridToolbarFilterButton.js +6 -10
  153. package/legacy/components/virtualization/GridBottomContainer.js +25 -0
  154. package/legacy/components/virtualization/GridMainContainer.js +20 -0
  155. package/legacy/components/virtualization/GridTopContainer.js +35 -0
  156. package/legacy/components/virtualization/GridVirtualScrollbar.js +129 -0
  157. package/legacy/components/virtualization/GridVirtualScroller.js +67 -16
  158. package/legacy/components/virtualization/GridVirtualScrollerFiller.js +70 -0
  159. package/legacy/components/virtualization/GridVirtualScrollerRenderZone.js +2 -1
  160. package/legacy/constants/defaultGridSlotsComponents.js +6 -2
  161. package/legacy/constants/gridClasses.js +1 -1
  162. package/legacy/hooks/core/gridCoreSelector.js +7 -0
  163. package/legacy/hooks/core/useGridInitialization.js +4 -0
  164. package/legacy/hooks/core/useGridRefs.js +13 -0
  165. package/legacy/hooks/core/useGridTheme.js +21 -0
  166. package/legacy/hooks/features/columnGrouping/useGridColumnGrouping.js +7 -14
  167. package/legacy/hooks/features/columnHeaders/useGridColumnHeaders.js +69 -181
  168. package/legacy/hooks/features/columnMenu/useGridColumnMenu.js +28 -23
  169. package/legacy/hooks/features/columns/gridColumnsInterfaces.js +9 -1
  170. package/legacy/hooks/features/columns/gridColumnsSelector.js +62 -0
  171. package/legacy/hooks/features/columns/gridColumnsUtils.js +10 -16
  172. package/legacy/hooks/features/columns/index.js +2 -1
  173. package/legacy/hooks/features/columns/useGridColumnSpanning.js +60 -59
  174. package/legacy/hooks/features/columns/useGridColumns.js +22 -23
  175. package/legacy/hooks/features/dimensions/gridDimensionsSelectors.js +3 -0
  176. package/legacy/hooks/features/dimensions/index.js +1 -0
  177. package/legacy/hooks/features/dimensions/useGridDimensions.js +226 -151
  178. package/legacy/hooks/features/export/serializers/csvSerializer.js +2 -2
  179. package/legacy/hooks/features/filter/useGridFilter.js +3 -3
  180. package/legacy/hooks/features/focus/gridFocusStateSelector.js +2 -6
  181. package/legacy/hooks/features/focus/useGridFocus.js +3 -3
  182. package/legacy/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +3 -16
  183. package/legacy/hooks/features/pagination/useGridPagination.js +3 -5
  184. package/legacy/hooks/features/rows/gridRowsSelector.js +5 -5
  185. package/legacy/hooks/features/rows/gridRowsUtils.js +4 -4
  186. package/legacy/hooks/features/rows/useGridRowsMeta.js +7 -4
  187. package/legacy/hooks/features/scroll/useGridScroll.js +8 -10
  188. package/legacy/hooks/features/sorting/gridSortingUtils.js +1 -1
  189. package/legacy/hooks/features/sorting/useGridSorting.js +15 -10
  190. package/legacy/hooks/features/virtualization/gridVirtualizationSelectors.js +29 -1
  191. package/legacy/hooks/features/virtualization/useGridVirtualScroller.js +490 -483
  192. package/legacy/hooks/features/virtualization/useGridVirtualization.js +8 -1
  193. package/legacy/hooks/utils/index.js +4 -1
  194. package/legacy/hooks/utils/useGridAriaAttributes.js +1 -2
  195. package/legacy/hooks/utils/useGridNativeEventListener.js +4 -9
  196. package/legacy/hooks/utils/useResizeObserver.js +36 -0
  197. package/legacy/hooks/utils/useRunOnce.js +18 -0
  198. package/legacy/index.js +1 -1
  199. package/legacy/internals/index.js +9 -7
  200. package/legacy/locales/hrHR.js +161 -0
  201. package/legacy/locales/index.js +4 -1
  202. package/legacy/locales/ptPT.js +161 -0
  203. package/legacy/locales/zhHK.js +161 -0
  204. package/legacy/models/index.js +0 -1
  205. package/legacy/models/params/index.js +1 -2
  206. package/legacy/utils/utils.js +10 -1
  207. package/locales/hrHR.d.ts +1 -0
  208. package/locales/hrHR.js +149 -0
  209. package/locales/index.d.ts +3 -0
  210. package/locales/index.js +4 -1
  211. package/locales/ptPT.d.ts +1 -0
  212. package/locales/ptPT.js +149 -0
  213. package/locales/zhHK.d.ts +1 -0
  214. package/locales/zhHK.js +149 -0
  215. package/models/api/gridColumnGroupingApi.d.ts +2 -2
  216. package/models/api/gridCoreApi.d.ts +16 -16
  217. package/models/api/gridRowsMetaApi.d.ts +1 -1
  218. package/models/api/gridVirtualizationApi.d.ts +2 -3
  219. package/models/events/gridEventLookup.d.ts +3 -3
  220. package/models/gridFilterModel.d.ts +1 -1
  221. package/models/gridSlotsComponent.d.ts +16 -2
  222. package/models/gridStateCommunity.d.ts +5 -1
  223. package/models/index.d.ts +0 -1
  224. package/models/index.js +0 -1
  225. package/models/params/index.d.ts +0 -1
  226. package/models/params/index.js +1 -2
  227. package/models/props/DataGridProps.d.ts +6 -11
  228. package/modern/DataGrid/DataGrid.js +6 -6
  229. package/modern/DataGrid/useDataGridComponent.js +2 -1
  230. package/modern/DataGrid/useDataGridProps.js +1 -0
  231. package/modern/components/GridColumnHeaders.js +3 -11
  232. package/modern/components/GridDetailPanels.js +4 -0
  233. package/modern/components/GridHeaders.js +53 -0
  234. package/modern/components/GridPinnedRows.js +4 -0
  235. package/modern/components/GridRow.js +258 -96
  236. package/modern/components/GridScrollbarFillerCell.js +39 -0
  237. package/modern/components/base/GridBody.js +2 -116
  238. package/modern/components/base/GridOverlays.js +10 -16
  239. package/modern/components/cell/GridCell.js +65 -369
  240. package/modern/components/columnHeaders/GridBaseColumnHeaders.js +1 -6
  241. package/modern/components/columnHeaders/GridColumnHeaderItem.js +7 -3
  242. package/modern/components/columnHeaders/GridColumnHeaderSortIcon.js +5 -2
  243. package/modern/components/columnHeaders/GridColumnHeadersInner.js +1 -1
  244. package/modern/components/containers/GridRoot.js +18 -14
  245. package/modern/components/containers/GridRootStyles.js +307 -204
  246. package/modern/components/menu/columnMenu/menuItems/GridColumnMenuSortItem.js +1 -1
  247. package/modern/components/panel/GridPanel.js +3 -4
  248. package/modern/components/panel/filterPanel/GridFilterForm.js +30 -13
  249. package/modern/components/panel/filterPanel/GridFilterPanel.js +46 -20
  250. package/modern/components/toolbar/GridToolbarColumnsButton.js +38 -21
  251. package/modern/components/toolbar/GridToolbarDensitySelector.js +38 -21
  252. package/modern/components/toolbar/GridToolbarExport.js +6 -1
  253. package/modern/components/toolbar/GridToolbarExportContainer.js +39 -22
  254. package/modern/components/toolbar/GridToolbarFilterButton.js +6 -10
  255. package/modern/components/virtualization/GridBottomContainer.js +25 -0
  256. package/modern/components/virtualization/GridMainContainer.js +20 -0
  257. package/modern/components/virtualization/GridTopContainer.js +35 -0
  258. package/modern/components/virtualization/GridVirtualScrollbar.js +131 -0
  259. package/modern/components/virtualization/GridVirtualScroller.js +69 -16
  260. package/modern/components/virtualization/GridVirtualScrollerFiller.js +71 -0
  261. package/modern/components/virtualization/GridVirtualScrollerRenderZone.js +2 -1
  262. package/modern/constants/defaultGridSlotsComponents.js +6 -2
  263. package/modern/constants/gridClasses.js +1 -1
  264. package/modern/hooks/core/gridCoreSelector.js +5 -0
  265. package/modern/hooks/core/useGridInitialization.js +4 -0
  266. package/modern/hooks/core/useGridRefs.js +13 -0
  267. package/modern/hooks/core/useGridTheme.js +19 -0
  268. package/modern/hooks/features/columnGrouping/useGridColumnGrouping.js +5 -12
  269. package/modern/hooks/features/columnHeaders/useGridColumnHeaders.js +67 -160
  270. package/modern/hooks/features/columnMenu/useGridColumnMenu.js +28 -23
  271. package/modern/hooks/features/columns/gridColumnsInterfaces.js +9 -1
  272. package/modern/hooks/features/columns/gridColumnsSelector.js +51 -0
  273. package/modern/hooks/features/columns/gridColumnsUtils.js +10 -12
  274. package/modern/hooks/features/columns/index.js +2 -1
  275. package/modern/hooks/features/columns/useGridColumnSpanning.js +62 -61
  276. package/modern/hooks/features/columns/useGridColumns.js +19 -21
  277. package/modern/hooks/features/dimensions/gridDimensionsSelectors.js +1 -0
  278. package/modern/hooks/features/dimensions/index.js +1 -0
  279. package/modern/hooks/features/dimensions/useGridDimensions.js +214 -146
  280. package/modern/hooks/features/export/serializers/csvSerializer.js +2 -2
  281. package/modern/hooks/features/filter/useGridFilter.js +3 -3
  282. package/modern/hooks/features/focus/gridFocusStateSelector.js +2 -6
  283. package/modern/hooks/features/focus/useGridFocus.js +3 -3
  284. package/modern/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +3 -16
  285. package/modern/hooks/features/pagination/useGridPagination.js +3 -5
  286. package/modern/hooks/features/rows/gridRowsSelector.js +2 -2
  287. package/modern/hooks/features/rows/gridRowsUtils.js +4 -4
  288. package/modern/hooks/features/rows/useGridRowsMeta.js +7 -4
  289. package/modern/hooks/features/scroll/useGridScroll.js +8 -9
  290. package/modern/hooks/features/sorting/gridSortingUtils.js +1 -1
  291. package/modern/hooks/features/sorting/useGridSorting.js +15 -10
  292. package/modern/hooks/features/virtualization/gridVirtualizationSelectors.js +22 -2
  293. package/modern/hooks/features/virtualization/useGridVirtualScroller.js +435 -432
  294. package/modern/hooks/features/virtualization/useGridVirtualization.js +8 -1
  295. package/modern/hooks/utils/index.js +4 -1
  296. package/modern/hooks/utils/useGridAriaAttributes.js +1 -1
  297. package/modern/hooks/utils/useGridNativeEventListener.js +3 -9
  298. package/modern/hooks/utils/useResizeObserver.js +36 -0
  299. package/modern/hooks/utils/useRunOnce.js +18 -0
  300. package/modern/index.js +1 -1
  301. package/modern/internals/index.js +9 -7
  302. package/modern/locales/hrHR.js +149 -0
  303. package/modern/locales/index.js +4 -1
  304. package/modern/locales/ptPT.js +149 -0
  305. package/modern/locales/zhHK.js +149 -0
  306. package/modern/models/index.js +0 -1
  307. package/modern/models/params/index.js +1 -2
  308. package/modern/utils/utils.js +10 -1
  309. package/node/DataGrid/DataGrid.js +6 -6
  310. package/node/DataGrid/useDataGridComponent.js +1 -0
  311. package/node/DataGrid/useDataGridProps.js +1 -0
  312. package/node/components/GridColumnHeaders.js +3 -11
  313. package/node/components/GridDetailPanels.js +10 -0
  314. package/node/components/GridHeaders.js +60 -0
  315. package/node/components/GridPinnedRows.js +10 -0
  316. package/node/components/GridRow.js +256 -94
  317. package/node/components/GridScrollbarFillerCell.js +47 -0
  318. package/node/components/base/GridBody.js +7 -118
  319. package/node/components/base/GridOverlays.js +9 -15
  320. package/node/components/cell/GridCell.js +66 -369
  321. package/node/components/columnHeaders/GridBaseColumnHeaders.js +1 -6
  322. package/node/components/columnHeaders/GridColumnHeaderItem.js +8 -4
  323. package/node/components/columnHeaders/GridColumnHeaderSortIcon.js +5 -2
  324. package/node/components/columnHeaders/GridColumnHeadersInner.js +1 -1
  325. package/node/components/containers/GridRoot.js +17 -14
  326. package/node/components/containers/GridRootStyles.js +175 -72
  327. package/node/components/menu/columnMenu/menuItems/GridColumnMenuSortItem.js +1 -1
  328. package/node/components/panel/GridPanel.js +3 -4
  329. package/node/components/panel/filterPanel/GridFilterForm.js +29 -12
  330. package/node/components/panel/filterPanel/GridFilterPanel.js +45 -19
  331. package/node/components/toolbar/GridToolbarColumnsButton.js +36 -20
  332. package/node/components/toolbar/GridToolbarDensitySelector.js +36 -20
  333. package/node/components/toolbar/GridToolbarExport.js +6 -1
  334. package/node/components/toolbar/GridToolbarExportContainer.js +37 -21
  335. package/node/components/toolbar/GridToolbarFilterButton.js +6 -10
  336. package/node/components/virtualization/GridBottomContainer.js +34 -0
  337. package/node/components/{containers → virtualization}/GridMainContainer.js +7 -29
  338. package/node/components/virtualization/GridTopContainer.js +44 -0
  339. package/node/components/virtualization/GridVirtualScrollbar.js +138 -0
  340. package/node/components/virtualization/GridVirtualScroller.js +69 -17
  341. package/node/components/virtualization/GridVirtualScrollerFiller.js +77 -0
  342. package/node/components/virtualization/GridVirtualScrollerRenderZone.js +2 -1
  343. package/node/constants/defaultGridSlotsComponents.js +5 -1
  344. package/node/constants/gridClasses.js +1 -1
  345. package/node/hooks/core/gridCoreSelector.js +12 -0
  346. package/node/hooks/core/useGridInitialization.js +4 -0
  347. package/node/hooks/core/useGridRefs.js +22 -0
  348. package/node/hooks/core/useGridTheme.js +29 -0
  349. package/node/hooks/features/columnGrouping/useGridColumnGrouping.js +5 -12
  350. package/node/hooks/features/columnHeaders/useGridColumnHeaders.js +65 -159
  351. package/node/hooks/features/columnMenu/useGridColumnMenu.js +28 -23
  352. package/node/hooks/features/columns/gridColumnsInterfaces.js +11 -1
  353. package/node/hooks/features/columns/gridColumnsSelector.js +52 -1
  354. package/node/hooks/features/columns/gridColumnsUtils.js +10 -13
  355. package/node/hooks/features/columns/index.js +22 -61
  356. package/node/hooks/features/columns/useGridColumnSpanning.js +62 -61
  357. package/node/hooks/features/columns/useGridColumns.js +20 -22
  358. package/node/hooks/features/dimensions/gridDimensionsSelectors.js +8 -0
  359. package/node/hooks/features/dimensions/index.js +11 -0
  360. package/node/hooks/features/dimensions/useGridDimensions.js +215 -144
  361. package/node/hooks/features/export/serializers/csvSerializer.js +2 -2
  362. package/node/hooks/features/filter/useGridFilter.js +2 -2
  363. package/node/hooks/features/focus/gridFocusStateSelector.js +3 -7
  364. package/node/hooks/features/focus/useGridFocus.js +2 -2
  365. package/node/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +2 -15
  366. package/node/hooks/features/pagination/useGridPagination.js +3 -5
  367. package/node/hooks/features/rows/gridRowsSelector.js +2 -2
  368. package/node/hooks/features/rows/gridRowsUtils.js +4 -4
  369. package/node/hooks/features/rows/useGridRowsMeta.js +5 -3
  370. package/node/hooks/features/scroll/useGridScroll.js +8 -9
  371. package/node/hooks/features/sorting/gridSortingUtils.js +1 -1
  372. package/node/hooks/features/sorting/useGridSorting.js +15 -10
  373. package/node/hooks/features/virtualization/gridVirtualizationSelectors.js +22 -2
  374. package/node/hooks/features/virtualization/useGridVirtualScroller.js +434 -431
  375. package/node/hooks/features/virtualization/useGridVirtualization.js +9 -1
  376. package/node/hooks/utils/index.js +36 -0
  377. package/node/hooks/utils/useGridAriaAttributes.js +1 -1
  378. package/node/hooks/utils/useGridNativeEventListener.js +3 -9
  379. package/node/hooks/utils/useResizeObserver.js +44 -0
  380. package/node/hooks/utils/useRunOnce.js +27 -0
  381. package/node/index.js +1 -1
  382. package/node/internals/index.js +86 -71
  383. package/node/locales/hrHR.js +155 -0
  384. package/node/locales/index.js +33 -0
  385. package/node/locales/ptPT.js +155 -0
  386. package/node/locales/zhHK.js +155 -0
  387. package/node/models/index.js +0 -11
  388. package/node/models/params/index.js +0 -11
  389. package/node/utils/utils.js +11 -1
  390. package/package.json +6 -6
  391. package/utils/utils.d.ts +6 -0
  392. package/utils/utils.js +10 -1
  393. package/components/DataGridVirtualScroller.d.ts +0 -3
  394. package/components/DataGridVirtualScroller.js +0 -35
  395. package/components/containers/GridMainContainer.js +0 -43
  396. package/legacy/components/DataGridVirtualScroller.js +0 -32
  397. package/legacy/components/containers/GridMainContainer.js +0 -45
  398. package/legacy/models/gridRootContainerRef.js +0 -1
  399. package/legacy/models/params/gridRenderedRowsIntervalChangeParams.js +0 -1
  400. package/models/gridRootContainerRef.d.ts +0 -5
  401. package/models/gridRootContainerRef.js +0 -1
  402. package/models/params/gridRenderedRowsIntervalChangeParams.d.ts +0 -10
  403. package/models/params/gridRenderedRowsIntervalChangeParams.js +0 -1
  404. package/modern/components/DataGridVirtualScroller.js +0 -35
  405. package/modern/components/containers/GridMainContainer.js +0 -42
  406. package/modern/models/gridRootContainerRef.js +0 -1
  407. package/modern/models/params/gridRenderedRowsIntervalChangeParams.js +0 -1
  408. package/node/components/DataGridVirtualScroller.js +0 -42
  409. package/node/models/gridRootContainerRef.js +0 -5
  410. package/node/models/params/gridRenderedRowsIntervalChangeParams.js +0 -5
@@ -1,144 +1,70 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import * as React from 'react';
3
- import * as ReactDOM from 'react-dom';
4
3
  import { unstable_useForkRef as useForkRef } from '@mui/utils';
5
- import { styled, useTheme } from '@mui/material/styles';
6
- import { defaultMemoize } from 'reselect';
4
+ import { styled } from '@mui/material/styles';
7
5
  import { useGridSelector } from '../../utils';
8
6
  import { useGridPrivateApiContext } from '../../utils/useGridPrivateApiContext';
9
- import { useGridRootProps } from '../../utils/useGridRootProps';
10
7
  import { useGridApiEventHandler } from '../../utils/useGridApiEventHandler';
11
8
  import { GridColumnHeaderItem } from '../../../components/columnHeaders/GridColumnHeaderItem';
12
- import { getFirstColumnIndexToRender, getTotalHeaderHeight } from '../columns/gridColumnsUtils';
13
- import { useGridVisibleRows } from '../../utils/useGridVisibleRows';
14
- import { areRenderContextsEqual, getRenderableIndexes } from '../virtualization/useGridVirtualScroller';
15
- import { gridVirtualizationColumnEnabledSelector } from '../virtualization';
9
+ import { gridDimensionsSelector } from '../dimensions';
10
+ import { gridRenderContextColumnsSelector, gridVirtualizationColumnEnabledSelector } from '../virtualization';
16
11
  import { GridColumnGroupHeader } from '../../../components/columnHeaders/GridColumnGroupHeader';
12
+ import { GridPinnedColumnPosition, gridVisiblePinnedColumnDefinitionsSelector } from '../columns';
13
+ import { GridScrollbarFillerCell as ScrollbarFiller } from '../../../components/GridScrollbarFillerCell';
14
+ import { gridClasses } from '../../../constants/gridClasses';
17
15
  import { jsx as _jsx } from "react/jsx-runtime";
18
- const GridColumnHeaderRow = styled('div', {
16
+ import { jsxs as _jsxs } from "react/jsx-runtime";
17
+ const SpaceFiller = styled('div')({
18
+ /* GridRootStyles conflict */
19
+ '&&': {
20
+ padding: 0,
21
+ width: 'calc(var(--DataGrid-width) - var(--DataGrid-columnsTotalWidth))'
22
+ }
23
+ });
24
+ export const GridColumnHeaderRow = styled('div', {
19
25
  name: 'MuiDataGrid',
20
26
  slot: 'ColumnHeaderRow',
21
27
  overridesResolver: (props, styles) => styles.columnHeaderRow
22
- })(() => ({
23
- display: 'flex'
28
+ })(({
29
+ ownerState: {
30
+ params: {
31
+ position
32
+ } = {},
33
+ leftOverflow = 0
34
+ }
35
+ }) => ({
36
+ display: 'flex',
37
+ height: 'var(--DataGrid-headerHeight)',
38
+ transform: position === undefined ? `translate3d(${leftOverflow !== 0 ? `calc(var(--DataGrid-offsetLeft) - ${leftOverflow}px)` : 'var(--DataGrid-offsetLeft)'}, 0, 0)` : undefined
24
39
  }));
25
- function isUIEvent(event) {
26
- return !!event.target;
27
- }
28
40
  export const useGridColumnHeaders = props => {
29
41
  const {
30
42
  innerRef: innerRefProp,
31
- minColumnIndex = 0,
32
43
  visibleColumns,
33
44
  sortColumnLookup,
34
45
  filterColumnLookup,
35
- columnPositions,
36
46
  columnHeaderTabIndexState,
37
47
  columnGroupHeaderTabIndexState,
38
48
  columnHeaderFocus,
39
49
  columnGroupHeaderFocus,
40
- densityFactor,
41
50
  headerGroupingMaxDepth,
42
51
  columnMenuState,
43
52
  columnVisibility,
44
53
  columnGroupsHeaderStructure,
45
54
  hasOtherElementInTabSequence
46
55
  } = props;
47
- const theme = useTheme();
48
56
  const [dragCol, setDragCol] = React.useState('');
49
57
  const [resizeCol, setResizeCol] = React.useState('');
50
58
  const apiRef = useGridPrivateApiContext();
51
59
  const hasVirtualization = useGridSelector(apiRef, gridVirtualizationColumnEnabledSelector);
52
- const rootProps = useGridRootProps();
53
60
  const innerRef = React.useRef(null);
54
61
  const handleInnerRef = useForkRef(innerRefProp, innerRef);
55
- const [renderContext, setRenderContextRaw] = React.useState(null);
56
- const prevRenderContext = React.useRef(renderContext);
57
- const prevScrollLeft = React.useRef(0);
58
- const currentPage = useGridVisibleRows(apiRef, rootProps);
59
- const totalHeaderHeight = getTotalHeaderHeight(apiRef, rootProps.columnHeaderHeight);
60
- const headerHeight = Math.floor(rootProps.columnHeaderHeight * densityFactor);
61
- const setRenderContext = React.useCallback(nextRenderContext => {
62
- if (renderContext && nextRenderContext && areRenderContextsEqual(renderContext, nextRenderContext)) {
63
- return;
64
- }
65
- setRenderContextRaw(nextRenderContext);
66
- }, [renderContext]);
62
+ const dimensions = useGridSelector(apiRef, gridDimensionsSelector);
63
+ const renderContext = useGridSelector(apiRef, gridRenderContextColumnsSelector);
64
+ const visiblePinnedColumns = useGridSelector(apiRef, gridVisiblePinnedColumnDefinitionsSelector);
67
65
  React.useEffect(() => {
68
66
  apiRef.current.columnHeadersContainerElementRef.current.scrollLeft = 0;
69
67
  }, [apiRef]);
70
-
71
- // memoize `getFirstColumnIndexToRender`, since it's called on scroll
72
- const getFirstColumnIndexToRenderRef = React.useRef(defaultMemoize(getFirstColumnIndexToRender, {
73
- equalityCheck: (a, b) => ['firstColumnIndex', 'minColumnIndex', 'columnBuffer'].every(key => a[key] === b[key])
74
- }));
75
- const updateInnerPosition = React.useCallback(nextRenderContext => {
76
- const [firstRowToRender, lastRowToRender] = getRenderableIndexes({
77
- firstIndex: nextRenderContext.firstRowIndex,
78
- lastIndex: nextRenderContext.lastRowIndex,
79
- minFirstIndex: 0,
80
- maxLastIndex: currentPage.rows.length,
81
- buffer: rootProps.rowBuffer
82
- });
83
- const firstColumnToRender = getFirstColumnIndexToRenderRef.current({
84
- firstColumnIndex: nextRenderContext.firstColumnIndex,
85
- minColumnIndex,
86
- columnBuffer: rootProps.columnBuffer,
87
- firstRowToRender,
88
- lastRowToRender,
89
- apiRef,
90
- visibleRows: currentPage.rows
91
- });
92
- const direction = theme.direction === 'ltr' ? 1 : -1;
93
- const offset = firstColumnToRender > 0 ? prevScrollLeft.current - direction * columnPositions[firstColumnToRender] : prevScrollLeft.current;
94
- innerRef.current.style.transform = `translate3d(${-offset}px, 0px, 0px)`;
95
- }, [columnPositions, minColumnIndex, rootProps.columnBuffer, apiRef, currentPage.rows, rootProps.rowBuffer, theme.direction]);
96
- React.useLayoutEffect(() => {
97
- if (renderContext) {
98
- updateInnerPosition(renderContext);
99
- }
100
- }, [renderContext, updateInnerPosition]);
101
- const handleScroll = React.useCallback(({
102
- left,
103
- renderContext: nextRenderContext = null
104
- }, event) => {
105
- if (!innerRef.current) {
106
- return;
107
- }
108
-
109
- // Ignore vertical scroll.
110
- // Excepts the first event which sets the previous render context.
111
- if (prevScrollLeft.current === left && prevRenderContext.current?.firstColumnIndex === nextRenderContext?.firstColumnIndex && prevRenderContext.current?.lastColumnIndex === nextRenderContext?.lastColumnIndex) {
112
- return;
113
- }
114
- prevScrollLeft.current = left;
115
-
116
- // We can only update the position when we guarantee that the render context has been
117
- // rendered. This is achieved using ReactDOM.flushSync or when the context doesn't change.
118
- let canUpdateInnerPosition = false;
119
- if (nextRenderContext !== prevRenderContext.current || !prevRenderContext.current) {
120
- // ReactDOM.flushSync cannot be called on `scroll` events fired inside effects
121
- if (isUIEvent(event)) {
122
- // To prevent flickering, the inner position can only be updated after the new context has
123
- // been rendered. ReactDOM.flushSync ensures that the state changes will happen before
124
- // updating the position.
125
- ReactDOM.flushSync(() => {
126
- setRenderContext(nextRenderContext);
127
- });
128
- canUpdateInnerPosition = true;
129
- } else {
130
- setRenderContext(nextRenderContext);
131
- }
132
- prevRenderContext.current = nextRenderContext;
133
- } else {
134
- canUpdateInnerPosition = true;
135
- }
136
-
137
- // Pass directly the render context to avoid waiting for the next render
138
- if (nextRenderContext && canUpdateInnerPosition) {
139
- updateInnerPosition(nextRenderContext);
140
- }
141
- }, [updateInnerPosition, setRenderContext]);
142
68
  const handleColumnResizeStart = React.useCallback(params => setResizeCol(params.field), []);
143
69
  const handleColumnResizeStop = React.useCallback(() => setResizeCol(''), []);
144
70
  const handleColumnReorderStart = React.useCallback(params => setDragCol(params.field), []);
@@ -147,53 +73,41 @@ export const useGridColumnHeaders = props => {
147
73
  useGridApiEventHandler(apiRef, 'columnResizeStop', handleColumnResizeStop);
148
74
  useGridApiEventHandler(apiRef, 'columnHeaderDragStart', handleColumnReorderStart);
149
75
  useGridApiEventHandler(apiRef, 'columnHeaderDragEnd', handleColumnReorderStop);
150
- useGridApiEventHandler(apiRef, 'scrollPositionChange', handleScroll);
151
76
 
152
77
  // Helper for computation common between getColumnHeaders and getColumnGroupHeaders
153
78
  const getColumnsToRender = params => {
154
79
  const {
155
- renderContext: nextRenderContext = renderContext,
156
- minFirstColumn = minColumnIndex,
80
+ renderContext: currentContext = renderContext,
81
+ // TODO: `minFirstColumn` is not used anymore, could be refactored out.
157
82
  maxLastColumn = visibleColumns.length
158
83
  } = params || {};
159
- if (!nextRenderContext) {
160
- return null;
161
- }
162
- const [firstRowToRender, lastRowToRender] = getRenderableIndexes({
163
- firstIndex: nextRenderContext.firstRowIndex,
164
- lastIndex: nextRenderContext.lastRowIndex,
165
- minFirstIndex: 0,
166
- maxLastIndex: currentPage.rows.length,
167
- buffer: rootProps.rowBuffer
168
- });
169
- const firstColumnToRender = !hasVirtualization ? 0 : getFirstColumnIndexToRenderRef.current({
170
- firstColumnIndex: nextRenderContext.firstColumnIndex,
171
- minColumnIndex: minFirstColumn,
172
- columnBuffer: rootProps.columnBuffer,
173
- apiRef,
174
- firstRowToRender,
175
- lastRowToRender,
176
- visibleRows: currentPage.rows
177
- });
178
- const lastColumnToRender = !hasVirtualization ? maxLastColumn : Math.min(nextRenderContext.lastColumnIndex + rootProps.columnBuffer, maxLastColumn);
84
+ const firstColumnToRender = !hasVirtualization ? 0 : currentContext.firstColumnIndex;
85
+ const lastColumnToRender = !hasVirtualization ? maxLastColumn : currentContext.lastColumnIndex;
179
86
  const renderedColumns = visibleColumns.slice(firstColumnToRender, lastColumnToRender);
180
87
  return {
181
88
  renderedColumns,
182
89
  firstColumnToRender,
183
- lastColumnToRender,
184
- minFirstColumn,
185
- maxLastColumn
90
+ lastColumnToRender
186
91
  };
187
92
  };
93
+ const getFiller = (params, borderTop = false) => {
94
+ const isPinnedRight = params?.position === GridPinnedColumnPosition.RIGHT;
95
+ const hasScrollbarFiller = visiblePinnedColumns.right.length > 0 && isPinnedRight || visiblePinnedColumns.right.length === 0 && params?.position === undefined;
96
+ return /*#__PURE__*/_jsxs(React.Fragment, {
97
+ children: [params?.position === undefined && /*#__PURE__*/_jsx(SpaceFiller, {
98
+ className: gridClasses.columnHeader
99
+ }), hasScrollbarFiller && /*#__PURE__*/_jsx(ScrollbarFiller, {
100
+ header: true,
101
+ borderTop: borderTop,
102
+ pinnedRight: isPinnedRight
103
+ })]
104
+ });
105
+ };
188
106
  const getColumnHeaders = (params, other = {}) => {
189
- const columnsToRender = getColumnsToRender(params);
190
- if (columnsToRender == null) {
191
- return null;
192
- }
193
107
  const {
194
108
  renderedColumns,
195
109
  firstColumnToRender
196
- } = columnsToRender;
110
+ } = getColumnsToRender(params);
197
111
  const columns = [];
198
112
  for (let i = 0; i < renderedColumns.length; i += 1) {
199
113
  const colDef = renderedColumns[i];
@@ -205,7 +119,7 @@ export const useGridColumnHeaders = props => {
205
119
  columns.push( /*#__PURE__*/_jsx(GridColumnHeaderItem, _extends({}, sortColumnLookup[colDef.field], {
206
120
  columnMenuOpen: open,
207
121
  filterItemsCounter: filterColumnLookup[colDef.field] && filterColumnLookup[colDef.field].length,
208
- headerHeight: headerHeight,
122
+ headerHeight: dimensions.headerHeight,
209
123
  isDragging: colDef.field === dragCol,
210
124
  colDef: colDef,
211
125
  colIndex: columnIndex,
@@ -214,11 +128,13 @@ export const useGridColumnHeaders = props => {
214
128
  tabIndex: tabIndex
215
129
  }, other), colDef.field));
216
130
  }
217
- return /*#__PURE__*/_jsx(GridColumnHeaderRow, {
131
+ return /*#__PURE__*/_jsxs(GridColumnHeaderRow, {
218
132
  role: "row",
219
133
  "aria-rowindex": headerGroupingMaxDepth + 1,
220
- ownerState: rootProps,
221
- children: columns
134
+ ownerState: {
135
+ params
136
+ },
137
+ children: [columns, getFiller(params)]
222
138
  });
223
139
  };
224
140
  const getColumnGroupHeaders = params => {
@@ -226,7 +142,7 @@ export const useGridColumnHeaders = props => {
226
142
  return null;
227
143
  }
228
144
  const columnsToRender = getColumnsToRender(params);
229
- if (columnsToRender == null || columnsToRender.renderedColumns.length === 0) {
145
+ if (columnsToRender.renderedColumns.length === 0) {
230
146
  return null;
231
147
  }
232
148
  const {
@@ -238,13 +154,13 @@ export const useGridColumnHeaders = props => {
238
154
  for (let depth = 0; depth < headerGroupingMaxDepth; depth += 1) {
239
155
  const rowStructure = columnGroupsHeaderStructure[depth];
240
156
  const firstColumnFieldToRender = visibleColumns[firstColumnToRender].field;
241
- const firstGroupToRender = apiRef.current.unstable_getColumnGroupPath(firstColumnFieldToRender)[depth] ?? null;
157
+ const firstGroupToRender = apiRef.current.getColumnGroupPath(firstColumnFieldToRender)[depth] ?? null;
242
158
  const firstGroupIndex = rowStructure.findIndex(({
243
159
  groupId,
244
160
  columnFields
245
161
  }) => groupId === firstGroupToRender && columnFields.includes(firstColumnFieldToRender));
246
162
  const lastColumnFieldToRender = visibleColumns[lastColumnToRender - 1].field;
247
- const lastGroupToRender = apiRef.current.unstable_getColumnGroupPath(lastColumnFieldToRender)[depth] ?? null;
163
+ const lastGroupToRender = apiRef.current.getColumnGroupPath(lastColumnFieldToRender)[depth] ?? null;
248
164
  const lastGroupIndex = rowStructure.findIndex(({
249
165
  groupId,
250
166
  columnFields
@@ -284,15 +200,14 @@ export const useGridColumnHeaders = props => {
284
200
  });
285
201
  }
286
202
  headerToRender.forEach((depthInfo, depthIndex) => {
287
- columns.push( /*#__PURE__*/_jsx(GridColumnHeaderRow, {
288
- style: {
289
- height: `${headerHeight}px`,
290
- transform: `translateX(-${depthInfo.leftOverflow}px)`
291
- },
203
+ columns.push( /*#__PURE__*/_jsxs(GridColumnHeaderRow, {
292
204
  role: "row",
293
205
  "aria-rowindex": depthIndex + 1,
294
- ownerState: rootProps,
295
- children: depthInfo.elements.map(({
206
+ ownerState: {
207
+ params,
208
+ leftOverflow: depthInfo.leftOverflow
209
+ },
210
+ children: [depthInfo.elements.map(({
296
211
  groupId,
297
212
  width,
298
213
  fields,
@@ -308,33 +223,25 @@ export const useGridColumnHeaders = props => {
308
223
  depth: depthIndex,
309
224
  isLastColumn: colIndex === visibleColumns.length - fields.length,
310
225
  maxDepth: headerToRender.length,
311
- height: headerHeight,
226
+ height: dimensions.headerHeight,
312
227
  hasFocus: hasFocus,
313
228
  tabIndex: tabIndex
314
229
  }, groupIndex);
315
- })
230
+ }), getFiller(params)]
316
231
  }, depthIndex));
317
232
  });
318
233
  return columns;
319
234
  };
320
- const rootStyle = {
321
- minHeight: totalHeaderHeight,
322
- maxHeight: totalHeaderHeight,
323
- lineHeight: `${headerHeight}px`
324
- };
325
235
  return {
326
236
  renderContext,
237
+ getFiller,
327
238
  getColumnHeaders,
328
239
  getColumnsToRender,
329
240
  getColumnGroupHeaders,
330
241
  isDragging: !!dragCol,
331
- getRootProps: (other = {}) => _extends({
332
- style: rootStyle
333
- }, other),
334
242
  getInnerProps: () => ({
335
243
  ref: handleInnerRef,
336
244
  role: 'rowgroup'
337
- }),
338
- headerHeight
245
+ })
339
246
  };
340
247
  };
@@ -20,19 +20,25 @@ export const useGridColumnMenu = apiRef => {
20
20
  * API METHODS
21
21
  */
22
22
  const showColumnMenu = React.useCallback(field => {
23
- const shouldUpdate = apiRef.current.setState(state => {
24
- if (state.columnMenu.open && state.columnMenu.field === field) {
25
- return state;
26
- }
27
- logger.debug('Opening Column Menu');
28
- return _extends({}, state, {
29
- columnMenu: {
30
- open: true,
31
- field
23
+ const columnMenuState = gridColumnMenuSelector(apiRef.current.state);
24
+ const newState = {
25
+ open: true,
26
+ field
27
+ };
28
+ const shouldUpdate = newState.open !== columnMenuState.open || newState.field !== columnMenuState.field;
29
+ if (shouldUpdate) {
30
+ apiRef.current.setState(state => {
31
+ if (state.columnMenu.open && state.columnMenu.field === field) {
32
+ return state;
32
33
  }
34
+ logger.debug('Opening Column Menu');
35
+ return _extends({}, state, {
36
+ columnMenu: {
37
+ open: true,
38
+ field
39
+ }
40
+ });
33
41
  });
34
- });
35
- if (shouldUpdate) {
36
42
  apiRef.current.hidePreferences();
37
43
  apiRef.current.forceUpdate();
38
44
  }
@@ -64,19 +70,18 @@ export const useGridColumnMenu = apiRef => {
64
70
  }
65
71
  apiRef.current.setColumnHeaderFocus(fieldToFocus);
66
72
  }
67
- const shouldUpdate = apiRef.current.setState(state => {
68
- if (!state.columnMenu.open && state.columnMenu.field === undefined) {
69
- return state;
70
- }
71
- logger.debug('Hiding Column Menu');
72
- return _extends({}, state, {
73
- columnMenu: _extends({}, state.columnMenu, {
74
- open: false,
75
- field: undefined
76
- })
77
- });
78
- });
73
+ const newState = {
74
+ open: false,
75
+ field: undefined
76
+ };
77
+ const shouldUpdate = newState.open !== columnMenuState.open || newState.field !== columnMenuState.field;
79
78
  if (shouldUpdate) {
79
+ apiRef.current.setState(state => {
80
+ logger.debug('Hiding Column Menu');
81
+ return _extends({}, state, {
82
+ columnMenu: newState
83
+ });
84
+ });
80
85
  apiRef.current.forceUpdate();
81
86
  }
82
87
  }, [apiRef, logger]);
@@ -1 +1,9 @@
1
- export {};
1
+ export let GridPinnedColumnPosition = /*#__PURE__*/function (GridPinnedColumnPosition) {
2
+ GridPinnedColumnPosition["LEFT"] = "left";
3
+ GridPinnedColumnPosition["RIGHT"] = "right";
4
+ return GridPinnedColumnPosition;
5
+ }({});
6
+ export const EMPTY_PINNED_COLUMN_FIELDS = {
7
+ left: [],
8
+ right: []
9
+ };
@@ -1,4 +1,7 @@
1
1
  import { createSelector, createSelectorMemoized } from '../../../utils/createSelector';
2
+ import { EMPTY_PINNED_COLUMN_FIELDS } from './gridColumnsInterfaces';
3
+ import { gridThemeSelector } from '../../core/gridCoreSelector';
4
+
2
5
  /**
3
6
  * Get the columns state
4
7
  * @category Columns
@@ -42,6 +45,54 @@ export const gridVisibleColumnDefinitionsSelector = createSelectorMemoized(gridC
42
45
  */
43
46
  export const gridVisibleColumnFieldsSelector = createSelectorMemoized(gridVisibleColumnDefinitionsSelector, visibleColumns => visibleColumns.map(column => column.field));
44
47
 
48
+ /**
49
+ * Get the visible pinned columns model.
50
+ * @category Visible Columns
51
+ */
52
+ export const gridPinnedColumnsSelector = state => state.pinnedColumns;
53
+
54
+ /**
55
+ * Get the visible pinned columns.
56
+ * @category Visible Columns
57
+ */
58
+ export const gridVisiblePinnedColumnDefinitionsSelector = createSelectorMemoized(gridColumnsStateSelector, gridPinnedColumnsSelector, gridVisibleColumnFieldsSelector, gridThemeSelector, (columnsState, model, visibleColumnFields, theme) => {
59
+ const visiblePinnedFields = filterVisibleColumns(model, visibleColumnFields, theme.direction === 'rtl');
60
+ const visiblePinnedColumns = {
61
+ left: visiblePinnedFields.left.map(field => columnsState.lookup[field]),
62
+ right: visiblePinnedFields.right.map(field => columnsState.lookup[field])
63
+ };
64
+ return visiblePinnedColumns;
65
+ });
66
+ function filterVisibleColumns(pinnedColumns, columns, invert) {
67
+ if (!Array.isArray(pinnedColumns.left) && !Array.isArray(pinnedColumns.right)) {
68
+ return EMPTY_PINNED_COLUMN_FIELDS;
69
+ }
70
+ if (pinnedColumns.left?.length === 0 && pinnedColumns.right?.length === 0) {
71
+ return EMPTY_PINNED_COLUMN_FIELDS;
72
+ }
73
+ const filter = (newPinnedColumns, remainingColumns) => {
74
+ if (!Array.isArray(newPinnedColumns)) {
75
+ return [];
76
+ }
77
+ return newPinnedColumns.filter(field => remainingColumns.includes(field));
78
+ };
79
+ const leftPinnedColumns = filter(pinnedColumns.left, columns);
80
+ const columnsWithoutLeftPinnedColumns = columns.filter(
81
+ // Filter out from the remaining columns those columns already pinned to the left
82
+ field => !leftPinnedColumns.includes(field));
83
+ const rightPinnedColumns = filter(pinnedColumns.right, columnsWithoutLeftPinnedColumns);
84
+ if (invert) {
85
+ return {
86
+ left: rightPinnedColumns,
87
+ right: leftPinnedColumns
88
+ };
89
+ }
90
+ return {
91
+ left: leftPinnedColumns,
92
+ right: rightPinnedColumns
93
+ };
94
+ }
95
+
45
96
  /**
46
97
  * Get the left position in pixel of each visible columns relative to the left of the first column.
47
98
  * @category Visible Columns
@@ -1,10 +1,12 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
- import { DEFAULT_GRID_COL_TYPE_KEY, GRID_STRING_COL_DEF } from '../../../colDef';
2
+ import { DEFAULT_GRID_COL_TYPE_KEY, GRID_STRING_COL_DEF, getGridDefaultColumnTypes } from '../../../colDef';
3
3
  import { gridColumnsStateSelector, gridColumnVisibilityModelSelector } from './gridColumnsSelector';
4
4
  import { clamp } from '../../../utils/utils';
5
5
  import { gridDensityFactorSelector } from '../density/densitySelector';
6
6
  import { gridColumnGroupsHeaderMaxDepthSelector } from '../columnGrouping/gridColumnGroupsSelector';
7
7
  export const COLUMNS_DIMENSION_PROPERTIES = ['maxWidth', 'minWidth', 'width', 'flex'];
8
+ const COLUMN_TYPES = getGridDefaultColumnTypes();
9
+
8
10
  /**
9
11
  * Computes width for flex columns.
10
12
  * Based on CSS Flexbox specification:
@@ -196,10 +198,10 @@ export const applyInitialState = (columnsState, initialState) => {
196
198
  });
197
199
  return newColumnsState;
198
200
  };
199
- function getDefaultColTypeDef(columnTypes, type) {
200
- let colDef = columnTypes[DEFAULT_GRID_COL_TYPE_KEY];
201
- if (type && columnTypes[type]) {
202
- colDef = columnTypes[type];
201
+ function getDefaultColTypeDef(type) {
202
+ let colDef = COLUMN_TYPES[DEFAULT_GRID_COL_TYPE_KEY];
203
+ if (type && COLUMN_TYPES[type]) {
204
+ colDef = COLUMN_TYPES[type];
203
205
  }
204
206
  return colDef;
205
207
  }
@@ -207,7 +209,6 @@ export const createColumnsState = ({
207
209
  apiRef,
208
210
  columnsToUpsert,
209
211
  initialState,
210
- columnTypes,
211
212
  columnVisibilityModel = gridColumnVisibilityModelSelector(apiRef),
212
213
  keepOnlyColumnsToUpsert = false
213
214
  }) => {
@@ -243,7 +244,7 @@ export const createColumnsState = ({
243
244
  columnsToKeep[field] = true;
244
245
  let existingState = columnsState.lookup[field];
245
246
  if (existingState == null) {
246
- existingState = _extends({}, getDefaultColTypeDef(columnTypes, newColumn.type), {
247
+ existingState = _extends({}, getDefaultColTypeDef(newColumn.type), {
247
248
  field,
248
249
  hasBeenResized: false
249
250
  });
@@ -254,7 +255,7 @@ export const createColumnsState = ({
254
255
 
255
256
  // If the column type has changed - merge the existing state with the default column type definition
256
257
  if (existingState && existingState.type !== newColumn.type) {
257
- existingState = _extends({}, getDefaultColTypeDef(columnTypes, newColumn.type), {
258
+ existingState = _extends({}, getDefaultColTypeDef(newColumn.type), {
258
259
  field
259
260
  });
260
261
  }
@@ -280,11 +281,8 @@ export const createColumnsState = ({
280
281
  }
281
282
  const columnsStateWithPreProcessing = apiRef.current.unstable_applyPipeProcessors('hydrateColumns', columnsState);
282
283
  const columnsStateWithPortableColumns = applyInitialState(columnsStateWithPreProcessing, initialState);
283
- return hydrateColumnsWidth(columnsStateWithPortableColumns, apiRef.current.getRootDimensions?.()?.viewportInnerSize.width ?? 0);
284
+ return hydrateColumnsWidth(columnsStateWithPortableColumns, apiRef.current.getRootDimensions?.().viewportInnerSize.width ?? 0);
284
285
  };
285
- export const mergeColumnsState = columnsState => state => _extends({}, state, {
286
- columns: columnsState
287
- });
288
286
  export function getFirstNonSpannedColumnToRender({
289
287
  firstColumnToRender,
290
288
  apiRef,
@@ -1 +1,2 @@
1
- export { gridColumnFieldsSelector, gridColumnLookupSelector, gridColumnDefinitionsSelector, gridColumnVisibilityModelSelector, gridVisibleColumnDefinitionsSelector, gridVisibleColumnFieldsSelector, gridColumnPositionsSelector, gridColumnsTotalWidthSelector, gridFilterableColumnDefinitionsSelector, gridFilterableColumnLookupSelector } from './gridColumnsSelector';
1
+ export * from './gridColumnsSelector';
2
+ export * from './gridColumnsInterfaces';