@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
@@ -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
  };
@@ -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 useGridRowEditing: (apiRef: React.MutableRefObject<GridApiCommunity>, props: Pick<DataGridProcessedProps, 'editMode' | 'processRowUpdate' | 'onRowEditStart' | 'onRowEditStop'>) => void;
4
+ export declare const useGridRowEditing: (apiRef: React.MutableRefObject<GridApiCommunity>, props: Pick<DataGridProcessedProps, 'editMode' | 'processRowUpdate' | 'onRowEditStart' | 'onRowEditStop' | 'onProcessRowUpdateError'>) => void;
@@ -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) => {
@@ -333,33 +336,32 @@ export const useGridRowEditing = (apiRef, props) => {
333
336
  return;
334
337
  }
335
338
 
336
- let rowUpdate = _extends({}, row);
339
+ const rowUpdate = apiRef.current.unstable_getRowWithUpdatedValuesFromRowEditing(id);
337
340
 
338
- Object.entries(editingState[id]).forEach(([field, fieldProps]) => {
339
- const column = apiRef.current.getColumn(field);
341
+ if (processRowUpdate) {
342
+ const handleError = errorThrown => {
343
+ if (onProcessRowUpdateError) {
344
+ onProcessRowUpdateError(errorThrown);
345
+ } else {
346
+ missingOnProcessRowUpdateErrorWarning();
347
+ }
348
+ };
340
349
 
341
- if (column.valueSetter) {
342
- rowUpdate = column.valueSetter({
343
- value: fieldProps.value,
344
- row: rowUpdate
345
- });
346
- } else {
347
- rowUpdate[field] = fieldProps.value;
350
+ try {
351
+ Promise.resolve(processRowUpdate(rowUpdate, row)).then(finalRowUpdate => {
352
+ apiRef.current.updateRows([finalRowUpdate]);
353
+ updateFocusedCellIfNeeded();
354
+ updateOrDeleteRowState(id, null);
355
+ }).catch(handleError);
356
+ } catch (errorThrown) {
357
+ handleError(errorThrown);
348
358
  }
349
- });
350
-
351
- if (processRowUpdate) {
352
- Promise.resolve(processRowUpdate(rowUpdate, row)).then(finalRowUpdate => {
353
- apiRef.current.updateRows([finalRowUpdate]);
354
- updateFocusedCellIfNeeded();
355
- updateOrDeleteRowState(id, null);
356
- });
357
359
  } else {
358
360
  apiRef.current.updateRows([rowUpdate]);
359
361
  updateFocusedCellIfNeeded();
360
362
  updateOrDeleteRowState(id, null);
361
363
  }
362
- }, [apiRef, processRowUpdate, throwIfNotInMode, updateOrDeleteRowState]);
364
+ }, [apiRef, onProcessRowUpdateError, processRowUpdate, throwIfNotInMode, updateOrDeleteRowState]);
363
365
  const setRowEditingEditCellValue = React.useCallback(params => {
364
366
  const {
365
367
  id,
@@ -476,11 +478,32 @@ export const useGridRowEditing = (apiRef, props) => {
476
478
  });
477
479
  });
478
480
  }, [apiRef, throwIfNotEditable, updateOrDeleteFieldState]);
481
+ const getRowWithUpdatedValuesFromRowEditing = React.useCallback(id => {
482
+ const editingState = gridEditRowsStateSelector(apiRef.current.state);
483
+ const row = apiRef.current.getRow(id);
484
+
485
+ let rowUpdate = _extends({}, row);
486
+
487
+ Object.entries(editingState[id]).forEach(([field, fieldProps]) => {
488
+ const column = apiRef.current.getColumn(field);
489
+
490
+ if (column.valueSetter) {
491
+ rowUpdate = column.valueSetter({
492
+ value: fieldProps.value,
493
+ row: rowUpdate
494
+ });
495
+ } else {
496
+ rowUpdate[field] = fieldProps.value;
497
+ }
498
+ });
499
+ return rowUpdate;
500
+ }, [apiRef]);
479
501
  const editingApi = {
480
502
  getRowMode,
481
503
  startRowEditMode,
482
504
  stopRowEditMode,
483
- unstable_setRowEditingEditCellValue: setRowEditingEditCellValue
505
+ unstable_setRowEditingEditCellValue: setRowEditingEditCellValue,
506
+ unstable_getRowWithUpdatedValuesFromRowEditing: getRowWithUpdatedValuesFromRowEditing
484
507
  };
