@mui/x-data-grid 5.7.0 → 5.10.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 (524) hide show
  1. package/CHANGELOG.md +241 -53
  2. package/DataGrid/DataGrid.d.ts +8 -3
  3. package/DataGrid/DataGrid.js +28 -5
  4. package/DataGrid/useDataGridComponent.js +5 -5
  5. package/DataGrid/useDataGridProps.d.ts +2 -1
  6. package/LICENSE +21 -0
  7. package/README.md +6 -4
  8. package/colDef/gridBooleanColDef.d.ts +1 -1
  9. package/colDef/gridBooleanOperators.d.ts +1 -1
  10. package/colDef/gridDateColDef.d.ts +5 -9
  11. package/colDef/gridDateColDef.js +2 -2
  12. package/colDef/gridDateOperators.d.ts +1 -1
  13. package/{models/colDef → colDef}/gridDefaultColumnTypes.d.ts +1 -1
  14. package/{models/colDef → colDef}/gridDefaultColumnTypes.js +6 -6
  15. package/colDef/gridNumericColDef.d.ts +1 -1
  16. package/colDef/gridNumericOperators.d.ts +2 -2
  17. package/colDef/gridStringColDef.d.ts +1 -1
  18. package/colDef/gridStringOperators.d.ts +1 -1
  19. package/colDef/index.d.ts +1 -0
  20. package/colDef/index.js +2 -1
  21. package/components/GridRow.d.ts +4 -0
  22. package/components/GridRow.js +55 -24
  23. package/components/base/GridOverlays.js +4 -3
  24. package/components/cell/GridActionsCell.d.ts +5 -1
  25. package/components/cell/GridActionsCell.js +170 -21
  26. package/components/cell/GridActionsCellItem.d.ts +66 -4
  27. package/components/cell/GridActionsCellItem.js +7 -5
  28. package/components/cell/GridCell.d.ts +5 -4
  29. package/components/cell/GridCell.js +30 -9
  30. package/components/cell/GridEditInputCell.js +3 -3
  31. package/components/cell/GridEditSingleSelectCell.js +24 -15
  32. package/components/columnHeaders/GridColumnHeaderFilterIconButton.d.ts +12 -0
  33. package/components/columnHeaders/{ColumnHeaderFilterIcon.js → GridColumnHeaderFilterIconButton.js} +22 -4
  34. package/components/columnHeaders/GridColumnHeaderItem.js +9 -12
  35. package/components/columnHeaders/GridColumnHeaders.d.ts +0 -1
  36. package/components/columnHeaders/GridColumnHeaders.js +1 -1
  37. package/components/columnHeaders/index.d.ts +1 -0
  38. package/components/columnHeaders/index.js +1 -0
  39. package/components/columnSelection/GridCellCheckboxRenderer.d.ts +3 -3
  40. package/components/columnSelection/GridCellCheckboxRenderer.js +22 -5
  41. package/components/columnSelection/GridHeaderCheckbox.d.ts +1 -1
  42. package/components/containers/GridRoot.js +29 -17
  43. package/components/containers/GridRootStyles.js +36 -1
  44. package/components/menu/GridMenu.js +1 -0
  45. package/components/menu/columnMenu/GridColumnMenu.js +1 -1
  46. package/components/panel/GridPanel.d.ts +2 -2
  47. package/components/panel/GridPanel.js +1 -0
  48. package/components/panel/GridPreferencesPanel.js +1 -1
  49. package/components/panel/filterPanel/GridFilterForm.js +14 -10
  50. package/components/panel/filterPanel/GridFilterInputBoolean.js +13 -8
  51. package/components/panel/filterPanel/GridFilterInputSingleSelect.js +22 -15
  52. package/components/panel/filterPanel/GridFilterInputValue.js +22 -15
  53. package/components/toolbar/GridToolbarDensitySelector.js +1 -1
  54. package/components/toolbar/GridToolbarFilterButton.d.ts +1 -1
  55. package/components/virtualization/GridVirtualScroller.js +2 -0
  56. package/components/virtualization/GridVirtualScrollerContent.js +1 -3
  57. package/constants/defaultGridSlotsComponents.js +4 -2
  58. package/constants/gridClasses.d.ts +35 -3
  59. package/constants/gridClasses.js +1 -1
  60. package/constants/gridDetailPanelToggleField.d.ts +1 -0
  61. package/constants/gridDetailPanelToggleField.js +2 -0
  62. package/constants/localeTextConstants.js +3 -1
  63. package/hooks/core/index.d.ts +1 -1
  64. package/hooks/core/pipeProcessing/gridPipeProcessingApi.d.ts +85 -0
  65. package/hooks/core/{preProcessing/gridPreProcessingApi.js → pipeProcessing/gridPipeProcessingApi.js} +0 -0
  66. package/hooks/core/pipeProcessing/index.d.ts +4 -0
  67. package/hooks/core/pipeProcessing/index.js +4 -0
  68. package/hooks/core/pipeProcessing/useGridPipeProcessing.d.ts +32 -0
  69. package/hooks/core/pipeProcessing/useGridPipeProcessing.js +108 -0
  70. package/hooks/core/pipeProcessing/useGridRegisterPipeApplier.d.ts +3 -0
  71. package/{modern/hooks/core/preProcessing/useGridRegisterPreProcessor.js → hooks/core/pipeProcessing/useGridRegisterPipeApplier.js} +2 -6
  72. package/hooks/core/pipeProcessing/useGridRegisterPipeProcessor.d.ts +4 -0
  73. package/hooks/core/{preProcessing/useGridRegisterPreProcessor.js → pipeProcessing/useGridRegisterPipeProcessor.js} +2 -6
  74. package/hooks/core/strategyProcessing/useGridStrategyProcessing.d.ts +27 -16
  75. package/hooks/core/strategyProcessing/useGridStrategyProcessing.js +26 -15
  76. package/hooks/core/useGridInitialization.js +2 -2
  77. package/hooks/features/columnHeaders/useGridColumnHeaders.d.ts +0 -1
  78. package/hooks/features/columnHeaders/useGridColumnHeaders.js +77 -11
  79. package/hooks/features/columnMenu/useGridColumnMenu.js +2 -1
  80. package/hooks/features/columns/gridColumnsInterfaces.d.ts +3 -1
  81. package/hooks/features/columns/gridColumnsSelector.d.ts +6 -6
  82. package/hooks/features/columns/gridColumnsUtils.d.ts +22 -4
  83. package/hooks/features/columns/gridColumnsUtils.js +105 -20
  84. package/hooks/features/columns/useGridColumnSpanning.d.ts +7 -0
  85. package/hooks/features/columns/useGridColumnSpanning.js +109 -0
  86. package/hooks/features/columns/useGridColumns.d.ts +1 -1
  87. package/hooks/features/columns/useGridColumns.js +55 -40
  88. package/hooks/features/dimensions/gridDimensionsApi.d.ts +5 -0
  89. package/hooks/features/dimensions/useGridDimensions.js +5 -4
  90. package/hooks/features/editRows/useGridCellEditing.new.d.ts +1 -1
  91. package/hooks/features/editRows/useGridCellEditing.new.js +40 -17
  92. package/hooks/features/editRows/useGridEditing.new.js +7 -3
  93. package/hooks/features/editRows/useGridRowEditing.new.d.ts +1 -1
  94. package/hooks/features/editRows/useGridRowEditing.new.js +44 -21
  95. package/hooks/features/events/useGridEvents.d.ts +1 -1
  96. package/hooks/features/events/useGridEvents.js +2 -0
  97. package/hooks/features/filter/gridFilterSelector.d.ts +3 -9
  98. package/hooks/features/filter/useGridFilter.js +18 -13
  99. package/hooks/features/focus/useGridFocus.js +19 -9
  100. package/hooks/features/{keyboard → keyboardNavigation}/useGridKeyboardNavigation.d.ts +3 -5
  101. package/hooks/features/{keyboard → keyboardNavigation}/useGridKeyboardNavigation.js +66 -13
  102. package/hooks/features/pagination/gridPaginationSelector.d.ts +1 -3
  103. package/hooks/features/pagination/useGridPage.js +9 -4
  104. package/hooks/features/pagination/useGridPageSize.js +3 -3
  105. package/hooks/features/preferencesPanel/useGridPreferencesPanel.js +18 -5
  106. package/hooks/features/rows/gridRowsSelector.d.ts +2 -1
  107. package/hooks/features/rows/gridRowsSelector.js +1 -0
  108. package/hooks/features/rows/gridRowsState.d.ts +4 -0
  109. package/hooks/features/rows/gridRowsUtils.d.ts +8 -0
  110. package/hooks/features/rows/gridRowsUtils.js +11 -0
  111. package/hooks/features/rows/index.d.ts +1 -0
  112. package/hooks/features/rows/index.js +1 -1
  113. package/hooks/features/rows/useGridRows.d.ts +2 -2
  114. package/hooks/features/rows/useGridRows.js +27 -7
  115. package/hooks/features/rows/useGridRowsMeta.js +7 -14
  116. package/hooks/features/scroll/useGridScroll.d.ts +2 -0
  117. package/hooks/features/scroll/useGridScroll.js +27 -14
  118. package/hooks/features/selection/gridSelectionSelector.d.ts +1 -3
  119. package/hooks/features/selection/useGridSelection.d.ts +4 -2
  120. package/hooks/features/selection/useGridSelection.js +75 -27
  121. package/hooks/features/selection/useGridSelectionPreProcessors.js +2 -2
  122. package/hooks/features/sorting/gridSortingSelector.d.ts +1 -3
  123. package/hooks/features/sorting/gridSortingUtils.d.ts +1 -2
  124. package/hooks/features/sorting/useGridSorting.js +13 -13
  125. package/hooks/features/statePersistence/useGridStatePersistence.js +2 -2
  126. package/hooks/features/virtualization/useGridVirtualScroller.d.ts +9 -0
  127. package/hooks/features/virtualization/useGridVirtualScroller.js +64 -27
  128. package/hooks/utils/useGridRootProps.d.ts +1 -1
  129. package/hooks/utils/useGridVisibleRows.d.ts +2 -2
  130. package/index.js +1 -1
  131. package/internals/index.d.ts +4 -6
  132. package/internals/index.js +3 -3
  133. package/legacy/DataGrid/DataGrid.js +28 -5
  134. package/legacy/DataGrid/useDataGridComponent.js +5 -5
  135. package/legacy/colDef/gridDateColDef.js +2 -2
  136. package/legacy/{models/colDef → colDef}/gridDefaultColumnTypes.js +6 -6
  137. package/legacy/colDef/index.js +2 -1
  138. package/legacy/components/GridRow.js +53 -24
  139. package/legacy/components/base/GridOverlays.js +4 -3
  140. package/legacy/components/cell/GridActionsCell.js +188 -27
  141. package/legacy/components/cell/GridActionsCellItem.js +7 -5
  142. package/legacy/components/cell/GridCell.js +31 -9
  143. package/legacy/components/cell/GridEditInputCell.js +3 -3
  144. package/legacy/components/cell/GridEditSingleSelectCell.js +35 -26
  145. package/legacy/components/columnHeaders/{ColumnHeaderFilterIcon.js → GridColumnHeaderFilterIconButton.js} +22 -4
  146. package/legacy/components/columnHeaders/GridColumnHeaderItem.js +9 -12
  147. package/legacy/components/columnHeaders/GridColumnHeaders.js +2 -3
  148. package/legacy/components/columnHeaders/index.js +1 -0
  149. package/legacy/components/columnSelection/GridCellCheckboxRenderer.js +23 -5
  150. package/legacy/components/containers/GridRoot.js +34 -17
  151. package/legacy/components/containers/GridRootStyles.js +26 -5
  152. package/legacy/components/menu/GridMenu.js +1 -0
  153. package/legacy/components/menu/columnMenu/GridColumnMenu.js +1 -1
  154. package/legacy/components/panel/GridPanel.js +1 -0
  155. package/legacy/components/panel/GridPreferencesPanel.js +1 -1
  156. package/legacy/components/panel/filterPanel/GridFilterForm.js +14 -10
  157. package/legacy/components/panel/filterPanel/GridFilterInputBoolean.js +13 -8
  158. package/legacy/components/panel/filterPanel/GridFilterInputSingleSelect.js +22 -17
  159. package/legacy/components/panel/filterPanel/GridFilterInputValue.js +22 -17
  160. package/legacy/components/toolbar/GridToolbarDensitySelector.js +1 -1
  161. package/legacy/components/virtualization/GridVirtualScroller.js +2 -0
  162. package/legacy/components/virtualization/GridVirtualScrollerContent.js +1 -3
  163. package/legacy/constants/defaultGridSlotsComponents.js +4 -2
  164. package/legacy/constants/gridClasses.js +1 -1
  165. package/legacy/constants/gridDetailPanelToggleField.js +2 -0
  166. package/legacy/constants/localeTextConstants.js +3 -1
  167. package/legacy/hooks/core/{preProcessing/gridPreProcessingApi.js → pipeProcessing/gridPipeProcessingApi.js} +0 -0
  168. package/legacy/hooks/core/pipeProcessing/index.js +4 -0
  169. package/legacy/hooks/core/pipeProcessing/useGridPipeProcessing.js +119 -0
  170. package/legacy/hooks/core/{preProcessing/useGridRegisterPreProcessor.js → pipeProcessing/useGridRegisterPipeApplier.js} +2 -6
  171. package/legacy/hooks/core/pipeProcessing/useGridRegisterPipeProcessor.js +27 -0
  172. package/legacy/hooks/core/strategyProcessing/useGridStrategyProcessing.js +26 -15
  173. package/legacy/hooks/core/useGridInitialization.js +2 -2
  174. package/legacy/hooks/features/columnHeaders/useGridColumnHeaders.js +90 -11
  175. package/legacy/hooks/features/columnMenu/useGridColumnMenu.js +2 -1
  176. package/legacy/hooks/features/columns/gridColumnsUtils.js +120 -32
  177. package/legacy/hooks/features/columns/useGridColumnSpanning.js +107 -0
  178. package/legacy/hooks/features/columns/useGridColumns.js +55 -40
  179. package/legacy/hooks/features/dimensions/useGridDimensions.js +5 -4
  180. package/legacy/hooks/features/editRows/useGridCellEditing.new.js +36 -15
  181. package/legacy/hooks/features/editRows/useGridEditing.new.js +7 -3
  182. package/legacy/hooks/features/editRows/useGridRowEditing.new.js +53 -30
  183. package/legacy/hooks/features/events/useGridEvents.js +2 -0
  184. package/legacy/hooks/features/filter/useGridFilter.js +18 -13
  185. package/legacy/hooks/features/focus/useGridFocus.js +19 -9
  186. package/legacy/hooks/features/{keyboard → keyboardNavigation}/useGridKeyboardNavigation.js +66 -12
  187. package/legacy/hooks/features/pagination/useGridPage.js +11 -4
  188. package/legacy/hooks/features/pagination/useGridPageSize.js +3 -3
  189. package/legacy/hooks/features/preferencesPanel/useGridPreferencesPanel.js +18 -5
  190. package/legacy/hooks/features/rows/gridRowsSelector.js +3 -0
  191. package/legacy/hooks/features/rows/gridRowsUtils.js +13 -0
  192. package/legacy/hooks/features/rows/index.js +1 -1
  193. package/legacy/hooks/features/rows/useGridRows.js +35 -9
  194. package/legacy/hooks/features/rows/useGridRowsMeta.js +7 -14
  195. package/legacy/hooks/features/scroll/useGridScroll.js +27 -14
  196. package/legacy/hooks/features/selection/useGridSelection.js +77 -27
  197. package/legacy/hooks/features/selection/useGridSelectionPreProcessors.js +2 -2
  198. package/legacy/hooks/features/sorting/useGridSorting.js +8 -10
  199. package/legacy/hooks/features/statePersistence/useGridStatePersistence.js +2 -2
  200. package/legacy/hooks/features/virtualization/useGridVirtualScroller.js +75 -37
  201. package/legacy/index.js +1 -1
  202. package/legacy/internals/index.js +3 -3
  203. package/legacy/locales/arSD.js +3 -1
  204. package/legacy/locales/bgBG.js +3 -1
  205. package/legacy/locales/csCZ.js +2 -0
  206. package/legacy/locales/daDK.js +37 -31
  207. package/legacy/locales/deDE.js +3 -1
  208. package/legacy/locales/elGR.js +2 -0
  209. package/legacy/locales/esES.js +2 -0
  210. package/legacy/locales/faIR.js +3 -1
  211. package/legacy/locales/fiFI.js +2 -0
  212. package/legacy/locales/frFR.js +2 -0
  213. package/legacy/locales/heIL.js +3 -1
  214. package/legacy/locales/huHU.js +122 -0
  215. package/legacy/locales/index.js +1 -0
  216. package/legacy/locales/itIT.js +2 -0
  217. package/legacy/locales/jaJP.js +2 -0
  218. package/legacy/locales/koKR.js +2 -0
  219. package/legacy/locales/nlNL.js +2 -0
  220. package/legacy/locales/plPL.js +3 -1
  221. package/legacy/locales/ptBR.js +3 -1
  222. package/legacy/locales/ruRU.js +2 -0
  223. package/legacy/locales/skSK.js +2 -0
  224. package/legacy/locales/trTR.js +3 -1
  225. package/legacy/locales/ukUA.js +2 -0
  226. package/legacy/locales/viVN.js +2 -0
  227. package/legacy/locales/zhCN.js +2 -0
  228. package/{modern/hooks/core/preProcessing/gridPreProcessingApi.js → legacy/models/api/gridColumnSpanning.js} +0 -0
  229. package/legacy/models/colDef/index.js +1 -2
  230. package/legacy/models/events/gridEvents.js +10 -3
  231. package/legacy/models/gridColumnSpanning.js +1 -0
  232. package/legacy/models/gridRows.js +1 -33
  233. package/legacy/models/index.js +2 -2
  234. package/legacy/models/params/gridPreferencePanelParams.js +1 -0
  235. package/legacy/models/params/index.js +2 -1
  236. package/locales/arSD.js +3 -1
  237. package/locales/bgBG.js +3 -1
  238. package/locales/csCZ.js +2 -0
  239. package/locales/daDK.js +33 -31
  240. package/locales/deDE.js +3 -1
  241. package/locales/elGR.js +2 -0
  242. package/locales/esES.js +2 -0
  243. package/locales/faIR.js +3 -1
  244. package/locales/fiFI.js +2 -0
  245. package/locales/frFR.js +2 -0
  246. package/locales/heIL.js +3 -1
  247. package/locales/huHU.d.ts +2 -0
  248. package/locales/huHU.js +110 -0
  249. package/locales/index.d.ts +1 -0
  250. package/locales/index.js +1 -0
  251. package/locales/itIT.js +2 -0
  252. package/locales/jaJP.js +2 -0
  253. package/locales/koKR.js +2 -0
  254. package/locales/nlNL.js +2 -0
  255. package/locales/plPL.js +3 -1
  256. package/locales/ptBR.js +3 -1
  257. package/locales/ruRU.js +2 -0
  258. package/locales/skSK.js +2 -0
  259. package/locales/trTR.js +3 -1
  260. package/locales/ukUA.js +2 -0
  261. package/locales/viVN.js +2 -0
  262. package/locales/zhCN.js +2 -0
  263. package/models/api/gridApiCommon.d.ts +3 -2
  264. package/models/api/gridColumnSpanning.d.ts +28 -0
  265. package/models/api/gridColumnSpanning.js +1 -0
  266. package/models/api/gridEditingApi.d.ts +51 -5
  267. package/models/api/gridLocaleTextApi.d.ts +1 -0
  268. package/models/api/gridParamsApi.d.ts +5 -5
  269. package/models/api/gridRowApi.d.ts +8 -2
  270. package/models/colDef/gridColDef.d.ts +38 -28
  271. package/models/colDef/index.d.ts +0 -1
  272. package/models/colDef/index.js +1 -2
  273. package/models/events/gridEventLookup.d.ts +30 -9
  274. package/models/events/gridEvents.d.ts +50 -17
  275. package/models/events/gridEvents.js +10 -3
  276. package/models/gridCell.d.ts +1 -0
  277. package/models/gridColumnSpanning.d.ts +12 -0
  278. package/models/gridColumnSpanning.js +1 -0
  279. package/models/gridEditRowModel.d.ts +1 -1
  280. package/models/gridFilterOperator.d.ts +3 -2
  281. package/models/gridIconSlotsComponent.d.ts +5 -0
  282. package/models/gridRows.d.ts +10 -18
  283. package/models/gridRows.js +1 -31
  284. package/models/gridSlotsComponent.d.ts +5 -0
  285. package/models/gridSlotsComponentsProps.d.ts +1 -0
  286. package/models/gridSortModel.d.ts +3 -4
  287. package/models/index.d.ts +1 -1
  288. package/models/index.js +2 -2
  289. package/models/params/gridCellParams.d.ts +25 -15
  290. package/models/params/gridColumnHeaderParams.d.ts +3 -2
  291. package/models/params/gridEditCellParams.d.ts +2 -3
  292. package/models/params/gridPreferencePanelParams.d.ts +3 -0
  293. package/models/params/gridPreferencePanelParams.js +1 -0
  294. package/models/params/gridRowParams.d.ts +12 -8
  295. package/models/params/gridValueOptionsParams.d.ts +3 -3
  296. package/models/params/index.d.ts +1 -0
  297. package/models/params/index.js +2 -1
  298. package/models/props/DataGridProps.d.ts +37 -17
  299. package/modern/DataGrid/DataGrid.js +28 -5
  300. package/modern/DataGrid/useDataGridComponent.js +5 -5
  301. package/modern/colDef/gridDateColDef.js +2 -2
  302. package/modern/{models/colDef → colDef}/gridDefaultColumnTypes.js +6 -6
  303. package/modern/colDef/index.js +2 -1
  304. package/modern/components/GridRow.js +53 -22
  305. package/modern/components/base/GridOverlays.js +4 -3
  306. package/modern/components/cell/GridActionsCell.js +168 -21
  307. package/modern/components/cell/GridActionsCellItem.js +7 -5
  308. package/modern/components/cell/GridCell.js +30 -9
  309. package/modern/components/cell/GridEditInputCell.js +3 -3
  310. package/modern/components/cell/GridEditSingleSelectCell.js +22 -13
  311. package/modern/components/columnHeaders/{ColumnHeaderFilterIcon.js → GridColumnHeaderFilterIconButton.js} +22 -4
  312. package/modern/components/columnHeaders/GridColumnHeaderItem.js +7 -10
  313. package/modern/components/columnHeaders/GridColumnHeaders.js +1 -1
  314. package/modern/components/columnHeaders/index.js +1 -0
  315. package/modern/components/columnSelection/GridCellCheckboxRenderer.js +22 -5
  316. package/modern/components/containers/GridRoot.js +29 -17
  317. package/modern/components/containers/GridRootStyles.js +36 -1
  318. package/modern/components/menu/GridMenu.js +1 -0
  319. package/modern/components/menu/columnMenu/GridColumnMenu.js +1 -1
  320. package/modern/components/panel/GridPanel.js +1 -0
  321. package/modern/components/panel/GridPreferencesPanel.js +1 -1
  322. package/modern/components/panel/filterPanel/GridFilterForm.js +10 -6
  323. package/modern/components/panel/filterPanel/GridFilterInputBoolean.js +11 -6
  324. package/modern/components/panel/filterPanel/GridFilterInputSingleSelect.js +20 -13
  325. package/modern/components/panel/filterPanel/GridFilterInputValue.js +20 -13
  326. package/modern/components/toolbar/GridToolbarDensitySelector.js +1 -1
  327. package/modern/components/virtualization/GridVirtualScroller.js +2 -0
  328. package/modern/components/virtualization/GridVirtualScrollerContent.js +1 -3
  329. package/modern/constants/defaultGridSlotsComponents.js +4 -2
  330. package/modern/constants/gridClasses.js +1 -1
  331. package/modern/constants/gridDetailPanelToggleField.js +2 -0
  332. package/modern/constants/localeTextConstants.js +3 -1
  333. package/modern/hooks/core/pipeProcessing/gridPipeProcessingApi.js +1 -0
  334. package/modern/hooks/core/pipeProcessing/index.js +4 -0
  335. package/modern/hooks/core/pipeProcessing/useGridPipeProcessing.js +108 -0
  336. package/modern/hooks/core/pipeProcessing/useGridRegisterPipeApplier.js +27 -0
  337. package/modern/hooks/core/pipeProcessing/useGridRegisterPipeProcessor.js +27 -0
  338. package/modern/hooks/core/strategyProcessing/useGridStrategyProcessing.js +26 -15
  339. package/modern/hooks/core/useGridInitialization.js +2 -2
  340. package/modern/hooks/features/columnHeaders/useGridColumnHeaders.js +77 -11
  341. package/modern/hooks/features/columnMenu/useGridColumnMenu.js +2 -1
  342. package/modern/hooks/features/columns/gridColumnsUtils.js +105 -20
  343. package/modern/hooks/features/columns/useGridColumnSpanning.js +107 -0
  344. package/modern/hooks/features/columns/useGridColumns.js +55 -40
  345. package/modern/hooks/features/dimensions/useGridDimensions.js +5 -4
  346. package/modern/hooks/features/editRows/useGridCellEditing.new.js +40 -17
  347. package/modern/hooks/features/editRows/useGridEditing.new.js +7 -3
  348. package/modern/hooks/features/editRows/useGridRowEditing.new.js +44 -21
  349. package/modern/hooks/features/events/useGridEvents.js +2 -0
  350. package/modern/hooks/features/filter/useGridFilter.js +18 -13
  351. package/modern/hooks/features/focus/useGridFocus.js +19 -9
  352. package/modern/hooks/features/{keyboard → keyboardNavigation}/useGridKeyboardNavigation.js +64 -13
  353. package/modern/hooks/features/pagination/useGridPage.js +9 -4
  354. package/modern/hooks/features/pagination/useGridPageSize.js +3 -3
  355. package/modern/hooks/features/preferencesPanel/useGridPreferencesPanel.js +18 -5
  356. package/modern/hooks/features/rows/gridRowsSelector.js +1 -0
  357. package/modern/hooks/features/rows/gridRowsUtils.js +11 -0
  358. package/modern/hooks/features/rows/index.js +1 -1
  359. package/modern/hooks/features/rows/useGridRows.js +25 -5
  360. package/modern/hooks/features/rows/useGridRowsMeta.js +7 -14
  361. package/modern/hooks/features/scroll/useGridScroll.js +25 -10
  362. package/modern/hooks/features/selection/useGridSelection.js +75 -27
  363. package/modern/hooks/features/selection/useGridSelectionPreProcessors.js +2 -2
  364. package/modern/hooks/features/sorting/useGridSorting.js +13 -13
  365. package/modern/hooks/features/statePersistence/useGridStatePersistence.js +2 -2
  366. package/modern/hooks/features/virtualization/useGridVirtualScroller.js +64 -23
  367. package/modern/index.js +1 -1
  368. package/modern/internals/index.js +3 -3
  369. package/modern/locales/arSD.js +3 -1
  370. package/modern/locales/bgBG.js +3 -1
  371. package/modern/locales/csCZ.js +2 -0
  372. package/modern/locales/daDK.js +33 -31
  373. package/modern/locales/deDE.js +3 -1
  374. package/modern/locales/elGR.js +2 -0
  375. package/modern/locales/esES.js +2 -0
  376. package/modern/locales/faIR.js +3 -1
  377. package/modern/locales/fiFI.js +2 -0
  378. package/modern/locales/frFR.js +2 -0
  379. package/modern/locales/heIL.js +3 -1
  380. package/modern/locales/huHU.js +110 -0
  381. package/modern/locales/index.js +1 -0
  382. package/modern/locales/itIT.js +2 -0
  383. package/modern/locales/jaJP.js +2 -0
  384. package/modern/locales/koKR.js +2 -0
  385. package/modern/locales/nlNL.js +2 -0
  386. package/modern/locales/plPL.js +3 -1
  387. package/modern/locales/ptBR.js +3 -1
  388. package/modern/locales/ruRU.js +2 -0
  389. package/modern/locales/skSK.js +2 -0
  390. package/modern/locales/trTR.js +3 -1
  391. package/modern/locales/ukUA.js +2 -0
  392. package/modern/locales/viVN.js +2 -0
  393. package/modern/locales/zhCN.js +2 -0
  394. package/modern/models/api/gridColumnSpanning.js +1 -0
  395. package/modern/models/colDef/index.js +1 -2
  396. package/modern/models/events/gridEvents.js +10 -3
  397. package/modern/models/gridColumnSpanning.js +1 -0
  398. package/modern/models/gridRows.js +1 -31
  399. package/modern/models/index.js +2 -2
  400. package/modern/models/params/gridPreferencePanelParams.js +1 -0
  401. package/modern/models/params/index.js +2 -1
  402. package/node/DataGrid/DataGrid.js +28 -5
  403. package/node/DataGrid/useDataGridComponent.js +6 -6
  404. package/node/colDef/gridDateColDef.js +2 -2
  405. package/node/{models/colDef → colDef}/gridDefaultColumnTypes.js +6 -6
  406. package/node/colDef/index.js +13 -0
  407. package/node/components/GridRow.js +56 -24
  408. package/node/components/base/GridOverlays.js +3 -2
  409. package/node/components/cell/GridActionsCell.js +172 -21
  410. package/node/components/cell/GridActionsCellItem.js +7 -4
  411. package/node/components/cell/GridCell.js +30 -9
  412. package/node/components/cell/GridEditInputCell.js +3 -3
  413. package/node/components/cell/GridEditSingleSelectCell.js +25 -15
  414. package/node/components/columnHeaders/{ColumnHeaderFilterIcon.js → GridColumnHeaderFilterIconButton.js} +23 -5
  415. package/node/components/columnHeaders/GridColumnHeaderItem.js +9 -13
  416. package/node/components/columnHeaders/GridColumnHeaders.js +1 -1
  417. package/node/components/columnHeaders/index.js +13 -0
  418. package/node/components/columnSelection/GridCellCheckboxRenderer.js +22 -5
  419. package/node/components/containers/GridRoot.js +28 -17
  420. package/node/components/containers/GridRootStyles.js +36 -1
  421. package/node/components/menu/GridMenu.js +1 -0
  422. package/node/components/menu/columnMenu/GridColumnMenu.js +1 -1
  423. package/node/components/panel/GridPanel.js +1 -0
  424. package/node/components/panel/GridPreferencesPanel.js +1 -1
  425. package/node/components/panel/filterPanel/GridFilterForm.js +15 -10
  426. package/node/components/panel/filterPanel/GridFilterInputBoolean.js +14 -8
  427. package/node/components/panel/filterPanel/GridFilterInputSingleSelect.js +23 -15
  428. package/node/components/panel/filterPanel/GridFilterInputValue.js +23 -15
  429. package/node/components/toolbar/GridToolbarDensitySelector.js +1 -1
  430. package/node/components/virtualization/GridVirtualScroller.js +2 -0
  431. package/node/components/virtualization/GridVirtualScrollerContent.js +1 -3
  432. package/node/constants/defaultGridSlotsComponents.js +3 -1
  433. package/node/constants/gridClasses.js +1 -1
  434. package/node/constants/gridDetailPanelToggleField.js +9 -0
  435. package/node/constants/localeTextConstants.js +3 -1
  436. package/node/hooks/core/{preProcessing/gridPreProcessingApi.js → pipeProcessing/gridPipeProcessingApi.js} +0 -0
  437. package/node/hooks/core/pipeProcessing/index.js +57 -0
  438. package/node/hooks/core/pipeProcessing/useGridPipeProcessing.js +124 -0
  439. package/node/hooks/core/{preProcessing/useGridRegisterPreProcessor.js → pipeProcessing/useGridRegisterPipeApplier.js} +4 -7
  440. package/node/hooks/core/pipeProcessing/useGridRegisterPipeProcessor.js +42 -0
  441. package/node/hooks/core/strategyProcessing/useGridStrategyProcessing.js +26 -15
  442. package/node/hooks/core/useGridInitialization.js +2 -2
  443. package/node/hooks/features/columnHeaders/useGridColumnHeaders.js +81 -11
  444. package/node/hooks/features/columnMenu/useGridColumnMenu.js +2 -1
  445. package/node/hooks/features/columns/gridColumnsUtils.js +114 -25
  446. package/node/hooks/features/columns/useGridColumnSpanning.js +130 -0
  447. package/node/hooks/features/columns/useGridColumns.js +55 -40
  448. package/node/hooks/features/dimensions/useGridDimensions.js +5 -4
  449. package/node/hooks/features/editRows/useGridCellEditing.new.js +42 -17
  450. package/node/hooks/features/editRows/useGridEditing.new.js +6 -2
  451. package/node/hooks/features/editRows/useGridRowEditing.new.js +45 -21
  452. package/node/hooks/features/events/useGridEvents.js +2 -0
  453. package/node/hooks/features/filter/useGridFilter.js +18 -13
  454. package/node/hooks/features/focus/useGridFocus.js +19 -9
  455. package/node/hooks/features/{keyboard → keyboardNavigation}/useGridKeyboardNavigation.js +69 -13
  456. package/node/hooks/features/pagination/useGridPage.js +8 -3
  457. package/node/hooks/features/pagination/useGridPageSize.js +3 -3
  458. package/node/hooks/features/preferencesPanel/useGridPreferencesPanel.js +20 -5
  459. package/node/hooks/features/rows/gridRowsSelector.js +3 -1
  460. package/node/hooks/features/rows/gridRowsUtils.js +18 -0
  461. package/node/hooks/features/rows/index.js +15 -1
  462. package/node/hooks/features/rows/useGridRows.js +29 -9
  463. package/node/hooks/features/rows/useGridRowsMeta.js +7 -15
  464. package/node/hooks/features/scroll/useGridScroll.js +28 -14
  465. package/node/hooks/features/selection/useGridSelection.js +75 -26
  466. package/node/hooks/features/selection/useGridSelectionPreProcessors.js +2 -2
  467. package/node/hooks/features/sorting/useGridSorting.js +13 -13
  468. package/node/hooks/features/statePersistence/useGridStatePersistence.js +2 -2
  469. package/node/hooks/features/virtualization/useGridVirtualScroller.js +69 -27
  470. package/node/index.js +1 -1
  471. package/node/internals/index.js +12 -12
  472. package/node/locales/arSD.js +3 -1
  473. package/node/locales/bgBG.js +3 -1
  474. package/node/locales/csCZ.js +2 -0
  475. package/node/locales/daDK.js +33 -31
  476. package/node/locales/deDE.js +3 -1
  477. package/node/locales/elGR.js +2 -0
  478. package/node/locales/esES.js +2 -0
  479. package/node/locales/faIR.js +3 -1
  480. package/node/locales/fiFI.js +2 -0
  481. package/node/locales/frFR.js +2 -0
  482. package/node/locales/heIL.js +3 -1
  483. package/node/locales/huHU.js +120 -0
  484. package/node/locales/index.js +13 -0
  485. package/node/locales/itIT.js +2 -0
  486. package/node/locales/jaJP.js +2 -0
  487. package/node/locales/koKR.js +2 -0
  488. package/node/locales/nlNL.js +2 -0
  489. package/node/locales/plPL.js +3 -1
  490. package/node/locales/ptBR.js +3 -1
  491. package/node/locales/ruRU.js +2 -0
  492. package/node/locales/skSK.js +2 -0
  493. package/node/locales/trTR.js +3 -1
  494. package/node/locales/ukUA.js +2 -0
  495. package/node/locales/viVN.js +2 -0
  496. package/node/locales/zhCN.js +2 -0
  497. package/node/models/api/gridColumnSpanning.js +5 -0
  498. package/node/models/colDef/index.js +0 -13
  499. package/node/models/events/gridEvents.js +10 -3
  500. package/node/models/gridColumnSpanning.js +5 -0
  501. package/node/models/gridRows.js +1 -34
  502. package/node/models/index.js +13 -13
  503. package/node/models/params/gridPreferencePanelParams.js +5 -0
  504. package/node/models/params/index.js +13 -0
  505. package/package.json +4 -4
  506. package/utils/domUtils.d.ts +2 -2
  507. package/components/columnHeaders/ColumnHeaderFilterIcon.d.ts +0 -5
  508. package/hooks/core/preProcessing/gridPreProcessingApi.d.ts +0 -67
  509. package/hooks/core/preProcessing/index.d.ts +0 -3
  510. package/hooks/core/preProcessing/index.js +0 -3
  511. package/hooks/core/preProcessing/useGridPreProcessing.d.ts +0 -6
  512. package/hooks/core/preProcessing/useGridPreProcessing.js +0 -53
  513. package/hooks/core/preProcessing/useGridRegisterPreProcessor.d.ts +0 -7
  514. package/hooks/features/keyboard/useGridKeyboard.d.ts +0 -10
  515. package/hooks/features/keyboard/useGridKeyboard.js +0 -70
  516. package/legacy/hooks/core/preProcessing/index.js +0 -3
  517. package/legacy/hooks/core/preProcessing/useGridPreProcessing.js +0 -62
  518. package/legacy/hooks/features/keyboard/useGridKeyboard.js +0 -70
  519. package/modern/hooks/core/preProcessing/index.js +0 -3
  520. package/modern/hooks/core/preProcessing/useGridPreProcessing.js +0 -53
  521. package/modern/hooks/features/keyboard/useGridKeyboard.js +0 -70
  522. package/node/hooks/core/preProcessing/index.js +0 -44
  523. package/node/hooks/core/preProcessing/useGridPreProcessing.js +0 -72
  524. package/node/hooks/features/keyboard/useGridKeyboard.js +0 -91
