@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
@@ -22,7 +22,7 @@ var _gridColumnsSelector = require("./gridColumnsSelector");
22
22
 
23
23
  var _useGridApiEventHandler = require("../../utils/useGridApiEventHandler");
24
24
 
25
- var _preProcessing = require("../../core/preProcessing");
25
+ var _pipeProcessing = require("../../core/pipeProcessing");
26
26
 
27
27
  var _gridColumnsUtils = require("./gridColumnsUtils");
28
28
 
@@ -41,7 +41,7 @@ const columnsStateInitializer = (state, props, apiRef) => {
41
41
  const columnsTypes = (0, _gridColumnsUtils.computeColumnTypes)(props.columnTypes);
42
42
  const columnsState = (0, _gridColumnsUtils.createColumnsState)({
43
43
  apiRef,
44
- columnsTypes,
44
+ columnTypes: columnsTypes,
45
45
  columnsToUpsert: props.columns,
46
46
  initialState: (_props$initialState2 = props.initialState) == null ? void 0 : _props$initialState2.columns,
47
47
  shouldRegenColumnVisibilityModelFromColumns: !isUsingColumnVisibilityModel,
@@ -65,13 +65,15 @@ function useGridColumns(apiRef, props) {
65
65
  var _props$initialState4, _props$initialState4$, _props$componentsProp2;
66
66
 
67
67
  const logger = (0, _useGridLogger.useGridLogger)(apiRef, 'useGridColumns');
68
- const columnsTypes = React.useMemo(() => (0, _gridColumnsUtils.computeColumnTypes)(props.columnTypes), [props.columnTypes]);
68
+ const columnTypes = React.useMemo(() => (0, _gridColumnsUtils.computeColumnTypes)(props.columnTypes), [props.columnTypes]);
69
+ const previousColumnsProp = React.useRef(props.columns);
70
+ const previousColumnTypesProp = React.useRef(columnTypes);
69
71
  /**
70
72
  * If `initialState.columns.columnVisibilityModel` or `columnVisibilityModel` was defined during the 1st render, we are directly updating the model
71
73
  * 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`
72
74
  */
73
75
 
74
- const isUsingColumnVisibilityModel = React.useRef(!!props.columnVisibilityModel || !!((_props$initialState4 = props.initialState) != null && (_props$initialState4$ = _props$initialState4.columns) != null && _props$initialState4$.columnVisibilityModel)).current;
76
+ const isUsingColumnVisibilityModel = React.useRef(!!props.columnVisibilityModel || !!((_props$initialState4 = props.initialState) != null && (_props$initialState4$ = _props$initialState4.columns) != null && _props$initialState4$.columnVisibilityModel));
75
77
  apiRef.current.unstable_updateControlState({
76
78
  stateId: 'visibleColumns',
77
79
  propModel: props.columnVisibilityModel,
@@ -108,7 +110,7 @@ function useGridColumns(apiRef, props) {
108
110
  apiRef.current.setState(state => (0, _extends2.default)({}, state, {
109
111
  columns: (0, _gridColumnsUtils.createColumnsState)({
110
112
  apiRef,
111
- columnsTypes,
113
+ columnTypes,
112
114
  columnsToUpsert: [],
113
115
  initialState: undefined,
114
116
  shouldRegenColumnVisibilityModelFromColumns: false,
@@ -118,24 +120,24 @@ function useGridColumns(apiRef, props) {
118
120
  }));
119
121
  apiRef.current.forceUpdate();
120
122
  }
121
- }, [apiRef, columnsTypes]);
123
+ }, [apiRef, columnTypes]);
122
124
  const updateColumns = React.useCallback(columns => {
123
125
  const columnsState = (0, _gridColumnsUtils.createColumnsState)({
124
126
  apiRef,
125
- columnsTypes,
127
+ columnTypes,
126
128
  columnsToUpsert: columns,
127
129
  initialState: undefined,
128
130
  shouldRegenColumnVisibilityModelFromColumns: true,
129
131
  keepOnlyColumnsToUpsert: false
130
132
  });
131
133
  setGridColumnsState(columnsState);
132
- }, [apiRef, setGridColumnsState, columnsTypes]);
134
+ }, [apiRef, setGridColumnsState, columnTypes]);
133
135
  const updateColumn = React.useCallback(column => apiRef.current.updateColumns([column]), [apiRef]);
134
136
  const setColumnVisibility = React.useCallback((field, isVisible) => {
135
137
  // We keep updating the `hide` option of `GridColDef` when not controlling the model to avoid any breaking change.
136
138
  // `updateColumns` take care of updating the model itself if needs be.
137
139
  // TODO v6: stop using the `hide` field even when the model is not defined
138
- if (isUsingColumnVisibilityModel) {
140
+ if (isUsingColumnVisibilityModel.current) {
139
141
  var _columnVisibilityMode;
140
142
 
141
143
  const columnVisibilityModel = (0, _gridColumnsSelector.gridColumnVisibilityModelSelector)(apiRef);
@@ -160,7 +162,7 @@ function useGridColumns(apiRef, props) {
160
162
  };
161
163
  apiRef.current.publishEvent(_events.GridEvents.columnVisibilityChange, params);
162
164
  }
163
- }, [apiRef, isUsingColumnVisibilityModel]);
165
+ }, [apiRef]);
164
166
  const setColumnIndex = React.useCallback((field, targetIndexPosition) => {
165
167
  const allColumns = (0, _gridColumnsSelector.gridColumnFieldsSelector)(apiRef);
166
168
  const oldIndexPosition = allColumns.findIndex(col => col === field);
@@ -219,7 +221,7 @@ function useGridColumns(apiRef, props) {
219
221
  const stateExportPreProcessing = React.useCallback(prevState => {
220
222
  const columnsStateToExport = {};
221
223
 
222
- if (isUsingColumnVisibilityModel) {
224
+ if (isUsingColumnVisibilityModel.current) {
223
225
  const columnVisibilityModelToExport = (0, _gridColumnsSelector.gridColumnVisibilityModelSelector)(apiRef);
224
226
  const hasHiddenColumns = Object.values(columnVisibilityModelToExport).some(value => value === false);
225
227
 
@@ -236,7 +238,13 @@ function useGridColumns(apiRef, props) {
236
238
  const colDefDimensions = {};
237
239
 
238
240
  _gridColumnsUtils.COLUMNS_DIMENSION_PROPERTIES.forEach(propertyName => {
239
- colDefDimensions[propertyName] = colDef[propertyName];
241
+ let propertyValue = colDef[propertyName];
242
+
243
+ if (propertyValue === Infinity) {
244
+ propertyValue = -1;
245
+ }
246
+
247
+ colDefDimensions[propertyName] = propertyValue;
240
248
  });
241
249
 
242
250
  dimensions[colDef.field] = colDefDimensions;
@@ -250,11 +258,11 @@ function useGridColumns(apiRef, props) {
250
258
  return (0, _extends2.default)({}, prevState, {
251
259
  columns: columnsStateToExport
252
260
  });
253
- }, [apiRef, isUsingColumnVisibilityModel]);
261
+ }, [apiRef]);
254
262
  const stateRestorePreProcessing = React.useCallback((params, context) => {
255
263
  var _context$stateToResto;
256
264
 
257
- const columnVisibilityModelToImport = isUsingColumnVisibilityModel ? (_context$stateToResto = context.stateToRestore.columns) == null ? void 0 : _context$stateToResto.columnVisibilityModel : undefined;
265
+ const columnVisibilityModelToImport = isUsingColumnVisibilityModel.current ? (_context$stateToResto = context.stateToRestore.columns) == null ? void 0 : _context$stateToResto.columnVisibilityModel : undefined;
258
266
  const initialState = context.stateToRestore.columns;
259
267
 
260
268
  if (columnVisibilityModelToImport == null && initialState == null) {
@@ -263,10 +271,10 @@ function useGridColumns(apiRef, props) {
263
271
 
264
272
  const columnsState = (0, _gridColumnsUtils.createColumnsState)({
265
273
  apiRef,
266
- columnsTypes,
274
+ columnTypes,
267
275
  columnsToUpsert: [],
268
276
  initialState,
269
- shouldRegenColumnVisibilityModelFromColumns: !isUsingColumnVisibilityModel,
277
+ shouldRegenColumnVisibilityModelFromColumns: !isUsingColumnVisibilityModel.current,
270
278
  currentColumnVisibilityModel: columnVisibilityModelToImport,
271
279
  keepOnlyColumnsToUpsert: false
272
280
  });
@@ -277,7 +285,7 @@ function useGridColumns(apiRef, props) {
277
285
  }
278
286
 
279
287
  return params;
280
- }, [apiRef, isUsingColumnVisibilityModel, columnsTypes]);
288
+ }, [apiRef, columnTypes]);
281
289
  const preferencePanelPreProcessing = React.useCallback((initialValue, value) => {
282
290
  if (value === _preferencesPanel.GridPreferencePanelsValue.columns) {
283
291
  var _props$componentsProp;
@@ -288,29 +296,13 @@ function useGridColumns(apiRef, props) {
288
296
 
289
297
  return initialValue;
290
298
  }, [props.components.ColumnsPanel, (_props$componentsProp2 = props.componentsProps) == null ? void 0 : _props$componentsProp2.columnsPanel]);
291
- (0, _preProcessing.useGridRegisterPreProcessor)(apiRef, 'exportState', stateExportPreProcessing);
292
- (0, _preProcessing.useGridRegisterPreProcessor)(apiRef, 'restoreState', stateRestorePreProcessing);
293
- (0, _preProcessing.useGridRegisterPreProcessor)(apiRef, 'preferencePanel', preferencePanelPreProcessing);
299
+ (0, _pipeProcessing.useGridRegisterPipeProcessor)(apiRef, 'exportState', stateExportPreProcessing);
300
+ (0, _pipeProcessing.useGridRegisterPipeProcessor)(apiRef, 'restoreState', stateRestorePreProcessing);
301
+ (0, _pipeProcessing.useGridRegisterPipeProcessor)(apiRef, 'preferencePanel', preferencePanelPreProcessing);
294
302
  /**
295
303
  * EVENTS
296
304
  */
297
305
 
298
- const handlePreProcessorRegister = React.useCallback(name => {
299
- if (name !== 'hydrateColumns') {
300
- return;
301
- }
302
-
303
- logger.info(`Columns pre-processing have changed, regenerating the columns`);
304
- const columnsState = (0, _gridColumnsUtils.createColumnsState)({
305
- apiRef,
306
- columnsTypes,
307
- columnsToUpsert: [],
308
- initialState: undefined,
309
- shouldRegenColumnVisibilityModelFromColumns: !isUsingColumnVisibilityModel,
310
- keepOnlyColumnsToUpsert: false
311
- });
312
- setGridColumnsState(columnsState);
313
- }, [apiRef, logger, setGridColumnsState, columnsTypes, isUsingColumnVisibilityModel]);
314
306
  const prevInnerWidth = React.useRef(null);
315
307
 
316
308
  const handleGridSizeChange = viewportInnerSize => {
@@ -320,9 +312,25 @@ function useGridColumns(apiRef, props) {
320
312
  }
321
313
  };
322
314
 
323
- (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, _events.GridEvents.preProcessorRegister, handlePreProcessorRegister);
324
315
  (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, _events.GridEvents.viewportInnerSizeChange, handleGridSizeChange);
325
316
  (0, _useGridApiEventHandler.useGridApiOptionHandler)(apiRef, _events.GridEvents.columnVisibilityChange, props.onColumnVisibilityChange);
317
+ /**
318
+ * APPLIERS
319
+ */
320
+
321
+ const hydrateColumns = React.useCallback(() => {
322
+ logger.info(`Columns pipe processing have changed, regenerating the columns`);
323
+ const columnsState = (0, _gridColumnsUtils.createColumnsState)({
324
+ apiRef,
325
+ columnTypes,
326
+ columnsToUpsert: [],
327
+ initialState: undefined,
328
+ shouldRegenColumnVisibilityModelFromColumns: !isUsingColumnVisibilityModel.current,
329
+ keepOnlyColumnsToUpsert: false
330
+ });
331
+ setGridColumnsState(columnsState);
332
+ }, [apiRef, logger, setGridColumnsState, columnTypes]);
333
+ (0, _pipeProcessing.useGridRegisterPipeApplier)(apiRef, 'hydrateColumns', hydrateColumns);
326
334
  /**
327
335
  * EFFECTS
328
336
  */
@@ -337,17 +345,24 @@ function useGridColumns(apiRef, props) {
337
345
  }
338
346
 
339
347
  logger.info(`GridColumns have changed, new length ${props.columns.length}`);
348
+
349
+ if (previousColumnsProp.current === props.columns && previousColumnTypesProp.current === columnTypes) {
350
+ return;
351
+ }
352
+
340
353
  const columnsState = (0, _gridColumnsUtils.createColumnsState)({
341
354
  apiRef,
342
- columnsTypes,
355
+ columnTypes,
343
356
  initialState: undefined,
344
357
  // 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`
345
- shouldRegenColumnVisibilityModelFromColumns: !isUsingColumnVisibilityModel,
358
+ shouldRegenColumnVisibilityModelFromColumns: !isUsingColumnVisibilityModel.current,
346
359
  columnsToUpsert: props.columns,
347
360
  keepOnlyColumnsToUpsert: true
348
361
  });
362
+ previousColumnsProp.current = props.columns;
363
+ previousColumnTypesProp.current = columnTypes;
349
364
  setGridColumnsState(columnsState);
350
- }, [logger, apiRef, setGridColumnsState, props.columns, columnsTypes, isUsingColumnVisibilityModel]);
365
+ }, [logger, apiRef, setGridColumnsState, props.columns, columnTypes]);
351
366
  React.useEffect(() => {
352
367
  if (props.columnVisibilityModel !== undefined) {
353
368
  apiRef.current.setColumnVisibilityModel(props.columnVisibilityModel);
@@ -156,7 +156,8 @@ function useGridDimensions(apiRef, props) {
156
156
  const dimensionsApi = {
157
157
  resize,
158
158
  getRootDimensions,
159
- unstable_getViewportPageSize: getViewportPageSize
159
+ unstable_getViewportPageSize: getViewportPageSize,
160
+ unstable_updateGridDimensionsRef: updateGridDimensionsRef
160
161
  };
161
162
  (0, _useGridApiMethod.useGridApiMethod)(apiRef, dimensionsApi, 'GridDimensionsApi');
162
163
  const debounceResize = React.useMemo(() => (0, _utils.debounce)(resize, 60), [resize]);
@@ -167,12 +168,12 @@ function useGridDimensions(apiRef, props) {
167
168
  const isJSDOM = /jsdom/.test(window.navigator.userAgent);
168
169
 
169
170
  if (size.height === 0 && !warningShown.current && !props.autoHeight && !isJSDOM) {
170
- 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'));
171
+ 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'));
171
172
  warningShown.current = true;
172
173
  }
173
174
 
174
175
  if (size.width === 0 && !warningShown.current && !isJSDOM) {
175
- 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'));
176
+ 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'));
176
177
  warningShown.current = true;
177
178
  }
178
179
 
@@ -193,7 +194,7 @@ function useGridDimensions(apiRef, props) {
193
194
  debounceResize();
194
195
  }, [props.autoHeight, debounceResize, logger, resize]);
195
196
  (0, _utils.unstable_useEnhancedEffect)(() => updateGridDimensionsRef(), [updateGridDimensionsRef]);
196
- (0, _useGridApiEventHandler.useGridApiOptionHandler)(apiRef, _events.GridEvents.visibleRowsSet, updateGridDimensionsRef);
197
+ (0, _useGridApiEventHandler.useGridApiOptionHandler)(apiRef, _events.GridEvents.sortedRowsSet, updateGridDimensionsRef);
197
198
  (0, _useGridApiEventHandler.useGridApiOptionHandler)(apiRef, _events.GridEvents.pageChange, updateGridDimensionsRef);
198
199
  (0, _useGridApiEventHandler.useGridApiOptionHandler)(apiRef, _events.GridEvents.pageSizeChange, updateGridDimensionsRef);
199
200
  (0, _useGridApiEventHandler.useGridApiOptionHandler)(apiRef, _events.GridEvents.columnsChange, updateGridDimensionsRef);
@@ -23,15 +23,20 @@ var _gridEditRowsSelector = require("./gridEditRowsSelector");
23
23
 
24
24
  var _keyboardUtils = require("../../../utils/keyboardUtils");
25
25
 
26
+ var _warning = require("../../../utils/warning");
27
+
26
28
  var _gridEditCellParams = require("../../../models/params/gridEditCellParams");
27
29
 
28
30
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
29
31
 
30
32
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
31
33
 
34
+ const missingOnProcessRowUpdateErrorWarning = (0, _warning.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');
35
+
32
36
  const useGridCellEditing = (apiRef, props) => {
33
37
  const {
34
- processRowUpdate
38
+ processRowUpdate,
39
+ onProcessRowUpdateError
35
40
  } = props;
36
41
 
37
42
  const runIfEditModeIsCell = callback => (...args) => {
@@ -238,10 +243,7 @@ const useGridCellEditing = (apiRef, props) => {
238
243
  }
239
244
 
240
245
  const editingState = (0, _gridEditRowsSelector.gridEditRowsStateSelector)(apiRef.current.state);
241
- const row = apiRef.current.getRow(id);
242
- const column = apiRef.current.getColumn(field);
243
246
  const {
244
- value,
245
247
  error,
246
248
  isProcessingProps
247
249
  } = editingState[id][field];
@@ -250,25 +252,33 @@ const useGridCellEditing = (apiRef, props) => {
250
252
  return;
251
253
  }
252
254
 
253
- const rowUpdate = column.valueSetter ? column.valueSetter({
254
- value,
255
- row
256
- }) : (0, _extends2.default)({}, row, {
257
- [field]: value
258
- });
255
+ const rowUpdate = apiRef.current.unstable_getRowWithUpdatedValuesFromCellEditing(id, field);
259
256
 
260
257
  if (processRowUpdate) {
261
- Promise.resolve(processRowUpdate(rowUpdate, row)).then(finalRowUpdate => {
262
- apiRef.current.updateRows([finalRowUpdate]);
263
- updateFocusedCellIfNeeded();
264
- updateOrDeleteFieldState(id, field, null);
265
- });
258
+ const handleError = errorThrown => {
259
+ if (onProcessRowUpdateError) {
260
+ onProcessRowUpdateError(errorThrown);
261
+ } else {
262
+ missingOnProcessRowUpdateErrorWarning();
263
+ }
264
+ };
265
+
266
+ try {
267
+ const row = apiRef.current.getRow(id);
268
+ Promise.resolve(processRowUpdate(rowUpdate, row)).then(finalRowUpdate => {
269
+ apiRef.current.updateRows([finalRowUpdate]);
270
+ updateFocusedCellIfNeeded();
271
+ updateOrDeleteFieldState(id, field, null);
272
+ }).catch(handleError);
273
+ } catch (errorThrown) {
274
+ handleError(errorThrown);
275
+ }
266
276
  } else {
267
277
  apiRef.current.updateRows([rowUpdate]);
268
278
  updateFocusedCellIfNeeded();
269
279
  updateOrDeleteFieldState(id, field, null);
270
280
  }
271
- }, [apiRef, processRowUpdate, throwIfNotInMode, updateOrDeleteFieldState]);
281
+ }, [apiRef, onProcessRowUpdateError, processRowUpdate, throwIfNotInMode, updateOrDeleteFieldState]);
272
282
  const setCellEditingEditCellValue = React.useCallback(async params => {
273
283
  const {
274
284
  id,
@@ -322,11 +332,26 @@ const useGridCellEditing = (apiRef, props) => {
322
332
  editingState = (0, _gridEditRowsSelector.gridEditRowsStateSelector)(apiRef.current.state);
323
333
  return !editingState[id][field].error;
324
334
  }, [apiRef, throwIfNotEditable, throwIfNotInMode, updateOrDeleteFieldState]);
335
+ const getRowWithUpdatedValuesFromCellEditing = React.useCallback((id, field) => {
336
+ const column = apiRef.current.getColumn(field);
337
+ const editingState = (0, _gridEditRowsSelector.gridEditRowsStateSelector)(apiRef.current.state);
338
+ const {
339
+ value
340
+ } = editingState[id][field];
341
+ const row = apiRef.current.getRow(id);
342
+ return column.valueSetter ? column.valueSetter({
343
+ value,
344
+ row
345
+ }) : (0, _extends2.default)({}, row, {
346
+ [field]: value
347
+ });
348
+ }, [apiRef]);
325
349
  const editingApi = {
326
350
  getCellMode,
327
351
  startCellEditMode,
328
352
  stopCellEditMode,
329
- unstable_setCellEditingEditCellValue: setCellEditingEditCellValue
353
+ unstable_setCellEditingEditCellValue: setCellEditingEditCellValue,
354
+ unstable_getRowWithUpdatedValuesFromCellEditing: getRowWithUpdatedValuesFromCellEditing
330
355
  };
331
356
  (0, _useGridApiMethod.useGridApiMethod)(apiRef, editingApi, 'EditingApi');
332
357
  };
@@ -121,7 +121,7 @@ const useGridEditing = (apiRef, props) => {
121
121
  } = params;
122
122
  return new Promise(resolve => {
123
123
  maybeDebounce(id, field, debounceMs, async () => {
124
- const setEditCellValueToCall = props.editMode === 'row' ? apiRef.current.unstable_setRowEditingEditCellValue : apiRef.current.unstable_setCellEditingEditCellValue; // Check if the cell is in edit mode
124
+ const setEditCellValueToCall = props.editMode === _gridEditRowModel.GridEditModes.Row ? apiRef.current.unstable_setRowEditingEditCellValue : apiRef.current.unstable_setCellEditingEditCellValue; // Check if the cell is in edit mode
125
125
  // By the time this callback runs the user may have cancelled the editing
126
126
 
127
127
  if (apiRef.current.getCellMode(id, field) === _gridEditRowModel.GridCellModes.Edit) {
@@ -131,10 +131,14 @@ const useGridEditing = (apiRef, props) => {
131
131
  });
132
132
  });
133
133
  }, [apiRef, props.editMode]);
134
+ const getRowWithUpdatedValues = React.useCallback((id, field) => {
135
+ return props.editMode === _gridEditRowModel.GridEditModes.Cell ? apiRef.current.unstable_getRowWithUpdatedValuesFromCellEditing(id, field) : apiRef.current.unstable_getRowWithUpdatedValuesFromRowEditing(id);
136
+ }, [apiRef, props.editMode]);
134
137
  const editingSharedApi = {
135
138
  isCellEditable,
136
139
  setEditCellValue,
137
- unstable_runPendingEditCellValueMutation: runPendingEditCellValueMutation
140
+ unstable_runPendingEditCellValueMutation: runPendingEditCellValueMutation,
141
+ unstable_getRowWithUpdatedValues: getRowWithUpdatedValues
138
142
  };
139
143
  (0, _useGridApiMethod.useGridApiMethod)(apiRef, editingSharedApi, 'EditingApi');
140
144
  };
@@ -29,17 +29,22 @@ var _keyboardUtils = require("../../../utils/keyboardUtils");
29
29
 
30
30
  var _gridColumnsSelector = require("../columns/gridColumnsSelector");
31
31
 
32
+ var _warning = require("../../../utils/warning");
33
+
32
34
  var _gridRowParams = require("../../../models/params/gridRowParams");
33
35
 
34
36
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
35
37
 
36
38
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
37
39
 
40
+ const missingOnProcessRowUpdateErrorWarning = (0, _warning.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');
41
+
38
42
  const useGridRowEditing = (apiRef, props) => {
39
43
  const focusTimeout = React.useRef(null);
40
44
  const nextFocusedCell = React.useRef(null);
41
45
  const {
42
- processRowUpdate
46
+ processRowUpdate,
47
+ onProcessRowUpdateError
43
48
  } = props;
44
49
 
45
50
  const runIfEditModeIsRow = callback => (...args) => {
@@ -350,32 +355,32 @@ const useGridRowEditing = (apiRef, props) => {
350
355
  return;
351
356
  }
352
357
 
353
- let rowUpdate = (0, _extends2.default)({}, row);
354
- Object.entries(editingState[id]).forEach(([field, fieldProps]) => {
355
- const column = apiRef.current.getColumn(field);
356
-
357
- if (column.valueSetter) {
358
- rowUpdate = column.valueSetter({
359
- value: fieldProps.value,
360
- row: rowUpdate
361
- });
362
- } else {
363
- rowUpdate[field] = fieldProps.value;
364
- }
365
- });
358
+ const rowUpdate = apiRef.current.unstable_getRowWithUpdatedValuesFromRowEditing(id);
366
359
 
367
360
  if (processRowUpdate) {
368
- Promise.resolve(processRowUpdate(rowUpdate, row)).then(finalRowUpdate => {
369
- apiRef.current.updateRows([finalRowUpdate]);
370
- updateFocusedCellIfNeeded();
371
- updateOrDeleteRowState(id, null);
372
- });
361
+ const handleError = errorThrown => {
362
+ if (onProcessRowUpdateError) {
363
+ onProcessRowUpdateError(errorThrown);
364
+ } else {
365
+ missingOnProcessRowUpdateErrorWarning();
366
+ }
367
+ };
368
+
369
+ try {
370
+ Promise.resolve(processRowUpdate(rowUpdate, row)).then(finalRowUpdate => {
371
+ apiRef.current.updateRows([finalRowUpdate]);
372
+ updateFocusedCellIfNeeded();
373
+ updateOrDeleteRowState(id, null);
374
+ }).catch(handleError);
375
+ } catch (errorThrown) {
376
+ handleError(errorThrown);
377
+ }
373
378
  } else {
374
379
  apiRef.current.updateRows([rowUpdate]);
375
380
  updateFocusedCellIfNeeded();
376
381
  updateOrDeleteRowState(id, null);
377
382
  }
378
- }, [apiRef, processRowUpdate, throwIfNotInMode, updateOrDeleteRowState]);
383
+ }, [apiRef, onProcessRowUpdateError, processRowUpdate, throwIfNotInMode, updateOrDeleteRowState]);
379
384
  const setRowEditingEditCellValue = React.useCallback(params => {
380
385
  const {
381
386
  id,
@@ -487,11 +492,30 @@ const useGridRowEditing = (apiRef, props) => {
487
492
  });
488
493
  });
489
494
  }, [apiRef, throwIfNotEditable, updateOrDeleteFieldState]);
495
+ const getRowWithUpdatedValuesFromRowEditing = React.useCallback(id => {
496
+ const editingState = (0, _gridEditRowsSelector.gridEditRowsStateSelector)(apiRef.current.state);
497
+ const row = apiRef.current.getRow(id);
498
+ let rowUpdate = (0, _extends2.default)({}, row);
499
+ Object.entries(editingState[id]).forEach(([field, fieldProps]) => {
500
+ const column = apiRef.current.getColumn(field);
501
+
502
+ if (column.valueSetter) {
503
+ rowUpdate = column.valueSetter({
504
+ value: fieldProps.value,
505
+ row: rowUpdate
506
+ });
507
+ } else {
508
+ rowUpdate[field] = fieldProps.value;
509
+ }
510
+ });
511
+ return rowUpdate;
512
+ }, [apiRef]);
490
513
  const editingApi = {
491
514
  getRowMode,
492
515
  startRowEditMode,
493
516
  stopRowEditMode,
494
- unstable_setRowEditingEditCellValue: setRowEditingEditCellValue
517
+ unstable_setRowEditingEditCellValue: setRowEditingEditCellValue,
518
+ unstable_getRowWithUpdatedValuesFromRowEditing: getRowWithUpdatedValuesFromRowEditing
495
519
  };
496
520
  (0, _useGridApiMethod.useGridApiMethod)(apiRef, editingApi, 'EditingApi');
497
521
  };
@@ -25,6 +25,8 @@ function useGridEvents(apiRef, props) {
25
25
  (0, _useGridApiEventHandler.useGridApiOptionHandler)(apiRef, _events.GridEvents.cellDoubleClick, props.onCellDoubleClick);
26
26
  (0, _useGridApiEventHandler.useGridApiOptionHandler)(apiRef, _events.GridEvents.cellKeyDown, props.onCellKeyDown);
27
27
  (0, _useGridApiEventHandler.useGridApiOptionHandler)(apiRef, _events.GridEvents.cellFocusOut, props.onCellFocusOut);
28
+ (0, _useGridApiEventHandler.useGridApiOptionHandler)(apiRef, _events.GridEvents.preferencePanelClose, props.onPreferencePanelClose);
29
+ (0, _useGridApiEventHandler.useGridApiOptionHandler)(apiRef, _events.GridEvents.preferencePanelOpen, props.onPreferencePanelOpen);
28
30
  (0, _useGridApiEventHandler.useGridApiOptionHandler)(apiRef, _events.GridEvents.rowDoubleClick, props.onRowDoubleClick);
29
31
  (0, _useGridApiEventHandler.useGridApiOptionHandler)(apiRef, _events.GridEvents.rowClick, props.onRowClick);
30
32
  (0, _useGridApiEventHandler.useGridApiOptionHandler)(apiRef, _events.GridEvents.componentError, props.onError);
@@ -33,7 +33,7 @@ var _useFirstRender = require("../../utils/useFirstRender");
33
33
 
34
34
  var _rows = require("../rows");
35
35
 
36
- var _preProcessing = require("../../core/preProcessing");
36
+ var _pipeProcessing = require("../../core/pipeProcessing");
37
37
 
38
38
  var _strategyProcessing = require("../../core/strategyProcessing");
39
39
 
@@ -77,11 +77,7 @@ const useGridFilter = (apiRef, props) => {
77
77
  stateSelector: _gridFilterSelector.gridFilterModelSelector,
78
78
  changeEvent: _events.GridEvents.filterModelChange
79
79
  });
80
- /**
81
- * API METHODS
82
- */
83
-
84
- const applyFilters = React.useCallback(() => {
80
+ const updateFilteredRows = React.useCallback(() => {
85
81
  apiRef.current.setState(state => {
86
82
  const filterModel = (0, _gridFilterSelector.gridFilterModelSelector)(state, apiRef.current.instanceId);
87
83
  const isRowMatchingFilters = props.filterMode === _gridFeatureMode.GridFeatureModeConstant.client ? (0, _gridFilterUtils.buildAggregatedFilterApplier)(filterModel, apiRef) : null;
@@ -92,9 +88,16 @@ const useGridFilter = (apiRef, props) => {
92
88
  filter: (0, _extends2.default)({}, state.filter, filteringResult)
93
89
  });
94
90
  });
95
- apiRef.current.publishEvent(_events.GridEvents.visibleRowsSet);
91
+ apiRef.current.publishEvent(_events.GridEvents.filteredRowsSet);
92
+ }, [props.filterMode, apiRef]);
93
+ /**
94
+ * API METHODS
95
+ */
96
+
97
+ const applyFilters = React.useCallback(() => {
98
+ updateFilteredRows();
96
99
  apiRef.current.forceUpdate();
97
- }, [apiRef, props.filterMode]);
100
+ }, [apiRef, updateFilteredRows]);
98
101
  const upsertFilterItem = React.useCallback(item => {
99
102
  const filterModel = (0, _gridFilterSelector.gridFilterModelSelector)(apiRef);
100
103
  const items = [...filterModel.items];
@@ -254,9 +257,9 @@ const useGridFilter = (apiRef, props) => {
254
257
  filteredDescendantCountLookup: {}
255
258
  };
256
259
  }, [apiRef, props.filterMode]);
257
- (0, _preProcessing.useGridRegisterPreProcessor)(apiRef, 'exportState', stateExportPreProcessing);
258
- (0, _preProcessing.useGridRegisterPreProcessor)(apiRef, 'restoreState', stateRestorePreProcessing);
259
- (0, _preProcessing.useGridRegisterPreProcessor)(apiRef, 'preferencePanel', preferencePanelPreProcessing);
260
+ (0, _pipeProcessing.useGridRegisterPipeProcessor)(apiRef, 'exportState', stateExportPreProcessing);
261
+ (0, _pipeProcessing.useGridRegisterPipeProcessor)(apiRef, 'restoreState', stateRestorePreProcessing);
262
+ (0, _pipeProcessing.useGridRegisterPipeProcessor)(apiRef, 'preferencePanel', preferencePanelPreProcessing);
260
263
  (0, _strategyProcessing.useGridRegisterStrategyProcessor)(apiRef, _strategyProcessing.GRID_DEFAULT_STRATEGY, 'filtering', flatFilteringMethod);
261
264
  /**
262
265
  * EVENTS
@@ -278,8 +281,10 @@ const useGridFilter = (apiRef, props) => {
278
281
  if (methodName === 'filtering') {
279
282
  apiRef.current.unstable_applyFilters();
280
283
  }
281
- }, [apiRef]);
282
- (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, _events.GridEvents.rowsSet, apiRef.current.unstable_applyFilters);
284
+ }, [apiRef]); // Do not call `apiRef.current.forceUpdate` to avoid re-render before updating the sorted rows.
285
+ // Otherwise, the state is not consistent during the render
286
+
287
+ (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, _events.GridEvents.rowsSet, updateFilteredRows);
283
288
  (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, _events.GridEvents.rowExpansionChange, apiRef.current.unstable_applyFilters);
284
289
  (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, _events.GridEvents.columnsChange, handleColumnsChange);
285
290
  (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, _events.GridEvents.activeStrategyProcessorChange, handleStrategyProcessorChange);
@@ -130,21 +130,31 @@ const useGridFocus = (apiRef, props) => {
130
130
  rowIndexToFocus += 1;
131
131
  }
132
132
 
133
+ const currentPage = (0, _useGridVisibleRows.getVisibleRows)(apiRef, {
134
+ pagination: props.pagination,
135
+ paginationMode: props.paginationMode
136
+ });
137
+
133
138
  if (columnIndexToFocus >= visibleColumns.length) {
134
- // Go to next row if we are at the last column
139
+ // Go to next row if we are after the last column
135
140
  rowIndexToFocus += 1;
136
- columnIndexToFocus = 0;
141
+
142
+ if (rowIndexToFocus < currentPage.rows.length) {
143
+ // Go to first column of the next row if there's one more row
144
+ columnIndexToFocus = 0;
145
+ }
137
146
  } else if (columnIndexToFocus < 0) {
138
- // Go to previous row if we are at the first column
147
+ // Go to previous row if we are before the first column
139
148
  rowIndexToFocus -= 1;
140
- columnIndexToFocus = visibleColumns.length - 1;
149
+
150
+ if (rowIndexToFocus >= 0) {
151
+ // Go to last column of the previous if there's one more row
152
+ columnIndexToFocus = visibleColumns.length - 1;
153
+ }
141
154
  }
142
155
 
143
- const currentPage = (0, _useGridVisibleRows.getVisibleRows)(apiRef, {
144
- pagination: props.pagination,
145
- paginationMode: props.paginationMode
146
- });
147
- rowIndexToFocus = (0, _utils2.clamp)(rowIndexToFocus, currentPage.range.firstRowIndex, currentPage.range.lastRowIndex);
156
+ rowIndexToFocus = (0, _utils2.clamp)(rowIndexToFocus, 0, currentPage.rows.length - 1);
157
+ columnIndexToFocus = (0, _utils2.clamp)(columnIndexToFocus, 0, visibleColumns.length - 1);
148
158
  const rowToFocus = currentPage.rows[rowIndexToFocus];
149
159
  const columnToFocus = visibleColumns[columnIndexToFocus];
150
160
  apiRef.current.setCellFocus(rowToFocus.id, columnToFocus.field);