485
508
  useGridApiMethod(apiRef, editingApi, 'EditingApi');
486
509
  };
@@ -5,4 +5,4 @@ import { DataGridProcessedProps } from '../../../models/props/DataGridProps';
5
5
  * @requires useGridFocus (event) - can be after, async only
6
6
  * @requires useGridColumns (event) - can be after, async only
7
7
  */
8
- export declare function useGridEvents(apiRef: React.MutableRefObject<GridApiCommunity>, props: Pick<DataGridProcessedProps, 'onColumnHeaderClick' | 'onColumnHeaderDoubleClick' | 'onColumnHeaderOver' | 'onColumnHeaderOut' | 'onColumnHeaderEnter' | 'onColumnHeaderLeave' | 'onColumnOrderChange' | 'onCellClick' | 'onCellDoubleClick' | 'onCellKeyDown' | 'onCellFocusOut' | 'onRowDoubleClick' | 'onRowClick' | 'onError' | 'onStateChange'>): void;
8
+ export declare function useGridEvents(apiRef: React.MutableRefObject<GridApiCommunity>, props: Pick<DataGridProcessedProps, 'onColumnHeaderClick' | 'onColumnHeaderDoubleClick' | 'onColumnHeaderOver' | 'onColumnHeaderOut' | 'onColumnHeaderEnter' | 'onColumnHeaderLeave' | 'onColumnOrderChange' | 'onCellClick' | 'onCellDoubleClick' | 'onCellKeyDown' | 'onCellFocusOut' | 'onPreferencePanelClose' | 'onPreferencePanelOpen' | 'onRowDoubleClick' | 'onRowClick' | 'onError' | 'onStateChange'>): void;
@@ -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);
@@ -31,9 +31,7 @@ export declare const gridFilteredDescendantCountLookupSelector: import("../../..
31
31
  */
32
32
  export declare const gridVisibleSortedRowEntriesSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, {
33
33
  id: import("../../..").GridRowId;
34
- model: {
35
- [key: string]: any;
36
- };
34
+ model: any;
37
35
  }[]>;
38
36
  /**
39
37
  * Get the id of the rows accessible after the filtering process.
@@ -48,9 +46,7 @@ export declare const gridVisibleSortedRowIdsSelector: import("../../../utils/cre
48
46
  */
49
47
  export declare const gridFilteredSortedRowEntriesSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, {
50
48
  id: import("../../..").GridRowId;
51
- model: {
52
- [key: string]: any;
53
- };
49
+ model: any;
54
50
  }[]>;
55
51
  /**
56
52
  * Get the id of the rows accessible after the filtering process.
@@ -71,9 +67,7 @@ export declare const gridVisibleRowsSelector: import("../../../utils/createSelec
71
67
  */
72
68
  export declare const gridVisibleSortedTopLevelRowEntriesSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, {
73
69
  id: import("../../..").GridRowId;
74
- model: {
75
- [key: string]: any;
76
- };
70
+ model: any;
77
71
  }[]>;
78
72
  /**
79
73
  * Get the amount of rows accessible after the filtering process.
@@ -11,7 +11,7 @@ import { getDefaultGridFilterModel } from './gridFilterState';
11
11
  import { gridFilterModelSelector, gridVisibleSortedRowEntriesSelector } from './gridFilterSelector';
12
12
  import { useFirstRender } from '../../utils/useFirstRender';
13
13
  import { gridRowIdsSelector } from '../rows';
14
- import { useGridRegisterPreProcessor } from '../../core/preProcessing';
14
+ import { useGridRegisterPipeProcessor } from '../../core/pipeProcessing';
15
15
  import { GRID_DEFAULT_STRATEGY, useGridRegisterStrategyProcessor } from '../../core/strategyProcessing';
16
16
  import { buildAggregatedFilterApplier, sanitizeFilterModel, mergeStateWithFilterModel } from './gridFilterUtils';
17
17
  import { jsx as _jsx } from "react/jsx-runtime";
@@ -44,11 +44,7 @@ export const useGridFilter = (apiRef, props) => {
44
44
  stateSelector: gridFilterModelSelector,
45
45
  changeEvent: GridEvents.filterModelChange
46
46
  });
47
- /**
48
- * API METHODS
49
- */
50
-
51
- const applyFilters = React.useCallback(() => {
47
+ const updateFilteredRows = React.useCallback(() => {
52
48
  apiRef.current.setState(state => {
53
49
  const filterModel = gridFilterModelSelector(state, apiRef.current.instanceId);
54
50
  const isRowMatchingFilters = props.filterMode === GridFeatureModeConstant.client ? buildAggregatedFilterApplier(filterModel, apiRef) : null;
@@ -59,9 +55,16 @@ export const useGridFilter = (apiRef, props) => {
59
55
  filter: _extends({}, state.filter, filteringResult)
60
56
  });
61
57
  });
62
- apiRef.current.publishEvent(GridEvents.visibleRowsSet);
58
+ apiRef.current.publishEvent(GridEvents.filteredRowsSet);
59
+ }, [props.filterMode, apiRef]);
60
+ /**
61
+ * API METHODS
62
+ */
63
+
64
+ const applyFilters = React.useCallback(() => {
65
+ updateFilteredRows();
63
66
  apiRef.current.forceUpdate();
64
- }, [apiRef, props.filterMode]);
67
+ }, [apiRef, updateFilteredRows]);
65
68
  const upsertFilterItem = React.useCallback(item => {
66
69
  const filterModel = gridFilterModelSelector(apiRef);
67
70
  const items = [...filterModel.items];
@@ -221,9 +224,9 @@ export const useGridFilter = (apiRef, props) => {
221
224
  filteredDescendantCountLookup: {}
222
225
  };
223
226
  }, [apiRef, props.filterMode]);
