@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
@@ -7,7 +7,7 @@ import { useGridApiMethod } from '../../utils/useGridApiMethod';
7
7
  import { useGridLogger } from '../../utils/useGridLogger';
8
8
  import { gridColumnFieldsSelector, gridColumnDefinitionsSelector, gridColumnLookupSelector, gridColumnsMetaSelector, gridColumnsSelector, gridColumnVisibilityModelSelector, gridVisibleColumnDefinitionsSelector, gridColumnPositionsSelector } from './gridColumnsSelector';
9
9
  import { useGridApiEventHandler, useGridApiOptionHandler } from '../../utils/useGridApiEventHandler';
10
- import { useGridRegisterPreProcessor } from '../../core/preProcessing';
10
+ import { useGridRegisterPipeProcessor, useGridRegisterPipeApplier } from '../../core/pipeProcessing';
11
11
  import { hydrateColumnsWidth, computeColumnTypes, createColumnsState, mergeColumnsState, COLUMNS_DIMENSION_PROPERTIES } from './gridColumnsUtils';
12
12
  import { GridPreferencePanelsValue } from '../preferencesPanel';
13
13
  import { jsx as _jsx } from "react/jsx-runtime";
@@ -18,7 +18,7 @@ export var columnsStateInitializer = function columnsStateInitializer(state, pro
18
18
  var columnsTypes = computeColumnTypes(props.columnTypes);
19
19
  var columnsState = createColumnsState({
20
20
  apiRef: apiRef,
21
- columnsTypes: columnsTypes,
21
+ columnTypes: columnsTypes,
22
22
  columnsToUpsert: props.columns,
23
23
  initialState: (_props$initialState2 = props.initialState) == null ? void 0 : _props$initialState2.columns,
24
24
  shouldRegenColumnVisibilityModelFromColumns: !isUsingColumnVisibilityModel,
@@ -39,15 +39,17 @@ export function useGridColumns(apiRef, props) {
39
39
  var _props$initialState4, _props$initialState4$, _props$componentsProp2;
40
40
 
41
41
  var logger = useGridLogger(apiRef, 'useGridColumns');
42
- var columnsTypes = React.useMemo(function () {
42
+ var columnTypes = React.useMemo(function () {
43
43
  return computeColumnTypes(props.columnTypes);
44
44
  }, [props.columnTypes]);
45
+ var previousColumnsProp = React.useRef(props.columns);
46
+ var previousColumnTypesProp = React.useRef(columnTypes);
45
47
  /**
46
48
  * If `initialState.columns.columnVisibilityModel` or `columnVisibilityModel` was defined during the 1st render, we are directly updating the model
47
49
  * 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`
48
50
  */
49
51
 
50
- var isUsingColumnVisibilityModel = React.useRef(!!props.columnVisibilityModel || !!((_props$initialState4 = props.initialState) != null && (_props$initialState4$ = _props$initialState4.columns) != null && _props$initialState4$.columnVisibilityModel)).current;
52
+ var isUsingColumnVisibilityModel = React.useRef(!!props.columnVisibilityModel || !!((_props$initialState4 = props.initialState) != null && (_props$initialState4$ = _props$initialState4.columns) != null && _props$initialState4$.columnVisibilityModel));
51
53
  apiRef.current.unstable_updateControlState({
52
54
  stateId: 'visibleColumns',
53
55
  propModel: props.columnVisibilityModel,
@@ -96,7 +98,7 @@ export function useGridColumns(apiRef, props) {
96
98
  return _extends({}, state, {
97
99
  columns: createColumnsState({
98
100
  apiRef: apiRef,
99
- columnsTypes: columnsTypes,
101
+ columnTypes: columnTypes,
100
102
  columnsToUpsert: [],
101
103
  initialState: undefined,
102
104
  shouldRegenColumnVisibilityModelFromColumns: false,
@@ -107,18 +109,18 @@ export function useGridColumns(apiRef, props) {
107
109
  });
108
110
  apiRef.current.forceUpdate();
109
111
  }
110
- }, [apiRef, columnsTypes]);
112
+ }, [apiRef, columnTypes]);
111
113
  var updateColumns = React.useCallback(function (columns) {
112
114
  var columnsState = createColumnsState({
113
115
  apiRef: apiRef,
114
- columnsTypes: columnsTypes,
116
+ columnTypes: columnTypes,
115
117
  columnsToUpsert: columns,
116
118
  initialState: undefined,
117
119
  shouldRegenColumnVisibilityModelFromColumns: true,
118
120
  keepOnlyColumnsToUpsert: false
119
121
  });
120
122
  setGridColumnsState(columnsState);
121
- }, [apiRef, setGridColumnsState, columnsTypes]);
123
+ }, [apiRef, setGridColumnsState, columnTypes]);
122
124
  var updateColumn = React.useCallback(function (column) {
123
125
  return apiRef.current.updateColumns([column]);
124
126
  }, [apiRef]);
@@ -126,7 +128,7 @@ export function useGridColumns(apiRef, props) {
126
128
  // We keep updating the `hide` option of `GridColDef` when not controlling the model to avoid any breaking change.
127
129
  // `updateColumns` take care of updating the model itself if needs be.
128
130
  // TODO v6: stop using the `hide` field even when the model is not defined
129
- if (isUsingColumnVisibilityModel) {
131
+ if (isUsingColumnVisibilityModel.current) {
130
132
  var _columnVisibilityMode;
131
133
 
132
134
  var columnVisibilityModel = gridColumnVisibilityModelSelector(apiRef);
@@ -152,7 +154,7 @@ export function useGridColumns(apiRef, props) {
152
154
  };
153
155
  apiRef.current.publishEvent(GridEvents.columnVisibilityChange, params);
154
156
  }
155
- }, [apiRef, isUsingColumnVisibilityModel]);
157
+ }, [apiRef]);
156
158
  var setColumnIndex = React.useCallback(function (field, targetIndexPosition) {
157
159
  var allColumns = gridColumnFieldsSelector(apiRef);
158
160
  var oldIndexPosition = allColumns.findIndex(function (col) {
@@ -217,7 +219,7 @@ export function useGridColumns(apiRef, props) {
217
219
  var stateExportPreProcessing = React.useCallback(function (prevState) {
218
220
  var columnsStateToExport = {};
219
221
 
220
- if (isUsingColumnVisibilityModel) {
222
+ if (isUsingColumnVisibilityModel.current) {
221
223
  var columnVisibilityModelToExport = gridColumnVisibilityModelSelector(apiRef);
222
224
  var hasHiddenColumns = Object.values(columnVisibilityModelToExport).some(function (value) {
223
225
  return value === false;
@@ -235,7 +237,13 @@ export function useGridColumns(apiRef, props) {
235
237
  if (colDef.hasBeenResized) {
236
238
  var colDefDimensions = {};
237
239
  COLUMNS_DIMENSION_PROPERTIES.forEach(function (propertyName) {
238
- colDefDimensions[propertyName] = colDef[propertyName];
240
+ var propertyValue = colDef[propertyName];
241
+
242
+ if (propertyValue === Infinity) {
243
+ propertyValue = -1;
244
+ }
245
+
246
+ colDefDimensions[propertyName] = propertyValue;
239
247
  });
240
248
  dimensions[colDef.field] = colDefDimensions;
241
249
  }
@@ -248,11 +256,11 @@ export function useGridColumns(apiRef, props) {
248
256
  return _extends({}, prevState, {
249
257
  columns: columnsStateToExport
250
258
  });
251
- }, [apiRef, isUsingColumnVisibilityModel]);
259
+ }, [apiRef]);
252
260
  var stateRestorePreProcessing = React.useCallback(function (params, context) {
253
261
  var _context$stateToResto;
254
262
 
255
- var columnVisibilityModelToImport = isUsingColumnVisibilityModel ? (_context$stateToResto = context.stateToRestore.columns) == null ? void 0 : _context$stateToResto.columnVisibilityModel : undefined;
263
+ var columnVisibilityModelToImport = isUsingColumnVisibilityModel.current ? (_context$stateToResto = context.stateToRestore.columns) == null ? void 0 : _context$stateToResto.columnVisibilityModel : undefined;
256
264
  var initialState = context.stateToRestore.columns;
257
265
 
258
266
  if (columnVisibilityModelToImport == null && initialState == null) {
@@ -261,10 +269,10 @@ export function useGridColumns(apiRef, props) {
261
269
 
262
270
  var columnsState = createColumnsState({
263
271
  apiRef: apiRef,
264
- columnsTypes: columnsTypes,
272
+ columnTypes: columnTypes,
265
273
  columnsToUpsert: [],
266
274
  initialState: initialState,
267
- shouldRegenColumnVisibilityModelFromColumns: !isUsingColumnVisibilityModel,
275
+ shouldRegenColumnVisibilityModelFromColumns: !isUsingColumnVisibilityModel.current,
268
276
  currentColumnVisibilityModel: columnVisibilityModelToImport,
269
277
  keepOnlyColumnsToUpsert: false
270
278
  });
@@ -275,7 +283,7 @@ export function useGridColumns(apiRef, props) {
275
283
  }
276
284
 
277
285
  return params;
278
- }, [apiRef, isUsingColumnVisibilityModel, columnsTypes]);
286
+ }, [apiRef, columnTypes]);
279
287
  var preferencePanelPreProcessing = React.useCallback(function (initialValue, value) {
280
288
  if (value === GridPreferencePanelsValue.columns) {
281
289
  var _props$componentsProp;
@@ -286,29 +294,13 @@ export function useGridColumns(apiRef, props) {
286
294
 
287
295
  return initialValue;
288
296
  }, [props.components.ColumnsPanel, (_props$componentsProp2 = props.componentsProps) == null ? void 0 : _props$componentsProp2.columnsPanel]);
289
- useGridRegisterPreProcessor(apiRef, 'exportState', stateExportPreProcessing);
290
- useGridRegisterPreProcessor(apiRef, 'restoreState', stateRestorePreProcessing);
291
- useGridRegisterPreProcessor(apiRef, 'preferencePanel', preferencePanelPreProcessing);
297
+ useGridRegisterPipeProcessor(apiRef, 'exportState', stateExportPreProcessing);
298
+ useGridRegisterPipeProcessor(apiRef, 'restoreState', stateRestorePreProcessing);
299
+ useGridRegisterPipeProcessor(apiRef, 'preferencePanel', preferencePanelPreProcessing);
292
300
  /**
293
301
  * EVENTS
294
302
  */
295
303
 
296
- var handlePreProcessorRegister = React.useCallback(function (name) {
297
- if (name !== 'hydrateColumns') {
298
- return;
299
- }
300
-
301
- logger.info("Columns pre-processing have changed, regenerating the columns");
302
- var columnsState = createColumnsState({
303
- apiRef: apiRef,
304
- columnsTypes: columnsTypes,
305
- columnsToUpsert: [],
306
- initialState: undefined,
307
- shouldRegenColumnVisibilityModelFromColumns: !isUsingColumnVisibilityModel,
308
- keepOnlyColumnsToUpsert: false
309
- });
310
- setGridColumnsState(columnsState);
311
- }, [apiRef, logger, setGridColumnsState, columnsTypes, isUsingColumnVisibilityModel]);
312
304
  var prevInnerWidth = React.useRef(null);
313
305
 
314
306
  var handleGridSizeChange = function handleGridSizeChange(viewportInnerSize) {
@@ -318,9 +310,25 @@ export function useGridColumns(apiRef, props) {
318
310
  }
319
311
  };
320
312
 
321
- useGridApiEventHandler(apiRef, GridEvents.preProcessorRegister, handlePreProcessorRegister);
322
313
  useGridApiEventHandler(apiRef, GridEvents.viewportInnerSizeChange, handleGridSizeChange);
323
314
  useGridApiOptionHandler(apiRef, GridEvents.columnVisibilityChange, props.onColumnVisibilityChange);
315
+ /**
316
+ * APPLIERS
317
+ */
318
+
319
+ var hydrateColumns = React.useCallback(function () {
320
+ logger.info("Columns pipe processing have changed, regenerating the columns");
321
+ var columnsState = createColumnsState({
322
+ apiRef: apiRef,
323
+ columnTypes: columnTypes,
324
+ columnsToUpsert: [],
325
+ initialState: undefined,
326
+ shouldRegenColumnVisibilityModelFromColumns: !isUsingColumnVisibilityModel.current,
327
+ keepOnlyColumnsToUpsert: false
328
+ });
329
+ setGridColumnsState(columnsState);
330
+ }, [apiRef, logger, setGridColumnsState, columnTypes]);
331
+ useGridRegisterPipeApplier(apiRef, 'hydrateColumns', hydrateColumns);
324
332
  /**
325
333
  * EFFECTS
326
334
  */
@@ -335,17 +343,24 @@ export function useGridColumns(apiRef, props) {
335
343
  }
336
344
 
337
345
  logger.info("GridColumns have changed, new length ".concat(props.columns.length));
346
+
347
+ if (previousColumnsProp.current === props.columns && previousColumnTypesProp.current === columnTypes) {
348
+ return;
349
+ }
350
+
338
351
  var columnsState = createColumnsState({
339
352
  apiRef: apiRef,
340
- columnsTypes: columnsTypes,
353
+ columnTypes: columnTypes,
341
354
  initialState: undefined,
342
355
  // 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`
343
- shouldRegenColumnVisibilityModelFromColumns: !isUsingColumnVisibilityModel,
356
+ shouldRegenColumnVisibilityModelFromColumns: !isUsingColumnVisibilityModel.current,
344
357
  columnsToUpsert: props.columns,
345
358
  keepOnlyColumnsToUpsert: true
346
359
  });
360
+ previousColumnsProp.current = props.columns;
361
+ previousColumnTypesProp.current = columnTypes;
347
362
  setGridColumnsState(columnsState);
348
- }, [logger, apiRef, setGridColumnsState, props.columns, columnsTypes, isUsingColumnVisibilityModel]);
363
+ }, [logger, apiRef, setGridColumnsState, props.columns, columnTypes]);
349
364
  React.useEffect(function () {
350
365
  if (props.columnVisibilityModel !== undefined) {
351
366
  apiRef.current.setColumnVisibilityModel(props.columnVisibilityModel);
@@ -136,7 +136,8 @@ export function useGridDimensions(apiRef, props) {
136
136
  var dimensionsApi = {
137
137
  resize: resize,
138
138
  getRootDimensions: getRootDimensions,
139
- unstable_getViewportPageSize: getViewportPageSize
139
+ unstable_getViewportPageSize: getViewportPageSize,
140
+ unstable_updateGridDimensionsRef: updateGridDimensionsRef
140
141
  };
141
142
  useGridApiMethod(apiRef, dimensionsApi, 'GridDimensionsApi');
142
143
  var debounceResize = React.useMemo(function () {
@@ -149,12 +150,12 @@ export function useGridDimensions(apiRef, props) {
149
150
  var isJSDOM = /jsdom/.test(window.navigator.userAgent);
150
151
 
151
152
  if (size.height === 0 && !warningShown.current && !props.autoHeight && !isJSDOM) {
152
- 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'));
153
+ 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'));
153
154
  warningShown.current = true;
154
155
  }
155
156
 
156
157
  if (size.width === 0 && !warningShown.current && !isJSDOM) {
157
- 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'));
158
+ 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'));
158
159
  warningShown.current = true;
159
160
  }
160
161
 
@@ -177,7 +178,7 @@ export function useGridDimensions(apiRef, props) {
177
178
  useEnhancedEffect(function () {
178
179
  return updateGridDimensionsRef();
179
180
  }, [updateGridDimensionsRef]);
180
- useGridApiOptionHandler(apiRef, GridEvents.visibleRowsSet, updateGridDimensionsRef);
181
+ useGridApiOptionHandler(apiRef, GridEvents.sortedRowsSet, updateGridDimensionsRef);
181
182
  useGridApiOptionHandler(apiRef, GridEvents.pageChange, updateGridDimensionsRef);
182
183
  useGridApiOptionHandler(apiRef, GridEvents.pageSizeChange, updateGridDimensionsRef);
183
184
  useGridApiOptionHandler(apiRef, GridEvents.columnsChange, updateGridDimensionsRef);
@@ -9,9 +9,12 @@ import { GridEditModes, GridCellModes } from '../../../models/gridEditRowModel';
9
9
  import { useGridApiMethod } from '../../utils/useGridApiMethod';
10
10
  import { gridEditRowsStateSelector } from './gridEditRowsSelector';
11
11
  import { isPrintableKey } from '../../../utils/keyboardUtils';
12
+ import { buildWarning } from '../../../utils/warning';
12
13
  import { GridCellEditStartReasons, GridCellEditStopReasons } from '../../../models/params/gridEditCellParams';
14
+ var 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 var useGridCellEditing = function useGridCellEditing(apiRef, props) {
14
- var processRowUpdate = props.processRowUpdate;
16
+ var processRowUpdate = props.processRowUpdate,
17
+ onProcessRowUpdateError = props.onProcessRowUpdateError;
15
18
 
16
19
  var runIfEditModeIsCell = function runIfEditModeIsCell(callback) {
17
20
  return function () {
@@ -214,10 +217,7 @@ export var useGridCellEditing = function useGridCellEditing(apiRef, props) {
214
217
  }
215
218
 
216
219
  var editingState = gridEditRowsStateSelector(apiRef.current.state);
217
- var row = apiRef.current.getRow(id);
218
- var column = apiRef.current.getColumn(field);
219
220
  var _editingState$id$fiel = editingState[id][field],
220
- value = _editingState$id$fiel.value,
221
221
  error = _editingState$id$fiel.error,
222
222
  isProcessingProps = _editingState$id$fiel.isProcessingProps;
223
223
 
@@ -225,23 +225,33 @@ export var useGridCellEditing = function useGridCellEditing(apiRef, props) {
225
225
  return;
226
226
  }
227
227
 
228
- var rowUpdate = column.valueSetter ? column.valueSetter({
229
- value: value,
230
- row: row
231
- }) : _extends({}, row, _defineProperty({}, field, value));
228
+ var rowUpdate = apiRef.current.unstable_getRowWithUpdatedValuesFromCellEditing(id, field);
232
229
 
233
230
  if (processRowUpdate) {
234
- Promise.resolve(processRowUpdate(rowUpdate, row)).then(function (finalRowUpdate) {
235
- apiRef.current.updateRows([finalRowUpdate]);
236
- updateFocusedCellIfNeeded();
237
- updateOrDeleteFieldState(id, field, null);
238
- });
231
+ var handleError = function handleError(errorThrown) {
232
+ if (onProcessRowUpdateError) {
233
+ onProcessRowUpdateError(errorThrown);
234
+ } else {
235
+ missingOnProcessRowUpdateErrorWarning();
236
+ }
237
+ };
238
+
239
+ try {
240
+ var row = apiRef.current.getRow(id);
241
+ Promise.resolve(processRowUpdate(rowUpdate, row)).then(function (finalRowUpdate) {
242
+ apiRef.current.updateRows([finalRowUpdate]);
243
+ updateFocusedCellIfNeeded();
244
+ updateOrDeleteFieldState(id, field, null);
245
+ }).catch(handleError);
246
+ } catch (errorThrown) {
247
+ handleError(errorThrown);
248
+ }
239
249
  } else {
240
250
  apiRef.current.updateRows([rowUpdate]);
241
251
  updateFocusedCellIfNeeded();
242
252
  updateOrDeleteFieldState(id, field, null);
243
253
  }
244
- }, [apiRef, processRowUpdate, throwIfNotInMode, updateOrDeleteFieldState]);
254
+ }, [apiRef, onProcessRowUpdateError, processRowUpdate, throwIfNotInMode, updateOrDeleteFieldState]);
245
255
  var setCellEditingEditCellValue = React.useCallback( /*#__PURE__*/function () {
246
256
  var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(params) {
247
257
  var id, field, value, column, row, parsedValue, editingState, newProps, hasChanged;
@@ -319,11 +329,22 @@ export var useGridCellEditing = function useGridCellEditing(apiRef, props) {
319
329
  return _ref.apply(this, arguments);
320
330
  };
321
331
  }(), [apiRef, throwIfNotEditable, throwIfNotInMode, updateOrDeleteFieldState]);
332
+ var getRowWithUpdatedValuesFromCellEditing = React.useCallback(function (id, field) {
333
+ var column = apiRef.current.getColumn(field);
334
+ var editingState = gridEditRowsStateSelector(apiRef.current.state);
335
+ var value = editingState[id][field].value;
336
+ var row = apiRef.current.getRow(id);
337
+ return column.valueSetter ? column.valueSetter({
338
+ value: value,
339
+ row: row
340
+ }) : _extends({}, row, _defineProperty({}, field, value));
341
+ }, [apiRef]);
322
342
  var editingApi = {
323
343
  getCellMode: getCellMode,
324
344
  startCellEditMode: startCellEditMode,
325
345
  stopCellEditMode: stopCellEditMode,
326
- unstable_setCellEditingEditCellValue: setCellEditingEditCellValue
346
+ unstable_setCellEditingEditCellValue: setCellEditingEditCellValue,
347
+ unstable_getRowWithUpdatedValuesFromCellEditing: getRowWithUpdatedValuesFromCellEditing
327
348
  };
328
349
  useGridApiMethod(apiRef, editingApi, 'EditingApi');
329
350
  };
@@ -5,7 +5,7 @@ import _regeneratorRuntime from "@babel/runtime/regenerator";
5
5
  import * as React from 'react';
6
6
  import { useGridApiMethod } from '../../utils/useGridApiMethod';
7
7
  import { useGridCellEditing } from './useGridCellEditing.new';
8
- import { GridCellModes } from '../../../models/gridEditRowModel';
8
+ import { GridCellModes, GridEditModes } from '../../../models/gridEditRowModel';
9
9
  import { useGridRowEditing } from './useGridRowEditing.new';
10
10
  export var editingStateInitializer = function editingStateInitializer(state) {
11
11
  return _extends({}, state, {
@@ -119,7 +119,7 @@ export var useGridEditing = function useGridEditing(apiRef, props) {
119
119
  while (1) {
120
120
  switch (_context.prev = _context.next) {
121
121
  case 0:
122
- setEditCellValueToCall = props.editMode === 'row' ? apiRef.current.unstable_setRowEditingEditCellValue : apiRef.current.unstable_setCellEditingEditCellValue; // Check if the cell is in edit mode
122
+ setEditCellValueToCall = props.editMode === GridEditModes.Row ? apiRef.current.unstable_setRowEditingEditCellValue : apiRef.current.unstable_setCellEditingEditCellValue; // Check if the cell is in edit mode
123
123
  // By the time this callback runs the user may have cancelled the editing
124
124
 
125
125
  if (!(apiRef.current.getCellMode(id, field) === GridCellModes.Edit)) {
@@ -143,10 +143,14 @@ export var useGridEditing = function useGridEditing(apiRef, props) {
143
143
  })));
144
144
  });
145
145
  }, [apiRef, props.editMode]);
146
+ var getRowWithUpdatedValues = React.useCallback(function (id, field) {
147
+ return props.editMode === GridEditModes.Cell ? apiRef.current.unstable_getRowWithUpdatedValuesFromCellEditing(id, field) : apiRef.current.unstable_getRowWithUpdatedValuesFromRowEditing(id);
148
+ }, [apiRef, props.editMode]);
146
149
  var editingSharedApi = {
147
150
  isCellEditable: isCellEditable,
148
151
  setEditCellValue: setEditCellValue,
149
- unstable_runPendingEditCellValueMutation: runPendingEditCellValueMutation
152
+ unstable_runPendingEditCellValueMutation: runPendingEditCellValueMutation,
153
+ unstable_getRowWithUpdatedValues: getRowWithUpdatedValues
150
154
  };
151
155
  useGridApiMethod(apiRef, editingSharedApi, 'EditingApi');
152
156
  };
@@ -1,6 +1,6 @@
1
+ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
1
2
  import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
2
3
  import _toPropertyKey from "@babel/runtime/helpers/esm/toPropertyKey";
3
- import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
4
4
  import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
5
5
  import _extends from "@babel/runtime/helpers/esm/extends";
6
6
  import * as React from 'react';
@@ -11,11 +11,14 @@ import { useGridApiMethod } from '../../utils/useGridApiMethod';
11
11
  import { gridEditRowsStateSelector } from './gridEditRowsSelector';
12
12
  import { isPrintableKey } from '../../../utils/keyboardUtils';
13
13
  import { gridColumnFieldsSelector } from '../columns/gridColumnsSelector';
14
+ import { buildWarning } from '../../../utils/warning';
14
15
  import { GridRowEditStopReasons, GridRowEditStartReasons } from '../../../models/params/gridRowParams';
16
+ var 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');
15
17
  export var useGridRowEditing = function useGridRowEditing(apiRef, props) {
16
18
  var focusTimeout = React.useRef(null);
17
19
  var nextFocusedCell = React.useRef(null);
18
- var processRowUpdate = props.processRowUpdate;
20
+ var processRowUpdate = props.processRowUpdate,
21
+ onProcessRowUpdateError = props.onProcessRowUpdateError;
19
22
 
20
23
  var runIfEditModeIsRow = function runIfEditModeIsRow(callback) {
21
24
  return function () {
@@ -332,37 +335,32 @@ export var useGridRowEditing = function useGridRowEditing(apiRef, props) {
332
335
  return;
333
336
  }
334
337
 
335
- var rowUpdate = _extends({}, row);
338
+ var rowUpdate = apiRef.current.unstable_getRowWithUpdatedValuesFromRowEditing(id);
336
339
 
337
- Object.entries(editingState[id]).forEach(function (_ref) {
338
- var _ref2 = _slicedToArray(_ref, 2),
339
- field = _ref2[0],
340
- fieldProps = _ref2[1];
341
-
342
- var column = apiRef.current.getColumn(field);
340
+ if (processRowUpdate) {
341
+ var handleError = function handleError(errorThrown) {
342
+ if (onProcessRowUpdateError) {
343
+ onProcessRowUpdateError(errorThrown);
344
+ } else {
345
+ missingOnProcessRowUpdateErrorWarning();
346
+ }
347
+ };
343
348
 
344
- if (column.valueSetter) {
345
- rowUpdate = column.valueSetter({
346
- value: fieldProps.value,
347
- row: rowUpdate
348
- });
349
- } else {
350
- rowUpdate[field] = fieldProps.value;
349
+ try {
350
+ Promise.resolve(processRowUpdate(rowUpdate, row)).then(function (finalRowUpdate) {
351
+ apiRef.current.updateRows([finalRowUpdate]);
352
+ updateFocusedCellIfNeeded();
353
+ updateOrDeleteRowState(id, null);
354
+ }).catch(handleError);
355
+ } catch (errorThrown) {
356
+ handleError(errorThrown);
351
357
  }
352
- });
353
-
354
- if (processRowUpdate) {
355
- Promise.resolve(processRowUpdate(rowUpdate, row)).then(function (finalRowUpdate) {
356
- apiRef.current.updateRows([finalRowUpdate]);
357
- updateFocusedCellIfNeeded();
358
- updateOrDeleteRowState(id, null);
359
- });
360
358
  } else {
361
359
  apiRef.current.updateRows([rowUpdate]);
362
360
  updateFocusedCellIfNeeded();
363
361
  updateOrDeleteRowState(id, null);
364
362
  }
365
- }, [apiRef, processRowUpdate, throwIfNotInMode, updateOrDeleteRowState]);
363
+ }, [apiRef, onProcessRowUpdateError, processRowUpdate, throwIfNotInMode, updateOrDeleteRowState]);
366
364
  var setRowEditingEditCellValue = React.useCallback(function (params) {
367
365
  var id = params.id,
368
366
  field = params.field,
@@ -427,10 +425,10 @@ export var useGridRowEditing = function useGridRowEditing(apiRef, props) {
427
425
  promises.push(promise);
428
426
  }
429
427
 
430
- Object.entries(editingState[id]).forEach(function (_ref3) {
431
- var _ref4 = _slicedToArray(_ref3, 2),
432
- thisField = _ref4[0],
433
- fieldProps = _ref4[1];
428
+ Object.entries(editingState[id]).forEach(function (_ref) {
429
+ var _ref2 = _slicedToArray(_ref, 2),
430
+ thisField = _ref2[0],
431
+ fieldProps = _ref2[1];
434
432
 
435
433
  if (thisField === field) {
436
434
  return;
@@ -483,11 +481,36 @@ export var useGridRowEditing = function useGridRowEditing(apiRef, props) {
483
481
  });
484
482
  });
485
483
  }, [apiRef, throwIfNotEditable, updateOrDeleteFieldState]);
484
+ var getRowWithUpdatedValuesFromRowEditing = React.useCallback(function (id) {
485
+ var editingState = gridEditRowsStateSelector(apiRef.current.state);
486
+ var row = apiRef.current.getRow(id);
487
+
488
+ var rowUpdate = _extends({}, row);
489
+
490
+ Object.entries(editingState[id]).forEach(function (_ref3) {
491
+ var _ref4 = _slicedToArray(_ref3, 2),
492
+ field = _ref4[0],
493
+ fieldProps = _ref4[1];
494
+
495
+ var column = apiRef.current.getColumn(field);
496
+
497
+ if (column.valueSetter) {
498
+ rowUpdate = column.valueSetter({
499
+ value: fieldProps.value,
500
+ row: rowUpdate
501
+ });
502
+ } else {
503
+ rowUpdate[field] = fieldProps.value;
504
+ }
505
+ });
506
+ return rowUpdate;
507
+ }, [apiRef]);
486
508
  var editingApi = {
487
509
  getRowMode: getRowMode,
488
510
  startRowEditMode: startRowEditMode,
489
511
  stopRowEditMode: stopRowEditMode,
490
- unstable_setRowEditingEditCellValue: setRowEditingEditCellValue
512
+ unstable_setRowEditingEditCellValue: setRowEditingEditCellValue,
513
+ unstable_getRowWithUpdatedValuesFromRowEditing: getRowWithUpdatedValuesFromRowEditing
491
514
  };
492
515
  useGridApiMethod(apiRef, editingApi, 'EditingApi');
493
516
  };
@@ -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);
@@ -12,7 +12,7 @@ import { getDefaultGridFilterModel } from './gridFilterState';
12
12
  import { gridFilterModelSelector, gridVisibleSortedRowEntriesSelector } from './gridFilterSelector';
13
13
  import { useFirstRender } from '../../utils/useFirstRender';
14
14
  import { gridRowIdsSelector } from '../rows';
15
- import { useGridRegisterPreProcessor } from '../../core/preProcessing';
15
+ import { useGridRegisterPipeProcessor } from '../../core/pipeProcessing';
16
16
  import { GRID_DEFAULT_STRATEGY, useGridRegisterStrategyProcessor } from '../../core/strategyProcessing';
17
17
  import { buildAggregatedFilterApplier, sanitizeFilterModel, mergeStateWithFilterModel } from './gridFilterUtils';
18
18
  import { jsx as _jsx } from "react/jsx-runtime";
@@ -45,11 +45,7 @@ export var useGridFilter = function useGridFilter(apiRef, props) {
45
45
  stateSelector: gridFilterModelSelector,
46
46
  changeEvent: GridEvents.filterModelChange
47
47
  });
48
- /**
49
- * API METHODS
50
- */
51
-
52
- var applyFilters = React.useCallback(function () {
48
+ var updateFilteredRows = React.useCallback(function () {
53
49
  apiRef.current.setState(function (state) {
54
50
  var filterModel = gridFilterModelSelector(state, apiRef.current.instanceId);
55
51
  var isRowMatchingFilters = props.filterMode === GridFeatureModeConstant.client ? buildAggregatedFilterApplier(filterModel, apiRef) : null;
@@ -60,9 +56,16 @@ export var useGridFilter = function useGridFilter(apiRef, props) {
60
56
  filter: _extends({}, state.filter, filteringResult)
61
57
  });
62
58
  });
63
- apiRef.current.publishEvent(GridEvents.visibleRowsSet);
59
+ apiRef.current.publishEvent(GridEvents.filteredRowsSet);
60
+ }, [props.filterMode, apiRef]);
61
+ /**
62
+ * API METHODS
63
+ */
64
+
65
+ var applyFilters = React.useCallback(function () {
66
+ updateFilteredRows();
64
67
  apiRef.current.forceUpdate();
65
- }, [apiRef, props.filterMode]);
68
+ }, [apiRef, updateFilteredRows]);
66
69
  var upsertFilterItem = React.useCallback(function (item) {
67
70
  var filterModel = gridFilterModelSelector(apiRef);
68
71
 
@@ -234,9 +237,9 @@ export var useGridFilter = function useGridFilter(apiRef, props) {
234
237
  filteredDescendantCountLookup: {}
235
238
  };
236
239
  }, [apiRef, props.filterMode]);
237
- useGridRegisterPreProcessor(apiRef, 'exportState', stateExportPreProcessing);
238
- useGridRegisterPreProcessor(apiRef, 'restoreState', stateRestorePreProcessing);
239
- useGridRegisterPreProcessor(apiRef, 'preferencePanel', preferencePanelPreProcessing);
240
+ useGridRegisterPipeProcessor(apiRef, 'exportState', stateExportPreProcessing);
241
+ useGridRegisterPipeProcessor(apiRef, 'restoreState', stateRestorePreProcessing);
242
+ useGridRegisterPipeProcessor(apiRef, 'preferencePanel', preferencePanelPreProcessing);
240
243
  useGridRegisterStrategyProcessor(apiRef, GRID_DEFAULT_STRATEGY, 'filtering', flatFilteringMethod);
241
244
  /**
242
245
  * EVENTS
@@ -260,8 +263,10 @@ export var useGridFilter = function useGridFilter(apiRef, props) {
260
263
  if (methodName === 'filtering') {
261
264
  apiRef.current.unstable_applyFilters();
262
265
  }
263
- }, [apiRef]);
264
- useGridApiEventHandler(apiRef, GridEvents.rowsSet, apiRef.current.unstable_applyFilters);
266
+ }, [apiRef]); // Do not call `apiRef.current.forceUpdate` to avoid re-render before updating the sorted rows.
267
+ // Otherwise, the state is not consistent during the render
268
+
269
+ useGridApiEventHandler(apiRef, GridEvents.rowsSet, updateFilteredRows);
265
270
  useGridApiEventHandler(apiRef, GridEvents.rowExpansionChange, apiRef.current.unstable_applyFilters);
266
271
  useGridApiEventHandler(apiRef, GridEvents.columnsChange, handleColumnsChange);
267
272
  useGridApiEventHandler(apiRef, GridEvents.activeStrategyProcessorChange, handleStrategyProcessorChange);
@@ -105,21 +105,31 @@ export var useGridFocus = function useGridFocus(apiRef, props) {
105
105
  rowIndexToFocus += 1;
106
106
  }
107
107
 
108
+ var currentPage = getVisibleRows(apiRef, {
109
+ pagination: props.pagination,
110
+ paginationMode: props.paginationMode
111
+ });
112
+
108
113
  if (columnIndexToFocus >= visibleColumns.length) {
109
- // Go to next row if we are at the last column
114
+ // Go to next row if we are after the last column
110
115
  rowIndexToFocus += 1;
111
- columnIndexToFocus = 0;
116
+
117
+ if (rowIndexToFocus < currentPage.rows.length) {
118
+ // Go to first column of the next row if there's one more row
119
+ columnIndexToFocus = 0;
120
+ }
112
121
  } else if (columnIndexToFocus < 0) {
113
- // Go to previous row if we are at the first column
122
+ // Go to previous row if we are before the first column
114
123
  rowIndexToFocus -= 1;
115
- columnIndexToFocus = visibleColumns.length - 1;
124
+
125
+ if (rowIndexToFocus >= 0) {
126
+ // Go to last column of the previous if there's one more row
127
+ columnIndexToFocus = visibleColumns.length - 1;
128
+ }
116
129
  }
117
130
 
118
- var currentPage = getVisibleRows(apiRef, {
119
- pagination: props.pagination,
120
- paginationMode: props.paginationMode
121
- });
122
- rowIndexToFocus = clamp(rowIndexToFocus, currentPage.range.firstRowIndex, currentPage.range.lastRowIndex);
131
+ rowIndexToFocus = clamp(rowIndexToFocus, 0, currentPage.rows.length - 1);
132
+ columnIndexToFocus = clamp(columnIndexToFocus, 0, visibleColumns.length - 1);
123
133
  var rowToFocus = currentPage.rows[rowIndexToFocus];
124
134
  var columnToFocus = visibleColumns[columnIndexToFocus];
125
135
  apiRef.current.setCellFocus(rowToFocus.id, columnToFocus.field);