@@ -11,8 +11,12 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
11
11
 
12
12
  var React = _interopRequireWildcard(require("react"));
13
13
 
14
+ var ReactDOM = _interopRequireWildcard(require("react-dom"));
15
+
14
16
  var _utils = require("@mui/material/utils");
15
17
 
18
+ var _reselect = require("reselect");
19
+
16
20
  var _useGridApiContext = require("../../utils/useGridApiContext");
17
21
 
18
22
  var _useGridSelector = require("../../utils/useGridSelector");
@@ -37,12 +41,22 @@ var _events = require("../../../models/events");
37
41
 
38
42
  var _GridColumnHeaderItem = require("../../../components/columnHeaders/GridColumnHeaderItem");
39
43
 
44
+ var _gridColumnsUtils = require("../columns/gridColumnsUtils");
45
+
46
+ var _useGridVisibleRows = require("../../utils/useGridVisibleRows");
47
+
48
+ var _useGridVirtualScroller = require("../virtualization/useGridVirtualScroller");
49
+
40
50
  var _jsxRuntime = require("react/jsx-runtime");
41
51
 
42
52
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
43
53
 
44
54
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
45
55
 
56
+ function isUIEvent(event) {
57
+ return !!event.target;
58
+ }
59
+
46
60
  const useGridColumnHeaders = props => {
47
61
  const {
48
62
  innerRef: innerRefProp,
@@ -66,18 +80,43 @@ const useGridColumnHeaders = props => {
66
80
  const [renderContext, setRenderContext] = React.useState(null);
67
81
  const prevRenderContext = React.useRef(renderContext);
68
82
  const prevScrollLeft = React.useRef(0);
83
+ const currentPage = (0, _useGridVisibleRows.useGridVisibleRows)(apiRef, rootProps);
69
84
  React.useEffect(() => {
70
85
  apiRef.current.columnHeadersContainerElementRef.current.scrollLeft = 0;
71
- }, [apiRef]);
86
+ }, [apiRef]); // memoize `getFirstColumnIndexToRender`, since it's called on scroll
87
+
88
+ const getFirstColumnIndexToRenderRef = React.useRef((0, _reselect.defaultMemoize)(_gridColumnsUtils.getFirstColumnIndexToRender, {
89
+ equalityCheck: (a, b) => ['firstColumnIndex', 'minColumnIndex', 'columnBuffer'].every(key => a[key] === b[key])
90
+ }));
72
91
  const updateInnerPosition = React.useCallback(nextRenderContext => {
73
- const firstColumnToRender = Math.max(nextRenderContext.firstColumnIndex - rootProps.columnBuffer, minColumnIndex);
92
+ const [firstRowToRender, lastRowToRender] = (0, _useGridVirtualScroller.getRenderableIndexes)({
93
+ firstIndex: nextRenderContext.firstRowIndex,
94
+ lastIndex: nextRenderContext.lastRowIndex,
95
+ minFirstIndex: 0,
96
+ maxLastIndex: currentPage.rows.length,
97
+ buffer: rootProps.rowBuffer
98
+ });
99
+ const firstColumnToRender = getFirstColumnIndexToRenderRef.current({
100
+ firstColumnIndex: nextRenderContext.firstColumnIndex,
101
+ minColumnIndex,
102
+ columnBuffer: rootProps.columnBuffer,
103
+ firstRowToRender,
104
+ lastRowToRender,
105
+ apiRef,
106
+ visibleRows: currentPage.rows
107
+ });
74
108
  const offset = firstColumnToRender > 0 ? prevScrollLeft.current - columnPositions[firstColumnToRender] : prevScrollLeft.current;
75
109
  innerRef.current.style.transform = `translate3d(${-offset}px, 0px, 0px)`;
76
- }, [columnPositions, minColumnIndex, rootProps.columnBuffer]);
110
+ }, [columnPositions, minColumnIndex, rootProps.columnBuffer, apiRef, currentPage.rows, rootProps.rowBuffer]);
111
+ React.useLayoutEffect(() => {
112
+ if (renderContext) {
113
+ updateInnerPosition(renderContext);
114
+ }
115
+ }, [renderContext, updateInnerPosition]);
77
116
  const handleScroll = React.useCallback(({
78
117
  left,
79
118
  renderContext: nextRenderContext = null
80
- }) => {
119
+ }, event) => {
81
120
  var _prevRenderContext$cu, _prevRenderContext$cu2;
82
121
 
83
122
  if (!innerRef.current) {
@@ -90,15 +129,32 @@ const useGridColumnHeaders = props => {
90
129
  return;
91
130
  }
92
131
 
93
- prevScrollLeft.current = left;
132
+ prevScrollLeft.current = left; // We can only update the position when we guarantee that the render context has been
133
+ // rendered. This is achieved using ReactDOM.flushSync or when the context doesn't change.
134
+
135
+ let canUpdateInnerPosition = false;
94
136
 
95
137
  if (nextRenderContext !== prevRenderContext.current || !prevRenderContext.current) {
96
- setRenderContext(nextRenderContext);
138
+ // ReactDOM.flushSync cannot be called on `scroll` events fired inside effects
139
+ if (isUIEvent(event)) {
140
+ // To prevent flickering, the inner position can only be updated after the new context has
141
+ // been rendered. ReactDOM.flushSync ensures that the state changes will happen before
142
+ // updating the position.
143
+ ReactDOM.flushSync(() => {
144
+ setRenderContext(nextRenderContext);
145
+ });
146
+ canUpdateInnerPosition = true;
147
+ } else {
148
+ setRenderContext(nextRenderContext);
149
+ }
150
+
97
151
  prevRenderContext.current = nextRenderContext;
152
+ } else {
153
+ canUpdateInnerPosition = true;
98
154
  } // Pass directly the render context to avoid waiting for the next render
99
155
 
100
156
 
101
- if (nextRenderContext) {
157
+ if (nextRenderContext && canUpdateInnerPosition) {
102
158
  updateInnerPosition(nextRenderContext);
103
159
  }
104
160
  }, [updateInnerPosition]);
@@ -124,7 +180,22 @@ const useGridColumnHeaders = props => {
124
180
  }
125
181
 
126
182
  const columns = [];
127
- const firstColumnToRender = Math.max(nextRenderContext.firstColumnIndex - rootProps.columnBuffer, minFirstColumn);
183
+ const [firstRowToRender, lastRowToRender] = (0, _useGridVirtualScroller.getRenderableIndexes)({
184
+ firstIndex: nextRenderContext.firstRowIndex,
185
+ lastIndex: nextRenderContext.lastRowIndex,
186
+ minFirstIndex: 0,
187
+ maxLastIndex: currentPage.rows.length,
188
+ buffer: rootProps.rowBuffer
189
+ });
190
+ const firstColumnToRender = getFirstColumnIndexToRenderRef.current({
191
+ firstColumnIndex: nextRenderContext.firstColumnIndex,
192
+ minColumnIndex: minFirstColumn,
193
+ columnBuffer: rootProps.columnBuffer,
194
+ apiRef,
195
+ firstRowToRender,
196
+ lastRowToRender,
197
+ visibleRows: currentPage.rows
198
+ });
128
199
  const lastColumnToRender = Math.min(nextRenderContext.lastColumnIndex + rootProps.columnBuffer, maxLastColumn);
129
200
  const renderedColumns = visibleColumns.slice(firstColumnToRender, lastColumnToRender);
130
201
 
@@ -144,11 +215,11 @@ const useGridColumnHeaders = props => {
144
215
  column: column,
145
216
  colIndex: columnIndex,
146
217
  isResizing: resizeCol === column.field,
147
- isLastColumn: columnIndex === columns.length - 1,
218
+ isLastColumn: columnIndex === visibleColumns.length - 1,
148
219
  extendRowFullWidth: !rootProps.disableExtendRowFullWidth,
149
220
  hasFocus: hasFocus,
150
221
  tabIndex: tabIndex
151
- }, other), i));
222
+ }, other), column.field));
152
223
  }