224
- useGridRegisterPreProcessor(apiRef, 'exportState', stateExportPreProcessing);
225
- useGridRegisterPreProcessor(apiRef, 'restoreState', stateRestorePreProcessing);
226
- useGridRegisterPreProcessor(apiRef, 'preferencePanel', preferencePanelPreProcessing);
227
+ useGridRegisterPipeProcessor(apiRef, 'exportState', stateExportPreProcessing);
228
+ useGridRegisterPipeProcessor(apiRef, 'restoreState', stateRestorePreProcessing);
229
+ useGridRegisterPipeProcessor(apiRef, 'preferencePanel', preferencePanelPreProcessing);
227
230
  useGridRegisterStrategyProcessor(apiRef, GRID_DEFAULT_STRATEGY, 'filtering', flatFilteringMethod);
228
231
  /**
229
232
  * EVENTS
@@ -245,8 +248,10 @@ export const useGridFilter = (apiRef, props) => {
245
248
  if (methodName === 'filtering') {
246
249
  apiRef.current.unstable_applyFilters();
247
250
  }
248
- }, [apiRef]);
249
- useGridApiEventHandler(apiRef, GridEvents.rowsSet, apiRef.current.unstable_applyFilters);
251
+ }, [apiRef]); // Do not call `apiRef.current.forceUpdate` to avoid re-render before updating the sorted rows.
252
+ // Otherwise, the state is not consistent during the render
253
+
254
+ useGridApiEventHandler(apiRef, GridEvents.rowsSet, updateFilteredRows);
250
255
  useGridApiEventHandler(apiRef, GridEvents.rowExpansionChange, apiRef.current.unstable_applyFilters);
251
256
  useGridApiEventHandler(apiRef, GridEvents.columnsChange, handleColumnsChange);
252
257
  useGridApiEventHandler(apiRef, GridEvents.activeStrategyProcessorChange, handleStrategyProcessorChange);
@@ -102,21 +102,31 @@ export const useGridFocus = (apiRef, props) => {
102
102
  rowIndexToFocus += 1;
103
103
  }
104
104
 
105
+ const currentPage = getVisibleRows(apiRef, {
106
+ pagination: props.pagination,
107
+ paginationMode: props.paginationMode
108
+ });
109
+
105
110
  if (columnIndexToFocus >= visibleColumns.length) {
106
- // Go to next row if we are at the last column
111
+ // Go to next row if we are after the last column
107
112
  rowIndexToFocus += 1;
108
- columnIndexToFocus = 0;
113
+
114
+ if (rowIndexToFocus < currentPage.rows.length) {
115
+ // Go to first column of the next row if there's one more row
116
+ columnIndexToFocus = 0;
117
+ }
109
118
  } else if (columnIndexToFocus < 0) {
110
- // Go to previous row if we are at the first column
119
+ // Go to previous row if we are before the first column
111
120
  rowIndexToFocus -= 1;
112
- columnIndexToFocus = visibleColumns.length - 1;
121
+
122
+ if (rowIndexToFocus >= 0) {
123
+ // Go to last column of the previous if there's one more row
124
+ columnIndexToFocus = visibleColumns.length - 1;
125
+ }
113
126
  }
114
127
 
115
- const currentPage = getVisibleRows(apiRef, {
116
- pagination: props.pagination,
117
- paginationMode: props.paginationMode
118
- });
119
- rowIndexToFocus = clamp(rowIndexToFocus, currentPage.range.firstRowIndex, currentPage.range.lastRowIndex);
128
+ rowIndexToFocus = clamp(rowIndexToFocus, 0, currentPage.rows.length - 1);
129
+ columnIndexToFocus = clamp(columnIndexToFocus, 0, visibleColumns.length - 1);
120
130
  const rowToFocus = currentPage.rows[rowIndexToFocus];
121
131
  const columnToFocus = visibleColumns[columnIndexToFocus];
122
132
  apiRef.current.setCellFocus(rowToFocus.id, columnToFocus.field);
@@ -2,14 +2,12 @@ import * as React from 'react';
2
2
  import { GridApiCommunity } from '../../../models/api/gridApiCommunity';
3
3
  import { DataGridProcessedProps } from '../../../models/props/DataGridProps';
4
4
  /**
5
- * @requires useGridPage (state)
6
- * @requires useGridPageSize (state)
7
- * @requires useGridFilter (state)
8
- * @requires useGridColumns (state, method)
9
- * @requires useGridRows (state, method)
10
5
  * @requires useGridSorting (method) - can be after
6
+ * @requires useGridFilter (state) - can be after
7
+ * @requires useGridColumns (state, method) - can be after
11
8
  * @requires useGridDimensions (method) - can be after
12
9
  * @requires useGridFocus (method) - can be after
13
10
  * @requires useGridScroll (method) - can be after
11
+ * @requires useGridColumnSpanning (method) - can be after
14
12
  */
