@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
@@ -1,5 +1,5 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
- import { DEFAULT_GRID_COL_TYPE_KEY, getGridDefaultColumnTypes } from '../../../models';
2
+ import { DEFAULT_GRID_COL_TYPE_KEY, getGridDefaultColumnTypes } from '../../../colDef';
3
3
  import { gridColumnsSelector, gridColumnVisibilityModelSelector } from './gridColumnsSelector';
4
4
  import { clamp } from '../../../utils/utils';
5
5
  export const COLUMNS_DIMENSION_PROPERTIES = ['maxWidth', 'minWidth', 'width', 'flex'];
@@ -206,9 +206,15 @@ export const applyInitialState = (columnsState, initialState) => {
206
206
 
207
207
  for (let i = 0; i < columnsWithUpdatedDimensions.length; i += 1) {
208
208
  const field = columnsWithUpdatedDimensions[i];
209
- newColumnLookup[field] = _extends({}, newColumnLookup[field], dimensions[field], {
209
+
210
+ const newColDef = _extends({}, newColumnLookup[field], {
210
211
  hasBeenResized: true
211
212
  });
213
+
214
+ Object.entries(dimensions[field]).forEach(([key, value]) => {
215
+ newColDef[key] = value === -1 ? Infinity : value;
216
+ });
217
+ newColumnLookup[field] = newColDef;
212
218
  }
213
219
 
214
220
  const newColumnsState = {
@@ -243,7 +249,7 @@ export const createColumnsState = ({
243
249
  apiRef,
244
250
  columnsToUpsert,
245
251
  initialState,
246
- columnsTypes,
252
+ columnTypes,
247
253
  currentColumnVisibilityModel = gridColumnVisibilityModelSelector(apiRef),
248
254
  shouldRegenColumnVisibilityModelFromColumns,
249
255
  keepOnlyColumnsToUpsert = false
@@ -253,7 +259,7 @@ export const createColumnsState = ({
253
259
  const isInsideStateInitializer = !apiRef.current.state.columns;
254
260
  let columnsStateWithoutColumnVisibilityModel;
255
261
 
256
- if (isInsideStateInitializer || keepOnlyColumnsToUpsert) {
262
+ if (isInsideStateInitializer) {
257
263
  columnsStateWithoutColumnVisibilityModel = {
258
264
  all: [],
259
265
  lookup: {}
@@ -261,33 +267,69 @@ export const createColumnsState = ({
261
267
  } else {
262
268
  const currentState = gridColumnsSelector(apiRef.current.state);
263
269
  columnsStateWithoutColumnVisibilityModel = {
264
- all: [...currentState.all],
265
- lookup: _extends({}, currentState.lookup)
270
+ all: keepOnlyColumnsToUpsert ? [] : [...currentState.all],
271
+ lookup: _extends({}, currentState.lookup) // Will be cleaned later if keepOnlyColumnsToUpsert=true
272
+
266
273
  };
267
274
  }
268
275
 
276
+ let columnsToKeep = {};
277
+
278
+ if (keepOnlyColumnsToUpsert && !isInsideStateInitializer) {
279
+ columnsToKeep = Object.keys(columnsStateWithoutColumnVisibilityModel.lookup).reduce((acc, key) => _extends({}, acc, {
280
+ [key]: false
281
+ }), {});
282
+ }
283
+
269
284
  const columnsToUpsertLookup = {};
270
285
  columnsToUpsert.forEach(newColumn => {
271
- columnsToUpsertLookup[newColumn.field] = true;
272
-
273
- if (columnsStateWithoutColumnVisibilityModel.lookup[newColumn.field] == null) {
286
+ const {
287
+ field
288
+ } = newColumn;
289
+ columnsToUpsertLookup[field] = true;
290
+ columnsToKeep[field] = true;
291
+ let existingState = columnsStateWithoutColumnVisibilityModel.lookup[field];
292
+
293
+ if (existingState == null) {
274
294
  // New Column
275
- columnsStateWithoutColumnVisibilityModel.lookup[newColumn.field] = _extends({}, getGridColDef(columnsTypes, newColumn.type), newColumn);
276
- columnsStateWithoutColumnVisibilityModel.all.push(newColumn.field);
277
- } else {
278
- const mergedColumn = _extends({}, columnsStateWithoutColumnVisibilityModel.lookup[newColumn.field], newColumn);
295
+ existingState = _extends({}, getGridColDef(columnTypes, newColumn.type), {
296
+ // TODO v6: Inline `getGridColDef`
297
+ field,
298
+ hasBeenResized: false
299
+ });
300
+ columnsStateWithoutColumnVisibilityModel.all.push(field);
301
+ } else if (keepOnlyColumnsToUpsert) {
302
+ columnsStateWithoutColumnVisibilityModel.all.push(field);
303
+ }
279
304
 
280
- if (!mergedColumn.hasBeenResized && COLUMNS_DIMENSION_PROPERTIES.some(propertyName => newColumn[propertyName] !== undefined)) {
281
- mergedColumn.hasBeenResized = true;
282
- }
305
+ let hasBeenResized = existingState.hasBeenResized;
306
+ COLUMNS_DIMENSION_PROPERTIES.forEach(key => {
307
+ if (newColumn[key] !== undefined) {
308
+ hasBeenResized = true;
283
309
 
284
- columnsStateWithoutColumnVisibilityModel.lookup[newColumn.field] = mergedColumn;
285
- }
310
+ if (newColumn[key] === -1) {
311
+ newColumn[key] = Infinity;
312
+ }
313
+ }
314
+ });
315
+ columnsStateWithoutColumnVisibilityModel.lookup[field] = _extends({}, existingState, {
316
+ hide: newColumn.hide == null ? false : newColumn.hide
317
+ }, newColumn, {
318
+ hasBeenResized
319
+ });
286
320
  });
287
321
 
322
+ if (keepOnlyColumnsToUpsert && !isInsideStateInitializer) {
323
+ Object.keys(columnsStateWithoutColumnVisibilityModel.lookup).forEach(field => {
324
+ if (!columnsToKeep[field]) {
325
+ delete columnsStateWithoutColumnVisibilityModel.lookup[field];
326
+ }
327
+ });
328
+ }
329
+
288
330
  const columnsLookupBeforePreProcessing = _extends({}, columnsStateWithoutColumnVisibilityModel.lookup);
289
331
 
290
- const columnsStateWithPreProcessing = apiRef.current.unstable_applyPreProcessors('hydrateColumns', columnsStateWithoutColumnVisibilityModel); // TODO v6: remove the sync between the columns `hide` option and the model.
332
+ const columnsStateWithPreProcessing = apiRef.current.unstable_applyPipeProcessors('hydrateColumns', columnsStateWithoutColumnVisibilityModel); // TODO v6: remove the sync between the columns `hide` option and the model.
291
333
 
292
334
  let columnVisibilityModel = {};
293
335
 
@@ -362,4 +404,47 @@ export const createColumnsState = ({
362
404
  };
363
405
  export const mergeColumnsState = columnsState => state => _extends({}, state, {
364
406
  columns: columnsState
365
- });
407
+ });
408
+ export function getFirstNonSpannedColumnToRender({
409
+ firstColumnToRender,
410
+ apiRef,
411
+ firstRowToRender,
412
+ lastRowToRender,
413
+ visibleRows
414
+ }) {
415
+ let firstNonSpannedColumnToRender = firstColumnToRender;
416
+
417
+ for (let i = firstRowToRender; i < lastRowToRender; i += 1) {
418
+ const row = visibleRows[i];
419
+
420
+ if (row) {
421
+ const rowId = visibleRows[i].id;
422
+ const cellColSpanInfo = apiRef.current.unstable_getCellColSpanInfo(rowId, firstColumnToRender);
423
+
424
+ if (cellColSpanInfo && cellColSpanInfo.spannedByColSpan) {
425
+ firstNonSpannedColumnToRender = cellColSpanInfo.leftVisibleCellIndex;
426
+ }
427
+ }
428
+ }
429
+
430
+ return firstNonSpannedColumnToRender;
431
+ }
432
+ export function getFirstColumnIndexToRender({
433
+ firstColumnIndex,
434
+ minColumnIndex,
435
+ columnBuffer,
436
+ firstRowToRender,
437
+ lastRowToRender,
438
+ apiRef,
439
+ visibleRows
440
+ }) {
441
+ const initialFirstColumnToRender = Math.max(firstColumnIndex - columnBuffer, minColumnIndex);
442
+ const firstColumnToRender = getFirstNonSpannedColumnToRender({
443
+ firstColumnToRender: initialFirstColumnToRender,
444
+ apiRef,
445
+ firstRowToRender,
446
+ lastRowToRender,
447
+ visibleRows
448
+ });
449
+ return firstColumnToRender;
450
+ }
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ import { GridApiCommunity } from '../../../models/api/gridApiCommunity';
3
+ /**
4
+ * @requires useGridColumns (method, event)
5
+ * @requires useGridParamsApi (method)
6
+ */
7
+ export declare const useGridColumnSpanning: (apiRef: React.MutableRefObject<GridApiCommunity>) => void;
@@ -0,0 +1,109 @@
1
+ import React from 'react';
2
+ import { useGridApiMethod } from '../../utils/useGridApiMethod';
3
+ import { useGridApiEventHandler } from '../../utils/useGridApiEventHandler';
4
+ import { GridEvents } from '../../../models/events/gridEvents';
5
+
6
+ /**
7
+ * @requires useGridColumns (method, event)
8
+ * @requires useGridParamsApi (method)
9
+ */
10
+ export const useGridColumnSpanning = apiRef => {
11
+ const lookup = React.useRef({});
12
+ const setCellColSpanInfo = React.useCallback((rowId, columnIndex, cellColSpanInfo) => {
13
+ const sizes = lookup.current;
14
+
15
+ if (!sizes[rowId]) {
16
+ sizes[rowId] = {};
17
+ }
18
+
19
+ sizes[rowId][columnIndex] = cellColSpanInfo;
20
+ }, []);
21
+ const getCellColSpanInfo = React.useCallback((rowId, columnIndex) => {
22
+ var _lookup$current$rowId;
23
+
24
+ return (_lookup$current$rowId = lookup.current[rowId]) == null ? void 0 : _lookup$current$rowId[columnIndex];
25
+ }, []); // Calculate `colSpan` for the cell.
26
+
27
+ const calculateCellColSpan = React.useCallback(params => {
28
+ const {
29
+ columnIndex,
30
+ rowId,
31
+ minFirstColumnIndex,
32
+ maxLastColumnIndex
33
+ } = params;
34
+ const visibleColumns = apiRef.current.getVisibleColumns();
35
+ const columnsLength = visibleColumns.length;
36
+ const column = visibleColumns[columnIndex];
37
+ const colSpan = typeof column.colSpan === 'function' ? column.colSpan(apiRef.current.getCellParams(rowId, column.field)) : column.colSpan;
38
+
39
+ if (!colSpan || colSpan === 1) {
40
+ setCellColSpanInfo(rowId, columnIndex, {
41
+ spannedByColSpan: false,
42
+ cellProps: {
43
+ colSpan: 1,
44
+ width: column.computedWidth
45
+ }
46
+ });
47
+ return {
48
+ colSpan: 1
49
+ };
50
+ }
51
+
52
+ let width = column.computedWidth;
53
+
54
+ for (let j = 1; j < colSpan; j += 1) {
55
+ const nextColumnIndex = columnIndex + j; // Cells should be spanned only within their column section (left-pinned, right-pinned and unpinned).
56
+
57
+ if (nextColumnIndex >= minFirstColumnIndex && nextColumnIndex < maxLastColumnIndex) {
58
+ const nextColumn = visibleColumns[nextColumnIndex];
59
+ width += nextColumn.computedWidth;
60
+ setCellColSpanInfo(rowId, columnIndex + j, {
61
+ spannedByColSpan: true,
62
+ rightVisibleCellIndex: Math.min(columnIndex + colSpan, columnsLength - 1),
63
+ leftVisibleCellIndex: columnIndex
64
+ });
65
+ }
66
+
67
+ setCellColSpanInfo(rowId, columnIndex, {
68
+ spannedByColSpan: false,
69
+ cellProps: {
70
+ colSpan,
71
+ width
72
+ }
73
+ });
74
+ }
75
+
76
+ return {
77
+ colSpan
78
+ };
79
+ }, [apiRef, setCellColSpanInfo]); // Calculate `colSpan` for each cell in the row
80
+
81
+ const calculateColSpan = React.useCallback(({
82
+ rowId,
83
+ minFirstColumn,
84
+ maxLastColumn
85
+ }) => {
86
+ for (let i = minFirstColumn; i < maxLastColumn; i += 1) {
87
+ const cellProps = calculateCellColSpan({
88
+ columnIndex: i,
89
+ rowId,
90
+ minFirstColumnIndex: minFirstColumn,
91
+ maxLastColumnIndex: maxLastColumn
92
+ });
93
+
94
+ if (cellProps.colSpan > 1) {
95
+ i += cellProps.colSpan - 1;
96
+ }
97
+ }
98
+ }, [calculateCellColSpan]);
99
+ const columnSpanningApi = {
100
+ unstable_getCellColSpanInfo: getCellColSpanInfo,
101
+ unstable_calculateColSpan: calculateColSpan
102
+ };
103
+ useGridApiMethod(apiRef, columnSpanningApi, 'GridColumnSpanningAPI');
104
+ const handleColumnReorderChange = React.useCallback(() => {
105
+ // `colSpan` needs to be recalculated after column reordering
106
+ lookup.current = {};
107
+ }, []);
108
+ useGridApiEventHandler(apiRef, GridEvents.columnOrderChange, handleColumnReorderChange);
109
+ };
@@ -8,4 +8,4 @@ export declare const columnsStateInitializer: GridStateInitializer<Pick<DataGrid
8
8
  * @requires useGridDimensions (method, event) - can be after
9
9
  * TODO: Impossible priority - useGridParamsApi also needs to be after useGridColumns
10
10
  */
11
- export declare function useGridColumns(apiRef: React.MutableRefObject<GridApiCommunity>, props: Pick<DataGridProcessedProps, 'initialState' | 'columns' | 'onColumnVisibilityChange' | 'columnVisibilityModel' | 'onColumnVisibilityModelChange' | 'columnTypes' | 'checkboxSelection' | 'classes' | 'components' | 'componentsProps'>): void;
11
+ export declare function useGridColumns(apiRef: React.MutableRefObject<GridApiCommunity>, props: Pick<DataGridProcessedProps, 'initialState' | 'columns' | 'onColumnVisibilityChange' | 'columnVisibilityModel' | 'onColumnVisibilityModelChange' | 'columnTypes' | 'classes' | 'components' | 'componentsProps'>): void;
@@ -5,7 +5,7 @@ import { useGridApiMethod } from '../../utils/useGridApiMethod';
5
5
  import { useGridLogger } from '../../utils/useGridLogger';
6
6
  import { gridColumnFieldsSelector, gridColumnDefinitionsSelector, gridColumnLookupSelector, gridColumnsMetaSelector, gridColumnsSelector, gridColumnVisibilityModelSelector, gridVisibleColumnDefinitionsSelector, gridColumnPositionsSelector } from './gridColumnsSelector';
7
7
  import { useGridApiEventHandler, useGridApiOptionHandler } from '../../utils/useGridApiEventHandler';
8
- import { useGridRegisterPreProcessor } from '../../core/preProcessing';
8
+ import { useGridRegisterPipeProcessor, useGridRegisterPipeApplier } from '../../core/pipeProcessing';
9
9
  import { hydrateColumnsWidth, computeColumnTypes, createColumnsState, mergeColumnsState, COLUMNS_DIMENSION_PROPERTIES } from './gridColumnsUtils';
10
10
  import { GridPreferencePanelsValue } from '../preferencesPanel';
11
11
  import { jsx as _jsx } from "react/jsx-runtime";
@@ -16,7 +16,7 @@ export const columnsStateInitializer = (state, props, apiRef) => {
16
16
  const columnsTypes = computeColumnTypes(props.columnTypes);
17
17
  const columnsState = createColumnsState({
18
18
  apiRef,
19
- columnsTypes,
19
+ columnTypes: columnsTypes,
20
20
  columnsToUpsert: props.columns,
21
21
  initialState: (_props$initialState2 = props.initialState) == null ? void 0 : _props$initialState2.columns,
22
22
  shouldRegenColumnVisibilityModelFromColumns: !isUsingColumnVisibilityModel,
@@ -37,13 +37,15 @@ export function useGridColumns(apiRef, props) {
37
37
  var _props$initialState4, _props$initialState4$, _props$componentsProp2;
38
38
 
39
39
  const logger = useGridLogger(apiRef, 'useGridColumns');
40
- const columnsTypes = React.useMemo(() => computeColumnTypes(props.columnTypes), [props.columnTypes]);
40
+ const columnTypes = React.useMemo(() => computeColumnTypes(props.columnTypes), [props.columnTypes]);
41
+ const previousColumnsProp = React.useRef(props.columns);
42
+ const previousColumnTypesProp = React.useRef(columnTypes);
41
43
  /**
42
44
  * If `initialState.columns.columnVisibilityModel` or `columnVisibilityModel` was defined during the 1st render, we are directly updating the model
43
45
  * If not, we keep the old behavior and update the `GridColDef.hide` option (which will update the state model through the `GridColDef.hide` => `columnVisibilityModel` sync in `createColumnsState`
44
46
  */
45
47
 
46
- const isUsingColumnVisibilityModel = React.useRef(!!props.columnVisibilityModel || !!((_props$initialState4 = props.initialState) != null && (_props$initialState4$ = _props$initialState4.columns) != null && _props$initialState4$.columnVisibilityModel)).current;
48
+ const isUsingColumnVisibilityModel = React.useRef(!!props.columnVisibilityModel || !!((_props$initialState4 = props.initialState) != null && (_props$initialState4$ = _props$initialState4.columns) != null && _props$initialState4$.columnVisibilityModel));
47
49
  apiRef.current.unstable_updateControlState({
48
50
  stateId: 'visibleColumns',
49
51
  propModel: props.columnVisibilityModel,
@@ -80,7 +82,7 @@ export function useGridColumns(apiRef, props) {
80
82
  apiRef.current.setState(state => _extends({}, state, {
81
83
  columns: createColumnsState({
82
84
  apiRef,
83
- columnsTypes,
85
+ columnTypes,
84
86
  columnsToUpsert: [],
85
87
  initialState: undefined,
86
88
  shouldRegenColumnVisibilityModelFromColumns: false,
@@ -90,24 +92,24 @@ export function useGridColumns(apiRef, props) {
90
92
  }));
91
93
  apiRef.current.forceUpdate();
92
94
  }
93
- }, [apiRef, columnsTypes]);
95
+ }, [apiRef, columnTypes]);
94
96
  const updateColumns = React.useCallback(columns => {
95
97
  const columnsState = createColumnsState({
96
98
  apiRef,
97
- columnsTypes,
99
+ columnTypes,
98
100
  columnsToUpsert: columns,
99
101
  initialState: undefined,
100
102
  shouldRegenColumnVisibilityModelFromColumns: true,
101
103
  keepOnlyColumnsToUpsert: false
102
104
  });
103
105
  setGridColumnsState(columnsState);
104
- }, [apiRef, setGridColumnsState, columnsTypes]);
106
+ }, [apiRef, setGridColumnsState, columnTypes]);
105
107
  const updateColumn = React.useCallback(column => apiRef.current.updateColumns([column]), [apiRef]);
106
108
  const setColumnVisibility = React.useCallback((field, isVisible) => {
107
109
  // We keep updating the `hide` option of `GridColDef` when not controlling the model to avoid any breaking change.
108
110
  // `updateColumns` take care of updating the model itself if needs be.
109
111
  // TODO v6: stop using the `hide` field even when the model is not defined
110
- if (isUsingColumnVisibilityModel) {
112
+ if (isUsingColumnVisibilityModel.current) {
111
113
  var _columnVisibilityMode;
112
114
 
113
115
  const columnVisibilityModel = gridColumnVisibilityModelSelector(apiRef);
@@ -135,7 +137,7 @@ export function useGridColumns(apiRef, props) {
135
137
  };
136
138
  apiRef.current.publishEvent(GridEvents.columnVisibilityChange, params);
137
139
  }
138
- }, [apiRef, isUsingColumnVisibilityModel]);
140
+ }, [apiRef]);
139
141
  const setColumnIndex = React.useCallback((field, targetIndexPosition) => {
140
142
  const allColumns = gridColumnFieldsSelector(apiRef);
141
143
  const oldIndexPosition = allColumns.findIndex(col => col === field);
@@ -196,7 +198,7 @@ export function useGridColumns(apiRef, props) {
196
198
  const stateExportPreProcessing = React.useCallback(prevState => {
197
199
  const columnsStateToExport = {};
198
200
 
199
- if (isUsingColumnVisibilityModel) {
201
+ if (isUsingColumnVisibilityModel.current) {
200
202
  const columnVisibilityModelToExport = gridColumnVisibilityModelSelector(apiRef);
201
203
  const hasHiddenColumns = Object.values(columnVisibilityModelToExport).some(value => value === false);
202
204
 
@@ -212,7 +214,13 @@ export function useGridColumns(apiRef, props) {
212
214
  if (colDef.hasBeenResized) {
213
215
  const colDefDimensions = {};
214
216
  COLUMNS_DIMENSION_PROPERTIES.forEach(propertyName => {
215
- colDefDimensions[propertyName] = colDef[propertyName];
217
+ let propertyValue = colDef[propertyName];
218
+
219
+ if (propertyValue === Infinity) {
220
+ propertyValue = -1;
221
+ }
222
+
223
+ colDefDimensions[propertyName] = propertyValue;
216
224
  });
217
225
  dimensions[colDef.field] = colDefDimensions;
218
226
  }
@@ -225,11 +233,11 @@ export function useGridColumns(apiRef, props) {
225
233
  return _extends({}, prevState, {
226
234
  columns: columnsStateToExport
227
235
  });
228
- }, [apiRef, isUsingColumnVisibilityModel]);
236
+ }, [apiRef]);
229
237
  const stateRestorePreProcessing = React.useCallback((params, context) => {
230
238
  var _context$stateToResto;
231
239
 
232
- const columnVisibilityModelToImport = isUsingColumnVisibilityModel ? (_context$stateToResto = context.stateToRestore.columns) == null ? void 0 : _context$stateToResto.columnVisibilityModel : undefined;
240
+ const columnVisibilityModelToImport = isUsingColumnVisibilityModel.current ? (_context$stateToResto = context.stateToRestore.columns) == null ? void 0 : _context$stateToResto.columnVisibilityModel : undefined;
233
241
  const initialState = context.stateToRestore.columns;
234
242
 
235
243
  if (columnVisibilityModelToImport == null && initialState == null) {
@@ -238,10 +246,10 @@ export function useGridColumns(apiRef, props) {
238
246
 
239
247
  const columnsState = createColumnsState({
240
248
  apiRef,
241
- columnsTypes,
249
+ columnTypes,
242
250
  columnsToUpsert: [],
243
251
  initialState,
244
- shouldRegenColumnVisibilityModelFromColumns: !isUsingColumnVisibilityModel,
252
+ shouldRegenColumnVisibilityModelFromColumns: !isUsingColumnVisibilityModel.current,
245
253
  currentColumnVisibilityModel: columnVisibilityModelToImport,
246
254
  keepOnlyColumnsToUpsert: false
247
255
  });
@@ -252,7 +260,7 @@ export function useGridColumns(apiRef, props) {
252
260
  }
253
261
 
254
262
  return params;
255
- }, [apiRef, isUsingColumnVisibilityModel, columnsTypes]);
263
+ }, [apiRef, columnTypes]);
256
264
  const preferencePanelPreProcessing = React.useCallback((initialValue, value) => {
257
265
  if (value === GridPreferencePanelsValue.columns) {
258
266
  var _props$componentsProp;
@@ -263,29 +271,13 @@ export function useGridColumns(apiRef, props) {
263
271
 
264
272
  return initialValue;
265
273
  }, [props.components.ColumnsPanel, (_props$componentsProp2 = props.componentsProps) == null ? void 0 : _props$componentsProp2.columnsPanel]);
266
- useGridRegisterPreProcessor(apiRef, 'exportState', stateExportPreProcessing);
267
- useGridRegisterPreProcessor(apiRef, 'restoreState', stateRestorePreProcessing);
268
- useGridRegisterPreProcessor(apiRef, 'preferencePanel', preferencePanelPreProcessing);
274
+ useGridRegisterPipeProcessor(apiRef, 'exportState', stateExportPreProcessing);
275
+ useGridRegisterPipeProcessor(apiRef, 'restoreState', stateRestorePreProcessing);
276
+ useGridRegisterPipeProcessor(apiRef, 'preferencePanel', preferencePanelPreProcessing);
269
277
  /**
270
278
  * EVENTS
271
279
  */
272
280
 
273
- const handlePreProcessorRegister = React.useCallback(name => {
274
- if (name !== 'hydrateColumns') {
275
- return;
276
- }
277
-
278
- logger.info(`Columns pre-processing have changed, regenerating the columns`);
279
- const columnsState = createColumnsState({
280
- apiRef,
281
- columnsTypes,
282
- columnsToUpsert: [],
283
- initialState: undefined,
284
- shouldRegenColumnVisibilityModelFromColumns: !isUsingColumnVisibilityModel,
285
- keepOnlyColumnsToUpsert: false
286
- });
287
- setGridColumnsState(columnsState);
288
- }, [apiRef, logger, setGridColumnsState, columnsTypes, isUsingColumnVisibilityModel]);
289
281
  const prevInnerWidth = React.useRef(null);
290
282
 
291
283
  const handleGridSizeChange = viewportInnerSize => {
@@ -295,9 +287,25 @@ export function useGridColumns(apiRef, props) {
295
287
  }
296
288
  };
297
289
 
298
- useGridApiEventHandler(apiRef, GridEvents.preProcessorRegister, handlePreProcessorRegister);
299
290
  useGridApiEventHandler(apiRef, GridEvents.viewportInnerSizeChange, handleGridSizeChange);
300
291
  useGridApiOptionHandler(apiRef, GridEvents.columnVisibilityChange, props.onColumnVisibilityChange);
292
+ /**
293
+ * APPLIERS
294
+ */
295
+
296
+ const hydrateColumns = React.useCallback(() => {
297
+ logger.info(`Columns pipe processing have changed, regenerating the columns`);
298
+ const columnsState = createColumnsState({
299
+ apiRef,
300
+ columnTypes,
301
+ columnsToUpsert: [],
302
+ initialState: undefined,
303
+ shouldRegenColumnVisibilityModelFromColumns: !isUsingColumnVisibilityModel.current,
304
+ keepOnlyColumnsToUpsert: false
305
+ });
306
+ setGridColumnsState(columnsState);
307
+ }, [apiRef, logger, setGridColumnsState, columnTypes]);
308
+ useGridRegisterPipeApplier(apiRef, 'hydrateColumns', hydrateColumns);
301
309
  /**
302
310
  * EFFECTS
303
311
  */
@@ -312,17 +320,24 @@ export function useGridColumns(apiRef, props) {
312
320
  }
313
321
 
314
322
  logger.info(`GridColumns have changed, new length ${props.columns.length}`);
323
+
324
+ if (previousColumnsProp.current === props.columns && previousColumnTypesProp.current === columnTypes) {
325
+ return;
326
+ }
327
+
315
328
  const columnsState = createColumnsState({
316
329
  apiRef,
317
- columnsTypes,
330
+ columnTypes,
318
331
  initialState: undefined,
319
332
  // If the user provides a model, we don't want to set it in the state here because it has it's dedicated `useEffect` which calls `setColumnVisibilityModel`
320
- shouldRegenColumnVisibilityModelFromColumns: !isUsingColumnVisibilityModel,
333
+ shouldRegenColumnVisibilityModelFromColumns: !isUsingColumnVisibilityModel.current,
321
334
  columnsToUpsert: props.columns,
322
335
  keepOnlyColumnsToUpsert: true
323
336
  });
337
+ previousColumnsProp.current = props.columns;
338
+ previousColumnTypesProp.current = columnTypes;
324
339
  setGridColumnsState(columnsState);
325
- }, [logger, apiRef, setGridColumnsState, props.columns, columnsTypes, isUsingColumnVisibilityModel]);
340
+ }, [logger, apiRef, setGridColumnsState, props.columns, columnTypes]);
326
341
  React.useEffect(() => {
327
342
  if (props.columnVisibilityModel !== undefined) {
328
343
  apiRef.current.setColumnVisibilityModel(props.columnVisibilityModel);
@@ -33,4 +33,9 @@ export interface GridDimensionsApi {
33
33
  * @ignore - do not document.
34
34
  */
35
35
  unstable_getViewportPageSize: () => number;
36
+ /**
37
+ * Forces a recalculation of all dimensions.
38
+ * @ignore - do not document.
39
+ */
40
+ unstable_updateGridDimensionsRef: () => void;
36
41
  }
@@ -134,7 +134,8 @@ export function useGridDimensions(apiRef, props) {
134
134
  const dimensionsApi = {
135
135
  resize,
136
136
  getRootDimensions,
137
- unstable_getViewportPageSize: getViewportPageSize
137
+ unstable_getViewportPageSize: getViewportPageSize,
138
+ unstable_updateGridDimensionsRef: updateGridDimensionsRef
138
139
  };
139
140
  useGridApiMethod(apiRef, dimensionsApi, 'GridDimensionsApi');
140
141
  const debounceResize = React.useMemo(() => debounce(resize, 60), [resize]);
@@ -145,12 +146,12 @@ export function useGridDimensions(apiRef, props) {
145
146
  const isJSDOM = /jsdom/.test(window.navigator.userAgent);
146
147
 
147
148
  if (size.height === 0 && !warningShown.current && !props.autoHeight && !isJSDOM) {
148
- logger.warn(['The parent of the grid has an empty height.', 'You need to make sure the container has an intrinsic height.', 'The grid displays with a height of 0px.', '', 'You can find a solution in the docs:', 'https://mui.com/components/data-grid/layout/'].join('\n'));
149
+ logger.warn(['The parent of the grid has an empty height.', 'You need to make sure the container has an intrinsic height.', 'The grid displays with a height of 0px.', '', 'You can find a solution in the docs:', 'https://mui.com/x/react-data-grid/layout/'].join('\n'));
149
150
  warningShown.current = true;
150
151
  }
151
152
 
152
153
  if (size.width === 0 && !warningShown.current && !isJSDOM) {
153
- logger.warn(['The parent of the grid has an empty width.', 'You need to make sure the container has an intrinsic width.', 'The grid displays with a width of 0px.', '', 'You can find a solution in the docs:', 'https://mui.com/components/data-grid/layout/'].join('\n'));
154
+ logger.warn(['The parent of the grid has an empty width.', 'You need to make sure the container has an intrinsic width.', 'The grid displays with a width of 0px.', '', 'You can find a solution in the docs:', 'https://mui.com/x/react-data-grid/layout/'].join('\n'));
154
155
  warningShown.current = true;
155
156
  }
156
157
 
@@ -171,7 +172,7 @@ export function useGridDimensions(apiRef, props) {
171
172
  debounceResize();
172
173
  }, [props.autoHeight, debounceResize, logger, resize]);
173
174
  useEnhancedEffect(() => updateGridDimensionsRef(), [updateGridDimensionsRef]);
174
- useGridApiOptionHandler(apiRef, GridEvents.visibleRowsSet, updateGridDimensionsRef);
175
+ useGridApiOptionHandler(apiRef, GridEvents.sortedRowsSet, updateGridDimensionsRef);
175
176
  useGridApiOptionHandler(apiRef, GridEvents.pageChange, updateGridDimensionsRef);
176
177
  useGridApiOptionHandler(apiRef, GridEvents.pageSizeChange, updateGridDimensionsRef);
177
178
  useGridApiOptionHandler(apiRef, GridEvents.columnsChange, updateGridDimensionsRef);
@@ -1,4 +1,4 @@
1
1
  import * as React from 'react';
2
2
  import { GridApiCommunity } from '../../../models/api/gridApiCommunity';
3
3
  import { DataGridProcessedProps } from '../../../models/props/DataGridProps';
4
- export declare const useGridCellEditing: (apiRef: React.MutableRefObject<GridApiCommunity>, props: Pick<DataGridProcessedProps, 'editMode' | 'processRowUpdate' | 'onCellEditStart' | 'onCellEditStop'>) => void;
4
+ export declare const useGridCellEditing: (apiRef: React.MutableRefObject<GridApiCommunity>, props: Pick<DataGridProcessedProps, 'editMode' | 'processRowUpdate' | 'onCellEditStart' | 'onCellEditStop' | 'onProcessRowUpdateError'>) => void;