@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
@@ -0,0 +1,107 @@
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
+ return lookup.current[rowId]?.[columnIndex];
23
+ }, []); // Calculate `colSpan` for the cell.
24
+
25
+ const calculateCellColSpan = React.useCallback(params => {
26
+ const {
27
+ columnIndex,
28
+ rowId,
29
+ minFirstColumnIndex,
30
+ maxLastColumnIndex
31
+ } = params;
32
+ const visibleColumns = apiRef.current.getVisibleColumns();
33
+ const columnsLength = visibleColumns.length;
34
+ const column = visibleColumns[columnIndex];
35
+ const colSpan = typeof column.colSpan === 'function' ? column.colSpan(apiRef.current.getCellParams(rowId, column.field)) : column.colSpan;
36
+
37
+ if (!colSpan || colSpan === 1) {
38
+ setCellColSpanInfo(rowId, columnIndex, {
39
+ spannedByColSpan: false,
40
+ cellProps: {
41
+ colSpan: 1,
42
+ width: column.computedWidth
43
+ }
44
+ });
45
+ return {
46
+ colSpan: 1
47
+ };
48
+ }
49
+
50
+ let width = column.computedWidth;
51
+
52
+ for (let j = 1; j < colSpan; j += 1) {
53
+ const nextColumnIndex = columnIndex + j; // Cells should be spanned only within their column section (left-pinned, right-pinned and unpinned).
54
+
55
+ if (nextColumnIndex >= minFirstColumnIndex && nextColumnIndex < maxLastColumnIndex) {
56
+ const nextColumn = visibleColumns[nextColumnIndex];
57
+ width += nextColumn.computedWidth;
58
+ setCellColSpanInfo(rowId, columnIndex + j, {
59
+ spannedByColSpan: true,
60
+ rightVisibleCellIndex: Math.min(columnIndex + colSpan, columnsLength - 1),
61
+ leftVisibleCellIndex: columnIndex
62
+ });
63
+ }
64
+
65
+ setCellColSpanInfo(rowId, columnIndex, {
66
+ spannedByColSpan: false,
67
+ cellProps: {
68
+ colSpan,
69
+ width
70
+ }
71
+ });
72
+ }
73
+
74
+ return {
75
+ colSpan
76
+ };
77
+ }, [apiRef, setCellColSpanInfo]); // Calculate `colSpan` for each cell in the row
78
+
79
+ const calculateColSpan = React.useCallback(({
80
+ rowId,
81
+ minFirstColumn,
82
+ maxLastColumn
83
+ }) => {
84
+ for (let i = minFirstColumn; i < maxLastColumn; i += 1) {
85
+ const cellProps = calculateCellColSpan({
86
+ columnIndex: i,
87
+ rowId,
88
+ minFirstColumnIndex: minFirstColumn,
89
+ maxLastColumnIndex: maxLastColumn
90
+ });
91
+
92
+ if (cellProps.colSpan > 1) {
93
+ i += cellProps.colSpan - 1;
94
+ }
95
+ }
96
+ }, [calculateCellColSpan]);
97
+ const columnSpanningApi = {
98
+ unstable_getCellColSpanInfo: getCellColSpanInfo,
99
+ unstable_calculateColSpan: calculateColSpan
100
+ };
101
+ useGridApiMethod(apiRef, columnSpanningApi, 'GridColumnSpanningAPI');
102
+ const handleColumnReorderChange = React.useCallback(() => {
103
+ // `colSpan` needs to be recalculated after column reordering
104
+ lookup.current = {};
105
+ }, []);
106
+ useGridApiEventHandler(apiRef, GridEvents.columnOrderChange, handleColumnReorderChange);
107
+ };
@@ -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";
@@ -14,7 +14,7 @@ export const columnsStateInitializer = (state, props, apiRef) => {
14
14
  const columnsTypes = computeColumnTypes(props.columnTypes);
15
15
  const columnsState = createColumnsState({
16
16
  apiRef,
17
- columnsTypes,
17
+ columnTypes: columnsTypes,
18
18
  columnsToUpsert: props.columns,
19
19
  initialState: props.initialState?.columns,
20
20
  shouldRegenColumnVisibilityModelFromColumns: !isUsingColumnVisibilityModel,
@@ -33,13 +33,15 @@ export const columnsStateInitializer = (state, props, apiRef) => {
33
33
 
34
34
  export function useGridColumns(apiRef, props) {
35
35
  const logger = useGridLogger(apiRef, 'useGridColumns');
36
- const columnsTypes = React.useMemo(() => computeColumnTypes(props.columnTypes), [props.columnTypes]);
36
+ const columnTypes = React.useMemo(() => computeColumnTypes(props.columnTypes), [props.columnTypes]);
37
+ const previousColumnsProp = React.useRef(props.columns);
38
+ const previousColumnTypesProp = React.useRef(columnTypes);
37
39
  /**
38
40
  * If `initialState.columns.columnVisibilityModel` or `columnVisibilityModel` was defined during the 1st render, we are directly updating the model
39
41
  * 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`
40
42
  */
41
43
 
42
- const isUsingColumnVisibilityModel = React.useRef(!!props.columnVisibilityModel || !!props.initialState?.columns?.columnVisibilityModel).current;
44
+ const isUsingColumnVisibilityModel = React.useRef(!!props.columnVisibilityModel || !!props.initialState?.columns?.columnVisibilityModel);
43
45
  apiRef.current.unstable_updateControlState({
44
46
  stateId: 'visibleColumns',
45
47
  propModel: props.columnVisibilityModel,
@@ -76,7 +78,7 @@ export function useGridColumns(apiRef, props) {
76
78
  apiRef.current.setState(state => _extends({}, state, {
77
79
  columns: createColumnsState({
78
80
  apiRef,
79
- columnsTypes,
81
+ columnTypes,
80
82
  columnsToUpsert: [],
81
83
  initialState: undefined,
82
84
  shouldRegenColumnVisibilityModelFromColumns: false,
@@ -86,24 +88,24 @@ export function useGridColumns(apiRef, props) {
86
88
  }));
87
89
  apiRef.current.forceUpdate();
88
90
  }
89
- }, [apiRef, columnsTypes]);
91
+ }, [apiRef, columnTypes]);
90
92
  const updateColumns = React.useCallback(columns => {
91
93
  const columnsState = createColumnsState({
92
94
  apiRef,
93
- columnsTypes,
95
+ columnTypes,
94
96
  columnsToUpsert: columns,
95
97
  initialState: undefined,
96
98
  shouldRegenColumnVisibilityModelFromColumns: true,
97
99
  keepOnlyColumnsToUpsert: false
98
100
  });
99
101
  setGridColumnsState(columnsState);
100
- }, [apiRef, setGridColumnsState, columnsTypes]);
102
+ }, [apiRef, setGridColumnsState, columnTypes]);
101
103
  const updateColumn = React.useCallback(column => apiRef.current.updateColumns([column]), [apiRef]);
102
104
  const setColumnVisibility = React.useCallback((field, isVisible) => {
103
105
  // We keep updating the `hide` option of `GridColDef` when not controlling the model to avoid any breaking change.
104
106
  // `updateColumns` take care of updating the model itself if needs be.
105
107
  // TODO v6: stop using the `hide` field even when the model is not defined
106
- if (isUsingColumnVisibilityModel) {
108
+ if (isUsingColumnVisibilityModel.current) {
107
109
  const columnVisibilityModel = gridColumnVisibilityModelSelector(apiRef);
108
110
  const isCurrentlyVisible = columnVisibilityModel[field] ?? true;
109
111
 
@@ -129,7 +131,7 @@ export function useGridColumns(apiRef, props) {
129
131
  };
130
132
  apiRef.current.publishEvent(GridEvents.columnVisibilityChange, params);
131
133
  }
132
- }, [apiRef, isUsingColumnVisibilityModel]);
134
+ }, [apiRef]);
133
135
  const setColumnIndex = React.useCallback((field, targetIndexPosition) => {
134
136
  const allColumns = gridColumnFieldsSelector(apiRef);
135
137
  const oldIndexPosition = allColumns.findIndex(col => col === field);
@@ -190,7 +192,7 @@ export function useGridColumns(apiRef, props) {
190
192
  const stateExportPreProcessing = React.useCallback(prevState => {
191
193
  const columnsStateToExport = {};
192
194
 
193
- if (isUsingColumnVisibilityModel) {
195
+ if (isUsingColumnVisibilityModel.current) {
194
196
  const columnVisibilityModelToExport = gridColumnVisibilityModelSelector(apiRef);
195
197
  const hasHiddenColumns = Object.values(columnVisibilityModelToExport).some(value => value === false);
196
198
 
@@ -206,7 +208,13 @@ export function useGridColumns(apiRef, props) {
206
208
  if (colDef.hasBeenResized) {
207
209
  const colDefDimensions = {};
208
210
  COLUMNS_DIMENSION_PROPERTIES.forEach(propertyName => {
209
- colDefDimensions[propertyName] = colDef[propertyName];
211
+ let propertyValue = colDef[propertyName];
212
+
213
+ if (propertyValue === Infinity) {
214
+ propertyValue = -1;
215
+ }
216
+
217
+ colDefDimensions[propertyName] = propertyValue;
210
218
  });
211
219
  dimensions[colDef.field] = colDefDimensions;
212
220
  }
@@ -219,9 +227,9 @@ export function useGridColumns(apiRef, props) {
219
227
  return _extends({}, prevState, {
220
228
  columns: columnsStateToExport
221
229
  });
222
- }, [apiRef, isUsingColumnVisibilityModel]);
230
+ }, [apiRef]);
223
231
  const stateRestorePreProcessing = React.useCallback((params, context) => {
224
- const columnVisibilityModelToImport = isUsingColumnVisibilityModel ? context.stateToRestore.columns?.columnVisibilityModel : undefined;
232
+ const columnVisibilityModelToImport = isUsingColumnVisibilityModel.current ? context.stateToRestore.columns?.columnVisibilityModel : undefined;
225
233
  const initialState = context.stateToRestore.columns;
226
234
 
227
235
  if (columnVisibilityModelToImport == null && initialState == null) {
@@ -230,10 +238,10 @@ export function useGridColumns(apiRef, props) {
230
238
 
231
239
  const columnsState = createColumnsState({
232
240
  apiRef,
233
- columnsTypes,
241
+ columnTypes,
234
242
  columnsToUpsert: [],
235
243
  initialState,
236
- shouldRegenColumnVisibilityModelFromColumns: !isUsingColumnVisibilityModel,
244
+ shouldRegenColumnVisibilityModelFromColumns: !isUsingColumnVisibilityModel.current,
237
245
  currentColumnVisibilityModel: columnVisibilityModelToImport,
238
246
  keepOnlyColumnsToUpsert: false
239
247
  });
@@ -244,7 +252,7 @@ export function useGridColumns(apiRef, props) {
244
252
  }
245
253
 
246
254
  return params;
247
- }, [apiRef, isUsingColumnVisibilityModel, columnsTypes]);
255
+ }, [apiRef, columnTypes]);
248
256
  const preferencePanelPreProcessing = React.useCallback((initialValue, value) => {
249
257
  if (value === GridPreferencePanelsValue.columns) {
250
258
  const ColumnsPanel = props.components.ColumnsPanel;
@@ -253,29 +261,13 @@ export function useGridColumns(apiRef, props) {
253
261
 
254
262
  return initialValue;
255
263
  }, [props.components.ColumnsPanel, props.componentsProps?.columnsPanel]);
256
- useGridRegisterPreProcessor(apiRef, 'exportState', stateExportPreProcessing);
257
- useGridRegisterPreProcessor(apiRef, 'restoreState', stateRestorePreProcessing);
258
- useGridRegisterPreProcessor(apiRef, 'preferencePanel', preferencePanelPreProcessing);
264
+ useGridRegisterPipeProcessor(apiRef, 'exportState', stateExportPreProcessing);
265
+ useGridRegisterPipeProcessor(apiRef, 'restoreState', stateRestorePreProcessing);
266
+ useGridRegisterPipeProcessor(apiRef, 'preferencePanel', preferencePanelPreProcessing);
259
267
  /**
260
268
  * EVENTS
261
269
  */
262
270
 
263
- const handlePreProcessorRegister = React.useCallback(name => {
264
- if (name !== 'hydrateColumns') {
265
- return;
266
- }
267
-
268
- logger.info(`Columns pre-processing have changed, regenerating the columns`);
269
- const columnsState = createColumnsState({
270
- apiRef,
271
- columnsTypes,
272
- columnsToUpsert: [],
273
- initialState: undefined,
274
- shouldRegenColumnVisibilityModelFromColumns: !isUsingColumnVisibilityModel,
275
- keepOnlyColumnsToUpsert: false
276
- });
277
- setGridColumnsState(columnsState);
278
- }, [apiRef, logger, setGridColumnsState, columnsTypes, isUsingColumnVisibilityModel]);
279
271
  const prevInnerWidth = React.useRef(null);
280
272
 
281
273
  const handleGridSizeChange = viewportInnerSize => {
@@ -285,9 +277,25 @@ export function useGridColumns(apiRef, props) {
285
277
  }
286
278
  };
287
279
 
288
- useGridApiEventHandler(apiRef, GridEvents.preProcessorRegister, handlePreProcessorRegister);
289
280
  useGridApiEventHandler(apiRef, GridEvents.viewportInnerSizeChange, handleGridSizeChange);
290
281
  useGridApiOptionHandler(apiRef, GridEvents.columnVisibilityChange, props.onColumnVisibilityChange);
282
+ /**
283
+ * APPLIERS
284
+ */
285
+
286
+ const hydrateColumns = React.useCallback(() => {
287
+ logger.info(`Columns pipe processing have changed, regenerating the columns`);
288
+ const columnsState = createColumnsState({
289
+ apiRef,
290
+ columnTypes,
291
+ columnsToUpsert: [],
292
+ initialState: undefined,
293
+ shouldRegenColumnVisibilityModelFromColumns: !isUsingColumnVisibilityModel.current,
294
+ keepOnlyColumnsToUpsert: false
295
+ });
296
+ setGridColumnsState(columnsState);
297
+ }, [apiRef, logger, setGridColumnsState, columnTypes]);
298
+ useGridRegisterPipeApplier(apiRef, 'hydrateColumns', hydrateColumns);
291
299
  /**
292
300
  * EFFECTS
293
301
  */
@@ -302,17 +310,24 @@ export function useGridColumns(apiRef, props) {
302
310
  }
303
311
 
304
312
  logger.info(`GridColumns have changed, new length ${props.columns.length}`);
313
+
314
+ if (previousColumnsProp.current === props.columns && previousColumnTypesProp.current === columnTypes) {
315
+ return;
316
+ }
317
+
305
318
  const columnsState = createColumnsState({
306
319
  apiRef,
307
- columnsTypes,
320
+ columnTypes,
308
321
  initialState: undefined,
309
322
  // 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`
310
- shouldRegenColumnVisibilityModelFromColumns: !isUsingColumnVisibilityModel,
323
+ shouldRegenColumnVisibilityModelFromColumns: !isUsingColumnVisibilityModel.current,
311
324
  columnsToUpsert: props.columns,
312
325
  keepOnlyColumnsToUpsert: true
313
326
  });
327
+ previousColumnsProp.current = props.columns;
328
+ previousColumnTypesProp.current = columnTypes;
314
329
  setGridColumnsState(columnsState);
315
- }, [logger, apiRef, setGridColumnsState, props.columns, columnsTypes, isUsingColumnVisibilityModel]);
330
+ }, [logger, apiRef, setGridColumnsState, props.columns, columnTypes]);
316
331
  React.useEffect(() => {
317
332
  if (props.columnVisibilityModel !== undefined) {
318
333
  apiRef.current.setColumnVisibilityModel(props.columnVisibilityModel);
@@ -132,7 +132,8 @@ export function useGridDimensions(apiRef, props) {
132
132
  const dimensionsApi = {
133
133
  resize,
134
134
  getRootDimensions,
135
- unstable_getViewportPageSize: getViewportPageSize
135
+ unstable_getViewportPageSize: getViewportPageSize,
136
+ unstable_updateGridDimensionsRef: updateGridDimensionsRef
136
137
  };
137
138
  useGridApiMethod(apiRef, dimensionsApi, 'GridDimensionsApi');
138
139
  const debounceResize = React.useMemo(() => debounce(resize, 60), [resize]);
@@ -143,12 +144,12 @@ export function useGridDimensions(apiRef, props) {
143
144
  const isJSDOM = /jsdom/.test(window.navigator.userAgent);
144
145
 
145
146
  if (size.height === 0 && !warningShown.current && !props.autoHeight && !isJSDOM) {
146
- 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'));
147
+ 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'));
147
148
  warningShown.current = true;
148
149
  }
149
150
 
150
151
  if (size.width === 0 && !warningShown.current && !isJSDOM) {
151
- 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'));
152
+ 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'));
152
153
  warningShown.current = true;
153
154
  }
154
155
 
@@ -169,7 +170,7 @@ export function useGridDimensions(apiRef, props) {
169
170
  debounceResize();
170
171
  }, [props.autoHeight, debounceResize, logger, resize]);
171
172
  useEnhancedEffect(() => updateGridDimensionsRef(), [updateGridDimensionsRef]);
172
- useGridApiOptionHandler(apiRef, GridEvents.visibleRowsSet, updateGridDimensionsRef);
173
+ useGridApiOptionHandler(apiRef, GridEvents.sortedRowsSet, updateGridDimensionsRef);
173
174
  useGridApiOptionHandler(apiRef, GridEvents.pageChange, updateGridDimensionsRef);
174
175
  useGridApiOptionHandler(apiRef, GridEvents.pageSizeChange, updateGridDimensionsRef);
175
176
  useGridApiOptionHandler(apiRef, GridEvents.columnsChange, updateGridDimensionsRef);
@@ -6,10 +6,13 @@ import { GridEditModes, GridCellModes } from '../../../models/gridEditRowModel';
6
6
  import { useGridApiMethod } from '../../utils/useGridApiMethod';
7
7
  import { gridEditRowsStateSelector } from './gridEditRowsSelector';
8
8
  import { isPrintableKey } from '../../../utils/keyboardUtils';
9
+ import { buildWarning } from '../../../utils/warning';
9
10
  import { GridCellEditStartReasons, GridCellEditStopReasons } from '../../../models/params/gridEditCellParams';
11
+ const missingOnProcessRowUpdateErrorWarning = buildWarning(['MUI: A call to `processRowUpdate` threw an error which was not handled because `onProcessRowUpdateError` is missing.', 'To handle the error pass a callback to the `onProcessRowUpdateError` prop, e.g. `<DataGrid onProcessRowUpdateError={(error) => ...} />`.', 'For more detail, see http://mui.com/components/data-grid/editing/#persistence.'], 'error');
10
12
  export const useGridCellEditing = (apiRef, props) => {
11
13
  const {
12
- processRowUpdate
14
+ processRowUpdate,
15
+ onProcessRowUpdateError
13
16
  } = props;
14
17
 
15
18
  const runIfEditModeIsCell = callback => (...args) => {
@@ -220,10 +223,7 @@ export const useGridCellEditing = (apiRef, props) => {
220
223
  }
221
224
 
222
225
  const editingState = gridEditRowsStateSelector(apiRef.current.state);
223
- const row = apiRef.current.getRow(id);
224
- const column = apiRef.current.getColumn(field);
225
226
  const {
226
- value,
227
227
  error,
228
228
  isProcessingProps
229
229
  } = editingState[id][field];
@@ -232,25 +232,33 @@ export const useGridCellEditing = (apiRef, props) => {
232
232
  return;
233
233
  }
234
234
 
235
- const rowUpdate = column.valueSetter ? column.valueSetter({
236
- value,
237
- row
238
- }) : _extends({}, row, {
239
- [field]: value
240
- });
235
+ const rowUpdate = apiRef.current.unstable_getRowWithUpdatedValuesFromCellEditing(id, field);
241
236
 
242
237
  if (processRowUpdate) {
243
- Promise.resolve(processRowUpdate(rowUpdate, row)).then(finalRowUpdate => {
244
- apiRef.current.updateRows([finalRowUpdate]);
245
- updateFocusedCellIfNeeded();
246
- updateOrDeleteFieldState(id, field, null);
247
- });
238
+ const handleError = errorThrown => {
239
+ if (onProcessRowUpdateError) {
240
+ onProcessRowUpdateError(errorThrown);
241
+ } else {
242
+ missingOnProcessRowUpdateErrorWarning();
243
+ }
244
+ };
245
+
246
+ try {
247
+ const row = apiRef.current.getRow(id);
248
+ Promise.resolve(processRowUpdate(rowUpdate, row)).then(finalRowUpdate => {
249
+ apiRef.current.updateRows([finalRowUpdate]);
250
+ updateFocusedCellIfNeeded();
251
+ updateOrDeleteFieldState(id, field, null);
252
+ }).catch(handleError);
253
+ } catch (errorThrown) {
254
+ handleError(errorThrown);
255
+ }
248
256
  } else {
249
257
  apiRef.current.updateRows([rowUpdate]);
250
258
  updateFocusedCellIfNeeded();
251
259
  updateOrDeleteFieldState(id, field, null);
252
260
  }
253
- }, [apiRef, processRowUpdate, throwIfNotInMode, updateOrDeleteFieldState]);
261
+ }, [apiRef, onProcessRowUpdateError, processRowUpdate, throwIfNotInMode, updateOrDeleteFieldState]);
254
262
  const setCellEditingEditCellValue = React.useCallback(async params => {
255
263
  const {
256
264
  id,
@@ -305,11 +313,26 @@ export const useGridCellEditing = (apiRef, props) => {
305
313
  editingState = gridEditRowsStateSelector(apiRef.current.state);
306
314
  return !editingState[id][field].error;
307
315
  }, [apiRef, throwIfNotEditable, throwIfNotInMode, updateOrDeleteFieldState]);
316
+ const getRowWithUpdatedValuesFromCellEditing = React.useCallback((id, field) => {
317
+ const column = apiRef.current.getColumn(field);
318
+ const editingState = gridEditRowsStateSelector(apiRef.current.state);
319
+ const {
320
+ value
321
+ } = editingState[id][field];
322
+ const row = apiRef.current.getRow(id);
323
+ return column.valueSetter ? column.valueSetter({
324
+ value,
325
+ row
326
+ }) : _extends({}, row, {
327
+ [field]: value
328
+ });
329
+ }, [apiRef]);
308
330
  const editingApi = {
309
331
  getCellMode,
310
332
  startCellEditMode,
311
333
  stopCellEditMode,
312
- unstable_setCellEditingEditCellValue: setCellEditingEditCellValue
334
+ unstable_setCellEditingEditCellValue: setCellEditingEditCellValue,
335
+ unstable_getRowWithUpdatedValuesFromCellEditing: getRowWithUpdatedValuesFromCellEditing
313
336
  };
314
337
  useGridApiMethod(apiRef, editingApi, 'EditingApi');
315
338
  };
@@ -2,7 +2,7 @@ import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import * as React from 'react';
3
3
  import { useGridApiMethod } from '../../utils/useGridApiMethod';
4
4
  import { useGridCellEditing } from './useGridCellEditing.new';
5
- import { GridCellModes } from '../../../models/gridEditRowModel';
5
+ import { GridCellModes, GridEditModes } from '../../../models/gridEditRowModel';
6
6
  import { useGridRowEditing } from './useGridRowEditing.new';
7
7
  export const editingStateInitializer = state => _extends({}, state, {
8
8
  editRows: {}
@@ -99,7 +99,7 @@ export const useGridEditing = (apiRef, props) => {
99
99
  } = params;
100
100
  return new Promise(resolve => {
101
101
  maybeDebounce(id, field, debounceMs, async () => {
102
- const setEditCellValueToCall = props.editMode === 'row' ? apiRef.current.unstable_setRowEditingEditCellValue : apiRef.current.unstable_setCellEditingEditCellValue; // Check if the cell is in edit mode
102
+ const setEditCellValueToCall = props.editMode === GridEditModes.Row ? apiRef.current.unstable_setRowEditingEditCellValue : apiRef.current.unstable_setCellEditingEditCellValue; // Check if the cell is in edit mode
103
103
  // By the time this callback runs the user may have cancelled the editing
104
104
 
105
105
  if (apiRef.current.getCellMode(id, field) === GridCellModes.Edit) {
@@ -109,10 +109,14 @@ export const useGridEditing = (apiRef, props) => {
109
109
  });
110
110
  });
111
111
  }, [apiRef, props.editMode]);
112
+ const getRowWithUpdatedValues = React.useCallback((id, field) => {
113
+ return props.editMode === GridEditModes.Cell ? apiRef.current.unstable_getRowWithUpdatedValuesFromCellEditing(id, field) : apiRef.current.unstable_getRowWithUpdatedValuesFromRowEditing(id);
114
+ }, [apiRef, props.editMode]);
112
115
  const editingSharedApi = {
113
116
  isCellEditable,
114
117
  setEditCellValue,
115
- unstable_runPendingEditCellValueMutation: runPendingEditCellValueMutation
118
+ unstable_runPendingEditCellValueMutation: runPendingEditCellValueMutation,
119
+ unstable_getRowWithUpdatedValues: getRowWithUpdatedValues
116
120
  };
117
121
  useGridApiMethod(apiRef, editingSharedApi, 'EditingApi');
118
122
  };
@@ -9,12 +9,15 @@ import { useGridApiMethod } from '../../utils/useGridApiMethod';
9
9
  import { gridEditRowsStateSelector } from './gridEditRowsSelector';
10
10
  import { isPrintableKey } from '../../../utils/keyboardUtils';
11
11
  import { gridColumnFieldsSelector } from '../columns/gridColumnsSelector';
12
+ import { buildWarning } from '../../../utils/warning';
12
13
  import { GridRowEditStopReasons, GridRowEditStartReasons } from '../../../models/params/gridRowParams';
14
+ const missingOnProcessRowUpdateErrorWarning = buildWarning(['MUI: A call to `processRowUpdate` threw an error which was not handled because `onProcessRowUpdateError` is missing.', 'To handle the error pass a callback to the `onProcessRowUpdateError` prop, e.g. `<DataGrid onProcessRowUpdateError={(error) => ...} />`.', 'For more detail, see http://mui.com/components/data-grid/editing/#persistence.'], 'error');
13
15
  export const useGridRowEditing = (apiRef, props) => {
14
16
  const focusTimeout = React.useRef(null);
15
17
  const nextFocusedCell = React.useRef(null);
16
18
  const {
17
- processRowUpdate
19
+ processRowUpdate,
20
+ onProcessRowUpdateError
18
21
  } = props;
19
22
 
20
23
  const runIfEditModeIsRow = callback => (...args) => {
@@ -331,33 +334,32 @@ export const useGridRowEditing = (apiRef, props) => {
331
334
  return;
332
335
  }
333
336
 
334
- let rowUpdate = _extends({}, row);
337
+ const rowUpdate = apiRef.current.unstable_getRowWithUpdatedValuesFromRowEditing(id);
335
338
 
336
- Object.entries(editingState[id]).forEach(([field, fieldProps]) => {
337
- const column = apiRef.current.getColumn(field);
339
+ if (processRowUpdate) {
340
+ const handleError = errorThrown => {
341
+ if (onProcessRowUpdateError) {
342
+ onProcessRowUpdateError(errorThrown);
343
+ } else {
344
+ missingOnProcessRowUpdateErrorWarning();
345
+ }
346
+ };
338
347
 
339
- if (column.valueSetter) {
340
- rowUpdate = column.valueSetter({
341
- value: fieldProps.value,
342
- row: rowUpdate
343
- });
344
- } else {
345
- rowUpdate[field] = fieldProps.value;
348
+ try {
349
+ Promise.resolve(processRowUpdate(rowUpdate, row)).then(finalRowUpdate => {
350
+ apiRef.current.updateRows([finalRowUpdate]);
351
+ updateFocusedCellIfNeeded();
352
+ updateOrDeleteRowState(id, null);
353
+ }).catch(handleError);
354
+ } catch (errorThrown) {
355
+ handleError(errorThrown);
346
356
  }
347
- });
348
-
349
- if (processRowUpdate) {
350
- Promise.resolve(processRowUpdate(rowUpdate, row)).then(finalRowUpdate => {
351
- apiRef.current.updateRows([finalRowUpdate]);
352
- updateFocusedCellIfNeeded();
353
- updateOrDeleteRowState(id, null);
354
- });
355
357
  } else {
356
358
  apiRef.current.updateRows([rowUpdate]);
357
359
  updateFocusedCellIfNeeded();
358
360
  updateOrDeleteRowState(id, null);
359
361
  }
360
- }, [apiRef, processRowUpdate, throwIfNotInMode, updateOrDeleteRowState]);
362
+ }, [apiRef, onProcessRowUpdateError, processRowUpdate, throwIfNotInMode, updateOrDeleteRowState]);
361
363
  const setRowEditingEditCellValue = React.useCallback(params => {
362
364
  const {
363
365
  id,
@@ -474,11 +476,32 @@ export const useGridRowEditing = (apiRef, props) => {
474
476
  });
475
477
  });
476
478
  }, [apiRef, throwIfNotEditable, updateOrDeleteFieldState]);
479
+ const getRowWithUpdatedValuesFromRowEditing = React.useCallback(id => {
480
+ const editingState = gridEditRowsStateSelector(apiRef.current.state);
481
+ const row = apiRef.current.getRow(id);
482
+
483
+ let rowUpdate = _extends({}, row);
484
+
485
+ Object.entries(editingState[id]).forEach(([field, fieldProps]) => {
486
+ const column = apiRef.current.getColumn(field);
487
+
488
+ if (column.valueSetter) {
489
+ rowUpdate = column.valueSetter({
490
+ value: fieldProps.value,
491
+ row: rowUpdate
492
+ });
493
+ } else {
494
+ rowUpdate[field] = fieldProps.value;
495
+ }
496
+ });
497
+ return rowUpdate;
498
+ }, [apiRef]);
477
499
  const editingApi = {
478
500
  getRowMode,
479
501
  startRowEditMode,
480
502
  stopRowEditMode,
481
- unstable_setRowEditingEditCellValue: setRowEditingEditCellValue
503
+ unstable_setRowEditingEditCellValue: setRowEditingEditCellValue,
504
+ unstable_getRowWithUpdatedValuesFromRowEditing: getRowWithUpdatedValuesFromRowEditing
482
505
  };
483
506
  useGridApiMethod(apiRef, editingApi, 'EditingApi');
484
507
  };
@@ -17,6 +17,8 @@ export function useGridEvents(apiRef, props) {
17
17
  useGridApiOptionHandler(apiRef, GridEvents.cellDoubleClick, props.onCellDoubleClick);
18
18
  useGridApiOptionHandler(apiRef, GridEvents.cellKeyDown, props.onCellKeyDown);
19
19
  useGridApiOptionHandler(apiRef, GridEvents.cellFocusOut, props.onCellFocusOut);
20
+ useGridApiOptionHandler(apiRef, GridEvents.preferencePanelClose, props.onPreferencePanelClose);
21
+ useGridApiOptionHandler(apiRef, GridEvents.preferencePanelOpen, props.onPreferencePanelOpen);
20
22
  useGridApiOptionHandler(apiRef, GridEvents.rowDoubleClick, props.onRowDoubleClick);
21
23
  useGridApiOptionHandler(apiRef, GridEvents.rowClick, props.onRowClick);
22
24
  useGridApiOptionHandler(apiRef, GridEvents.componentError, props.onError);