15
13
  export declare const useGridKeyboardNavigation: (apiRef: React.MutableRefObject<GridApiCommunity>, props: Pick<DataGridProcessedProps, 'pagination' | 'paginationMode'>) => void;
@@ -7,31 +7,50 @@ import { gridVisibleSortedRowEntriesSelector } from '../filter/gridFilterSelecto
7
7
  import { useGridVisibleRows } from '../../utils/useGridVisibleRows';
8
8
  import { GRID_CHECKBOX_SELECTION_COL_DEF } from '../../../colDef/gridCheckboxSelectionColDef';
9
9
  import { gridClasses } from '../../../constants/gridClasses';
10
+ import { GridCellModes } from '../../../models/gridEditRowModel';
11
+ import { isNavigationKey } from '../../../utils/keyboardUtils';
12
+ import { GRID_DETAIL_PANEL_TOGGLE_FIELD } from '../../../constants/gridDetailPanelToggleField';
10
13
  /**
11
- * @requires useGridPage (state)
12
- * @requires useGridPageSize (state)
13
- * @requires useGridFilter (state)
14
- * @requires useGridColumns (state, method)
15
- * @requires useGridRows (state, method)
16
14
  * @requires useGridSorting (method) - can be after
15
+ * @requires useGridFilter (state) - can be after
16
+ * @requires useGridColumns (state, method) - can be after
17
17
  * @requires useGridDimensions (method) - can be after
18
18
  * @requires useGridFocus (method) - can be after
19
19
  * @requires useGridScroll (method) - can be after
20
+ * @requires useGridColumnSpanning (method) - can be after
20
21
  */
21
22
 