153
224
 
154
225
  return columns;
@@ -163,7 +234,6 @@ const useGridColumnHeaders = props => {
163
234
  renderContext,
164
235
  getColumns,
165
236
  isDragging: !!dragCol,
166
- updateInnerPosition,
167
237
  getRootProps: (other = {}) => (0, _extends2.default)({
168
238
  style: rootStyle
169
239
  }, other),
@@ -100,7 +100,8 @@ const useGridColumnMenu = apiRef => {
100
100
  */
101
101
 
102
102
  (0, _utils.useGridApiEventHandler)(apiRef, _events.GridEvents.columnResizeStart, hideColumnMenu);
103
- (0, _utils.useGridApiEventHandler)(apiRef, _events.GridEvents.rowsScroll, hideColumnMenu);
103
+ (0, _utils.useGridApiEventHandler)(apiRef, _events.GridEvents.virtualScrollerWheel, apiRef.current.hideColumnMenu);
104
+ (0, _utils.useGridApiEventHandler)(apiRef, _events.GridEvents.virtualScrollerTouchMove, apiRef.current.hideColumnMenu);
104
105
  };
105
106
 
106
107
  exports.useGridColumnMenu = useGridColumnMenu;
@@ -7,11 +7,14 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.computeColumnTypes = exports.applyInitialState = exports.COLUMNS_DIMENSION_PROPERTIES = void 0;
9
9
  exports.computeFlexColumnsWidth = computeFlexColumnsWidth;
10
- exports.mergeColumnsState = exports.hydrateColumnsWidth = exports.getGridColDef = exports.createColumnsState = void 0;
10
+ exports.createColumnsState = void 0;
11
+ exports.getFirstColumnIndexToRender = getFirstColumnIndexToRender;
12
+ exports.getFirstNonSpannedColumnToRender = getFirstNonSpannedColumnToRender;
13
+ exports.mergeColumnsState = exports.hydrateColumnsWidth = exports.getGridColDef = void 0;
11
14
 
12
15
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
13
16
 
14
- var _models = require("../../../models");
17
+ var _colDef = require("../../../colDef");
15
18
 
16
19
  var _gridColumnsSelector = require("./gridColumnsSelector");
17
20
 
@@ -21,12 +24,12 @@ const COLUMNS_DIMENSION_PROPERTIES = ['maxWidth', 'minWidth', 'width', 'flex'];
21
24
  exports.COLUMNS_DIMENSION_PROPERTIES = COLUMNS_DIMENSION_PROPERTIES;
22
25
 
23
26
  const computeColumnTypes = (customColumnTypes = {}) => {
24
- const mergedColumnTypes = (0, _extends2.default)({}, (0, _models.getGridDefaultColumnTypes)());
27
+ const mergedColumnTypes = (0, _extends2.default)({}, (0, _colDef.getGridDefaultColumnTypes)());
25
28
  Object.entries(customColumnTypes).forEach(([colType, colTypeDef]) => {
26
29
  if (mergedColumnTypes[colType]) {
27
30
  mergedColumnTypes[colType] = (0, _extends2.default)({}, mergedColumnTypes[colType], colTypeDef);
28
31
  } else {
29
- mergedColumnTypes[colType] = (0, _extends2.default)({}, mergedColumnTypes[colTypeDef.extendType || _models.DEFAULT_GRID_COL_TYPE_KEY], colTypeDef);
32
+ mergedColumnTypes[colType] = (0, _extends2.default)({}, mergedColumnTypes[colTypeDef.extendType || _colDef.DEFAULT_GRID_COL_TYPE_KEY], colTypeDef);
30
33
  }
31
34
  });
32
35
  return mergedColumnTypes;
@@ -227,9 +230,13 @@ const applyInitialState = (columnsState, initialState) => {
227
230
 
228
231
  for (let i = 0; i < columnsWithUpdatedDimensions.length; i += 1) {
229
232
  const field = columnsWithUpdatedDimensions[i];
230
- newColumnLookup[field] = (0, _extends2.default)({}, newColumnLookup[field], dimensions[field], {
233
+ const newColDef = (0, _extends2.default)({}, newColumnLookup[field], {
231
234
  hasBeenResized: true
232
235
  });
236
+ Object.entries(dimensions[field]).forEach(([key, value]) => {
237
+ newColDef[key] = value === -1 ? Infinity : value;
238
+ });
239
+ newColumnLookup[field] = newColDef;
233
240
  }
234
241
 
235
242
  const newColumnsState = {
@@ -247,7 +254,7 @@ exports.applyInitialState = applyInitialState;
247
254
 
248
255
  const getGridColDef = (columnTypes, type) => {
249
256
  if (!type) {
250
- return columnTypes[_models.DEFAULT_GRID_COL_TYPE_KEY];
257
+ return columnTypes[_colDef.DEFAULT_GRID_COL_TYPE_KEY];
251
258
  }
252
259
 
253
260
  if (process.env.NODE_ENV !== 'production') {
@@ -258,7 +265,7 @@ const getGridColDef = (columnTypes, type) => {
258
265
  }
259
266
 
260
267
  if (!columnTypes[type]) {
261
- return columnTypes[_models.DEFAULT_GRID_COL_TYPE_KEY];
268
+ return columnTypes[_colDef.DEFAULT_GRID_COL_TYPE_KEY];
262
269
  }
263
270
 
264
271
  return columnTypes[type];
@@ -270,7 +277,7 @@ const createColumnsState = ({
270
277
  apiRef,
271
278
  columnsToUpsert,
272
279
  initialState,
273
- columnsTypes,
280
+ columnTypes,
274
281
  currentColumnVisibilityModel = (0, _gridColumnsSelector.gridColumnVisibilityModelSelector)(apiRef),
275
282
  shouldRegenColumnVisibilityModelFromColumns,
276
283
  keepOnlyColumnsToUpsert = false
@@ -280,7 +287,7 @@ const createColumnsState = ({
280
287
  const isInsideStateInitializer = !apiRef.current.state.columns;
281
288
  let columnsStateWithoutColumnVisibilityModel;
282
289
 
283
- if (isInsideStateInitializer || keepOnlyColumnsToUpsert) {
290
+ if (isInsideStateInitializer) {
284
291
  columnsStateWithoutColumnVisibilityModel = {
285
292
  all: [],
286
293
  lookup: {}
@@ -288,31 +295,68 @@ const createColumnsState = ({
288
295
  } else {
289
296
  const currentState = (0, _gridColumnsSelector.gridColumnsSelector)(apiRef.current.state);
290
297
  columnsStateWithoutColumnVisibilityModel = {
291
- all: [...currentState.all],
292
- lookup: (0, _extends2.default)({}, currentState.lookup)
298
+ all: keepOnlyColumnsToUpsert ? [] : [...currentState.all],
299
+ lookup: (0, _extends2.default)({}, currentState.lookup) // Will be cleaned later if keepOnlyColumnsToUpsert=true
300
+
293
301
  };
294
302
  }
295
303
 
304
+ let columnsToKeep = {};
305
+
306
+ if (keepOnlyColumnsToUpsert && !isInsideStateInitializer) {
307
+ columnsToKeep = Object.keys(columnsStateWithoutColumnVisibilityModel.lookup).reduce((acc, key) => (0, _extends2.default)({}, acc, {
308
+ [key]: false
309
+ }), {});
310
+ }
311
+
296
312
  const columnsToUpsertLookup = {};
297
313
  columnsToUpsert.forEach(newColumn => {
298
- columnsToUpsertLookup[newColumn.field] = true;
299
-
300
- if (columnsStateWithoutColumnVisibilityModel.lookup[newColumn.field] == null) {
314
+ const {
315
+ field
316
+ } = newColumn;
317
+ columnsToUpsertLookup[field] = true;
318
+ columnsToKeep[field] = true;
319
+ let existingState = columnsStateWithoutColumnVisibilityModel.lookup[field];
320
+
321
+ if (existingState == null) {
301
322
  // New Column
302
- columnsStateWithoutColumnVisibilityModel.lookup[newColumn.field] = (0, _extends2.default)({}, getGridColDef(columnsTypes, newColumn.type), newColumn);
303
- columnsStateWithoutColumnVisibilityModel.all.push(newColumn.field);
304
- } else {
305
- const mergedColumn = (0, _extends2.default)({}, columnsStateWithoutColumnVisibilityModel.lookup[newColumn.field], newColumn);
323
+ existingState = (0, _extends2.default)({}, getGridColDef(columnTypes, newColumn.type), {
324
+ // TODO v6: Inline `getGridColDef`
325
+ field,
326
+ hasBeenResized: false
327
+ });
328
+ columnsStateWithoutColumnVisibilityModel.all.push(field);
329
+ } else if (keepOnlyColumnsToUpsert) {
330
+ columnsStateWithoutColumnVisibilityModel.all.push(field);
331
+ }
306
332
 
307
- if (!mergedColumn.hasBeenResized && COLUMNS_DIMENSION_PROPERTIES.some(propertyName => newColumn[propertyName] !== undefined)) {
308
- mergedColumn.hasBeenResized = true;
309
- }
333
+ let hasBeenResized = existingState.hasBeenResized;
334
+ COLUMNS_DIMENSION_PROPERTIES.forEach(key => {
335
+ if (newColumn[key] !== undefined) {
336
+ hasBeenResized = true;
310
337
 
311
- columnsStateWithoutColumnVisibilityModel.lookup[newColumn.field] = mergedColumn;
312
- }
338
+ if (newColumn[key] === -1) {
339
+ newColumn[key] = Infinity;
340
+ }
341
+ }
342
+ });
343
+ columnsStateWithoutColumnVisibilityModel.lookup[field] = (0, _extends2.default)({}, existingState, {
344
+ hide: newColumn.hide == null ? false : newColumn.hide
345
+ }, newColumn, {
346
+ hasBeenResized
347
+ });
313
348
  });
349
+
350
+ if (keepOnlyColumnsToUpsert && !isInsideStateInitializer) {
351
+ Object.keys(columnsStateWithoutColumnVisibilityModel.lookup).forEach(field => {
352
+ if (!columnsToKeep[field]) {
353
+ delete columnsStateWithoutColumnVisibilityModel.lookup[field];
354
+ }
355
+ });
356
+ }
357
+
314
358
  const columnsLookupBeforePreProcessing = (0, _extends2.default)({}, columnsStateWithoutColumnVisibilityModel.lookup);
315
- const columnsStateWithPreProcessing = apiRef.current.unstable_applyPreProcessors('hydrateColumns', columnsStateWithoutColumnVisibilityModel); // TODO v6: remove the sync between the columns `hide` option and the model.
359
+ const columnsStateWithPreProcessing = apiRef.current.unstable_applyPipeProcessors('hydrateColumns', columnsStateWithoutColumnVisibilityModel); // TODO v6: remove the sync between the columns `hide` option and the model.
316
360
 
317
361
  let columnVisibilityModel = {};
318
362
 
@@ -389,4 +433,49 @@ const mergeColumnsState = columnsState => state => (0, _extends2.default)({}, st
389
433
  columns: columnsState
390
434
  });
391
435
 
392
- exports.mergeColumnsState = mergeColumnsState;
436
+ exports.mergeColumnsState = mergeColumnsState;
437
+
438
+ function getFirstNonSpannedColumnToRender({
439
+ firstColumnToRender,
440
+ apiRef,
441
+ firstRowToRender,
442
+ lastRowToRender,
443
+ visibleRows
444
+ }) {
445
+ let firstNonSpannedColumnToRender = firstColumnToRender;
446
+
447
+ for (let i = firstRowToRender; i < lastRowToRender; i += 1) {
448
+ const row = visibleRows[i];
449
+
450
+ if (row) {
451
+ const rowId = visibleRows[i].id;
452
+ const cellColSpanInfo = apiRef.current.unstable_getCellColSpanInfo(rowId, firstColumnToRender);
453
+
454
+ if (cellColSpanInfo && cellColSpanInfo.spannedByColSpan) {
455
+ firstNonSpannedColumnToRender = cellColSpanInfo.leftVisibleCellIndex;
456
+ }
457
+ }
458
+ }
459
+
460
+ return firstNonSpannedColumnToRender;
461
+ }
462
+
463
+ function getFirstColumnIndexToRender({
464
+ firstColumnIndex,
465
+ minColumnIndex,
466
+ columnBuffer,
467
+ firstRowToRender,
468
+ lastRowToRender,
469
+ apiRef,
470
+ visibleRows
471
+ }) {
472
+ const initialFirstColumnToRender = Math.max(firstColumnIndex - columnBuffer, minColumnIndex);
473
+ const firstColumnToRender = getFirstNonSpannedColumnToRender({
474
+ firstColumnToRender: initialFirstColumnToRender,
475
+ apiRef,
476
+ firstRowToRender,
477
+ lastRowToRender,
478
+ visibleRows
479
+ });
480
+ return firstColumnToRender;
481
+ }
@@ -0,0 +1,130 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.useGridColumnSpanning = void 0;
9
+
10
+ var _react = _interopRequireDefault(require("react"));
11
+
12
+ var _useGridApiMethod = require("../../utils/useGridApiMethod");
13
+
14
+ var _useGridApiEventHandler = require("../../utils/useGridApiEventHandler");
15
+
16
+ var _gridEvents = require("../../../models/events/gridEvents");
17
+
18
+ /**
19
+ * @requires useGridColumns (method, event)
20
+ * @requires useGridParamsApi (method)
21
+ */
22
+ const useGridColumnSpanning = apiRef => {
23
+ const lookup = _react.default.useRef({});
24
+
25
+ const setCellColSpanInfo = _react.default.useCallback((rowId, columnIndex, cellColSpanInfo) => {
26
+ const sizes = lookup.current;
27
+
28
+ if (!sizes[rowId]) {
29
+ sizes[rowId] = {};
30
+ }
31
+
32
+ sizes[rowId][columnIndex] = cellColSpanInfo;
33
+ }, []);
34
+
35
+ const getCellColSpanInfo = _react.default.useCallback((rowId, columnIndex) => {
36
+ var _lookup$current$rowId;
37
+
38
+ return (_lookup$current$rowId = lookup.current[rowId]) == null ? void 0 : _lookup$current$rowId[columnIndex];
39
+ }, []); // Calculate `colSpan` for the cell.
40
+
41
+
42
+ const calculateCellColSpan = _react.default.useCallback(params => {
43
+ const {
44
+ columnIndex,
45
+ rowId,
46
+ minFirstColumnIndex,
47
+ maxLastColumnIndex
48
+ } = params;
49
+ const visibleColumns = apiRef.current.getVisibleColumns();
50
+ const columnsLength = visibleColumns.length;
51
+ const column = visibleColumns[columnIndex];
52
+ const colSpan = typeof column.colSpan === 'function' ? column.colSpan(apiRef.current.getCellParams(rowId, column.field)) : column.colSpan;
53
+
54
+ if (!colSpan || colSpan === 1) {
55
+ setCellColSpanInfo(rowId, columnIndex, {
56
+ spannedByColSpan: false,
57
+ cellProps: {
58
+ colSpan: 1,
59
+ width: column.computedWidth
60
+ }
61
+ });
62
+ return {
63
+ colSpan: 1
64
+ };
65
+ }
66
+
67
+ let width = column.computedWidth;
68
+
69
+ for (let j = 1; j < colSpan; j += 1) {
70
+ const nextColumnIndex = columnIndex + j; // Cells should be spanned only within their column section (left-pinned, right-pinned and unpinned).
71
+
72
+ if (nextColumnIndex >= minFirstColumnIndex && nextColumnIndex < maxLastColumnIndex) {
73
+ const nextColumn = visibleColumns[nextColumnIndex];
74
+ width += nextColumn.computedWidth;
75
+ setCellColSpanInfo(rowId, columnIndex + j, {
76
+ spannedByColSpan: true,
77
+ rightVisibleCellIndex: Math.min(columnIndex + colSpan, columnsLength - 1),
78
+ leftVisibleCellIndex: columnIndex
79
+ });
80
+ }
81
+
82
+ setCellColSpanInfo(rowId, columnIndex, {
83
+ spannedByColSpan: false,
84
+ cellProps: {
85
+ colSpan,
86
+ width
87
+ }
88
+ });
89
+ }
90
+
91
+ return {
92
+ colSpan
93
+ };
94
+ }, [apiRef, setCellColSpanInfo]); // Calculate `colSpan` for each cell in the row
95
+
96
+
97
+ const calculateColSpan = _react.default.useCallback(({
98
+ rowId,
99
+ minFirstColumn,
100
+ maxLastColumn
101
+ }) => {
102
+ for (let i = minFirstColumn; i < maxLastColumn; i += 1) {
103
+ const cellProps = calculateCellColSpan({
104
+ columnIndex: i,
105
+ rowId,
106
+ minFirstColumnIndex: minFirstColumn,
107
+ maxLastColumnIndex: maxLastColumn
108
+ });
109
+
110
+ if (cellProps.colSpan > 1) {
111
+ i += cellProps.colSpan - 1;
112
+ }
113
+ }
114
+ }, [calculateCellColSpan]);
115
+
116
+ const columnSpanningApi = {
117
+ unstable_getCellColSpanInfo: getCellColSpanInfo,
118
+ unstable_calculateColSpan: calculateColSpan
119
+ };
120
+ (0, _useGridApiMethod.useGridApiMethod)(apiRef, columnSpanningApi, 'GridColumnSpanningAPI');
121
+
122
+ const handleColumnReorderChange = _react.default.useCallback(() => {
123
+ // `colSpan` needs to be recalculated after column reordering
124
+ lookup.current = {};
125
+ }, []);
126
+
127
+ (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, _gridEvents.GridEvents.columnOrderChange, handleColumnReorderChange);
128
+ };
129
+
130
+ exports.useGridColumnSpanning = useGridColumnSpanning;