22
23
  export const useGridKeyboardNavigation = (apiRef, props) => {
23
24
  const logger = useGridLogger(apiRef, 'useGridKeyboardNavigation');
24
25
  const currentPage = useGridVisibleRows(apiRef, props);
25
- const goToCell = React.useCallback((colIndex, rowIndex) => {
26
+ /**
27
+ * @param {number} colIndex Index of the column to focus
28
+ * @param {number} rowIndex index of the row to focus
29
+ * @param {string} closestColumnToUse Which closest column cell to use when the cell is spanned by `colSpan`.
30
+ */
31
+
32
+ const goToCell = React.useCallback((colIndex, rowIndex, closestColumnToUse = 'left') => {
33
+ var _visibleSortedRows$ro;
34
+
35
+ const visibleSortedRows = gridVisibleSortedRowEntriesSelector(apiRef);
36
+ const rowId = (_visibleSortedRows$ro = visibleSortedRows[rowIndex]) == null ? void 0 : _visibleSortedRows$ro.id;
37
+ const nextCellColSpanInfo = apiRef.current.unstable_getCellColSpanInfo(rowId, colIndex);
38
+
39
+ if (nextCellColSpanInfo && nextCellColSpanInfo.spannedByColSpan) {
40
+ if (closestColumnToUse === 'left') {
41
+ colIndex = nextCellColSpanInfo.leftVisibleCellIndex;
42
+ } else if (closestColumnToUse === 'right') {
43
+ colIndex = nextCellColSpanInfo.rightVisibleCellIndex;
44
+ }
45
+ }
46
+
26
47
  logger.debug(`Navigating to cell row ${rowIndex}, col ${colIndex}`);
27
48
  apiRef.current.scrollToIndexes({
28
49
  colIndex,
29
50
  rowIndex
30
51
  });
31
52
  const field = apiRef.current.getVisibleColumns()[colIndex].field;
32
- const visibleSortedRows = gridVisibleSortedRowEntriesSelector(apiRef);
33
- const node = visibleSortedRows[rowIndex];
34
- apiRef.current.setCellFocus(node.id, field);
53
+ apiRef.current.setCellFocus(rowId, field);
35
54
  }, [apiRef, logger]);
36
55
  const goToHeader = React.useCallback((colIndex, event) => {
37
56
  logger.debug(`Navigating to header col ${colIndex}`);
@@ -84,7 +103,7 @@ export const useGridKeyboardNavigation = (apiRef, props) => {
84
103
  case 'ArrowRight':
85
104
  {
86
105
  if (colIndexBefore < lastColIndex) {
87
- goToCell(colIndexBefore + 1, rowIndexBefore);
106
+ goToCell(colIndexBefore + 1, rowIndexBefore, 'right');
88
107
  }
89
108
 
90
109
  break;
@@ -103,16 +122,36 @@ export const useGridKeyboardNavigation = (apiRef, props) => {
103
122
  {
104
123
  // "Tab" is only triggered by the row / cell editing feature
105
124
  if (event.shiftKey && colIndexBefore > firstColIndex) {
106
- goToCell(colIndexBefore - 1, rowIndexBefore);
125
+ goToCell(colIndexBefore - 1, rowIndexBefore, 'left');
107
126
  } else if (!event.shiftKey && colIndexBefore < lastColIndex) {
108
- goToCell(colIndexBefore + 1, rowIndexBefore);
127
+ goToCell(colIndexBefore + 1, rowIndexBefore, 'right');
109
128
  }
110
129
 
111
130
  break;
112
131
  }
113
132
 
114
- case 'PageDown':
115
133
  case ' ':
134
+ {
135
+ const field = params.field;
136
+
137
+ if (field === GRID_DETAIL_PANEL_TOGGLE_FIELD) {
138
+ break;
139
+ }
140
+
141
+ const colDef = params.colDef;
142
+
143
+ if (colDef && colDef.type === 'treeDataGroup') {
144
+ break;
145
+ }
146
+
147
+ if (!event.shiftKey && rowIndexBefore < lastRowIndexInPage) {
148
+ goToCell(colIndexBefore, Math.min(rowIndexBefore + viewportPageSize, lastRowIndexInPage));
149
+ }
150
+
151
+ break;
152
+ }
153
+
154
+ case 'PageDown':
116
155
  {
117
156
  if (rowIndexBefore < lastRowIndexInPage) {
118
157
  goToCell(colIndexBefore, Math.min(rowIndexBefore + viewportPageSize, lastRowIndexInPage));
@@ -267,6 +306,20 @@ export const useGridKeyboardNavigation = (apiRef, props) => {
267
306
  event.preventDefault();
268
307
  }
269
308
  }, [apiRef, currentPage, goToCell, goToHeader]);
309
+ const handleCellKeyDown = React.useCallback((params, event) => {
310
+ // Ignore portal
311
+ if (!event.currentTarget.contains(event.target)) {
312
+ return;
313
+ } // Get the most recent params because the cell mode may have changed by another listener
314
+
315
+
316
+ const cellParams = apiRef.current.getCellParams(params.id, params.field);
317
+
318
+ if (cellParams.cellMode !== GridCellModes.Edit && isNavigationKey(event.key)) {
319
+ apiRef.current.publishEvent(GridEvents.cellNavigationKeyDown, cellParams, event);
320
+ }
321
+ }, [apiRef]);
270
322
  useGridApiEventHandler(apiRef, GridEvents.cellNavigationKeyDown, handleCellNavigationKeyDown);
271
323
  useGridApiEventHandler(apiRef, GridEvents.columnHeaderKeyDown, handleColumnHeaderKeyDown);
324
+ useGridApiEventHandler(apiRef, GridEvents.cellKeyDown, handleCellKeyDown);
272
325
  };
@@ -33,9 +33,7 @@ export declare const gridPaginationRowRangeSelector: import("../../../utils/crea
33
33
  */
34
34
  export declare const gridPaginatedVisibleSortedGridRowEntriesSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, {
35
35
  id: import("../../..").GridRowId;
36
- model: {
37
- [key: string]: any;
38
- };
36
+ model: any;
39
37
  }[]>;
40
38
  /**
41
39
  * Get the id of each row to include in the current page if the pagination is enabled.
@@ -3,8 +3,8 @@ import * as React from 'react';
3
3
  import { useGridLogger, useGridSelector, useGridApiMethod, useGridApiEventHandler } from '../../utils';
4
4
  import { GridEvents } from '../../../models/events';
5
5
  import { gridVisibleTopLevelRowCountSelector } from '../filter';
6
- import { gridPageSelector } from './gridPaginationSelector';
7
- import { useGridRegisterPreProcessor } from '../../core/preProcessing';
6
+ import { gridPageSelector, gridPageSizeSelector } from './gridPaginationSelector';
7
+ import { useGridRegisterPipeProcessor } from '../../core/pipeProcessing';
8
8
  import { buildWarning } from '../../../utils/warning';
9
9
  export const getPageCount = (rowCount, pageSize) => {
10
10
  if (pageSize > 0 && rowCount > 0) {
@@ -91,8 +91,8 @@ export const useGridPage = (apiRef, props) => {
91
91
  apiRef.current.setState(mergeStateWithPage(page));
92
92
  return params;
93
93
  }, [apiRef]);
94
- useGridRegisterPreProcessor(apiRef, 'exportState', stateExportPreProcessing);
95
- useGridRegisterPreProcessor(apiRef, 'restoreState', stateRestorePreProcessing);
94
+ useGridRegisterPipeProcessor(apiRef, 'exportState', stateExportPreProcessing);
95
+ useGridRegisterPipeProcessor(apiRef, 'restoreState', stateRestorePreProcessing);
96
96
  /**
97
97
  * EVENTS
98
98
  */
@@ -110,7 +110,12 @@ export const useGridPage = (apiRef, props) => {
110
110
  apiRef.current.forceUpdate();
111
111
  };
112
112
 
113
+ const handlePageChange = () => apiRef.current.scrollToIndexes({
114
+ rowIndex: gridPageSelector(apiRef) * gridPageSizeSelector(apiRef)
115
+ });
116
+
113
117
  useGridApiEventHandler(apiRef, GridEvents.pageSizeChange, handlePageSizeChange);
118
+ useGridApiEventHandler(apiRef, GridEvents.pageChange, handlePageChange);
114
119
  /**
115
120
  * EFFECTS
116
121
  */
@@ -4,7 +4,7 @@ import { GridEvents } from '../../../models/events';
4
4
  import { useGridLogger, useGridApiMethod, useGridApiEventHandler, useGridSelector } from '../../utils';
5
5
  import { gridPageSizeSelector } from './gridPaginationSelector';
6
6
  import { gridDensityRowHeightSelector } from '../density';
7
- import { useGridRegisterPreProcessor } from '../../core/preProcessing';
7
+ import { useGridRegisterPipeProcessor } from '../../core/pipeProcessing';
8
8
  export const defaultPageSize = autoPageSize => autoPageSize ? 0 : 100;
9
9
 
10
10
  const mergeStateWithPageSize = pageSize => state => _extends({}, state, {
@@ -84,8 +84,8 @@ export const useGridPageSize = (apiRef, props) => {
84
84
 
85
85
  return params;
86
86
  }, [apiRef]);
87
- useGridRegisterPreProcessor(apiRef, 'exportState', stateExportPreProcessing);
88
- useGridRegisterPreProcessor(apiRef, 'restoreState', stateRestorePreProcessing);
87
+ useGridRegisterPipeProcessor(apiRef, 'exportState', stateExportPreProcessing);
88
+ useGridRegisterPipeProcessor(apiRef, 'restoreState', stateRestorePreProcessing);
89
89
  /**
90
90
  * EVENTS
91
91
  */