@mui/x-data-grid 5.10.0 → 5.12.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 (573) hide show
  1. package/CHANGELOG.md +325 -10
  2. package/DataGrid/DataGrid.js +61 -2
  3. package/DataGrid/useDataGridProps.js +2 -1
  4. package/README.md +4 -5
  5. package/colDef/gridActionsColDef.js +2 -1
  6. package/colDef/gridBooleanColDef.js +2 -1
  7. package/colDef/gridCheckboxSelectionColDef.js +1 -0
  8. package/colDef/gridDateColDef.js +4 -2
  9. package/colDef/gridNumericColDef.js +3 -2
  10. package/colDef/gridNumericOperators.d.ts +2 -0
  11. package/colDef/gridNumericOperators.js +11 -0
  12. package/colDef/gridSingleSelectColDef.js +3 -2
  13. package/colDef/gridSingleSelectOperators.d.ts +3 -0
  14. package/colDef/gridSingleSelectOperators.js +52 -0
  15. package/colDef/gridStringColDef.js +3 -2
  16. package/colDef/gridStringOperators.d.ts +2 -0
  17. package/colDef/gridStringOperators.js +12 -0
  18. package/components/GridFooter.d.ts +4 -2
  19. package/components/GridFooter.js +11 -2
  20. package/components/GridRow.d.ts +1 -1
  21. package/components/GridRow.js +55 -17
  22. package/components/GridRowCount.d.ts +4 -1
  23. package/components/GridRowCount.js +1 -0
  24. package/components/GridScrollArea.js +3 -4
  25. package/components/GridSelectedRowCount.d.ts +4 -1
  26. package/components/GridSelectedRowCount.js +2 -1
  27. package/components/base/GridBody.js +1 -2
  28. package/components/base/GridOverlays.js +2 -3
  29. package/components/cell/GridActionsCell.js +13 -4
  30. package/components/cell/GridActionsCellItem.d.ts +1 -1
  31. package/components/cell/GridCell.d.ts +2 -1
  32. package/components/cell/GridCell.js +17 -12
  33. package/components/cell/GridEditBooleanCell.d.ts +15 -3
  34. package/components/cell/GridEditBooleanCell.js +101 -6
  35. package/components/cell/GridEditDateCell.d.ts +16 -4
  36. package/components/cell/GridEditDateCell.js +99 -5
  37. package/components/cell/GridEditInputCell.d.ts +11 -5
  38. package/components/cell/GridEditInputCell.js +29 -5
  39. package/components/cell/GridEditSingleSelectCell.d.ts +12 -4
  40. package/components/cell/GridEditSingleSelectCell.js +28 -5
  41. package/components/cell/index.d.ts +2 -0
  42. package/components/cell/index.js +2 -0
  43. package/components/columnHeaders/GridColumnHeaderItem.js +19 -19
  44. package/components/columnHeaders/GridColumnHeaders.d.ts +2 -0
  45. package/components/columnHeaders/GridColumnHeadersInner.d.ts +2 -0
  46. package/components/columnSelection/GridCellCheckboxRenderer.js +2 -3
  47. package/components/columnSelection/GridHeaderCheckbox.js +4 -5
  48. package/components/containers/GridFooterContainer.d.ts +8 -2
  49. package/components/containers/GridFooterContainer.js +11 -2
  50. package/components/containers/GridRoot.js +25 -5
  51. package/components/containers/GridRootStyles.js +4 -2
  52. package/components/containers/GridToolbarContainer.d.ts +8 -2
  53. package/components/containers/GridToolbarContainer.js +12 -2
  54. package/components/menu/GridMenu.js +9 -2
  55. package/components/panel/GridColumnsPanel.js +10 -2
  56. package/components/panel/GridPanelContent.d.ts +8 -1
  57. package/components/panel/GridPanelContent.js +13 -2
  58. package/components/panel/GridPanelFooter.d.ts +8 -1
  59. package/components/panel/GridPanelFooter.js +13 -2
  60. package/components/panel/GridPanelHeader.d.ts +8 -1
  61. package/components/panel/GridPanelHeader.js +13 -2
  62. package/components/panel/GridPanelWrapper.d.ts +1 -1
  63. package/components/panel/GridPanelWrapper.js +3 -3
  64. package/components/panel/filterPanel/GridFilterForm.d.ts +61 -4
  65. package/components/panel/filterPanel/GridFilterForm.js +88 -8
  66. package/components/panel/filterPanel/GridFilterInputMultipleSingleSelect.js +0 -1
  67. package/components/panel/filterPanel/GridFilterPanel.d.ts +8 -5
  68. package/components/panel/filterPanel/GridFilterPanel.js +24 -6
  69. package/components/toolbar/GridToolbar.d.ts +12 -2
  70. package/components/toolbar/GridToolbar.js +30 -7
  71. package/components/toolbar/GridToolbarExport.d.ts +5 -4
  72. package/components/toolbar/GridToolbarExport.js +15 -20
  73. package/components/toolbar/GridToolbarFilterButton.d.ts +1 -1
  74. package/components/toolbar/GridToolbarQuickFilter.d.ts +20 -0
  75. package/components/toolbar/GridToolbarQuickFilter.js +87 -0
  76. package/components/toolbar/index.d.ts +3 -1
  77. package/components/toolbar/index.js +3 -2
  78. package/components/virtualization/GridVirtualScroller.d.ts +4 -1
  79. package/components/virtualization/GridVirtualScrollerContent.d.ts +4 -1
  80. package/components/virtualization/GridVirtualScrollerRenderZone.d.ts +4 -1
  81. package/constants/defaultGridSlotsComponents.js +3 -2
  82. package/constants/gridClasses.d.ts +16 -0
  83. package/constants/gridClasses.js +1 -1
  84. package/constants/localeTextConstants.js +5 -0
  85. package/hooks/core/pipeProcessing/gridPipeProcessingApi.d.ts +11 -0
  86. package/hooks/core/pipeProcessing/useGridPipeProcessing.js +10 -9
  87. package/hooks/core/strategyProcessing/useGridStrategyProcessing.d.ts +4 -4
  88. package/hooks/core/strategyProcessing/useGridStrategyProcessing.js +6 -7
  89. package/hooks/core/useGridApiInitialization.js +3 -3
  90. package/hooks/core/useGridErrorHandler.js +1 -2
  91. package/hooks/core/useGridStateInitialization.js +1 -2
  92. package/hooks/features/columnHeaders/useGridColumnHeaders.js +5 -6
  93. package/hooks/features/columnMenu/useGridColumnMenu.js +3 -4
  94. package/hooks/features/columns/gridColumnsInterfaces.d.ts +3 -0
  95. package/hooks/features/columns/useGridColumnSpanning.js +1 -2
  96. package/hooks/features/columns/useGridColumns.js +20 -23
  97. package/hooks/features/dimensions/useGridDimensions.d.ts +1 -1
  98. package/hooks/features/dimensions/useGridDimensions.js +8 -9
  99. package/hooks/features/editRows/useGridCellEditing.new.d.ts +1 -1
  100. package/hooks/features/editRows/useGridCellEditing.new.js +140 -32
  101. package/hooks/features/editRows/useGridCellEditing.old.js +20 -21
  102. package/hooks/features/editRows/useGridEditing.old.js +4 -5
  103. package/hooks/features/editRows/useGridRowEditing.new.d.ts +1 -1
  104. package/hooks/features/editRows/useGridRowEditing.new.js +128 -42
  105. package/hooks/features/editRows/useGridRowEditing.old.js +21 -22
  106. package/hooks/features/events/useGridEvents.d.ts +1 -1
  107. package/hooks/features/events/useGridEvents.js +19 -18
  108. package/hooks/features/export/serializers/csvSerializer.js +5 -5
  109. package/hooks/features/export/useGridCsvExport.js +23 -16
  110. package/hooks/features/export/useGridPrintExport.js +22 -0
  111. package/hooks/features/export/utils.d.ts +3 -1
  112. package/hooks/features/export/utils.js +13 -0
  113. package/hooks/features/filter/gridFilterState.d.ts +1 -2
  114. package/hooks/features/filter/gridFilterState.js +3 -1
  115. package/hooks/features/filter/gridFilterUtils.d.ts +17 -1
  116. package/hooks/features/filter/gridFilterUtils.js +85 -4
  117. package/hooks/features/filter/useGridFilter.js +25 -13
  118. package/hooks/features/focus/useGridFocus.d.ts +1 -1
  119. package/hooks/features/focus/useGridFocus.js +29 -33
  120. package/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +4 -5
  121. package/hooks/features/pagination/useGridPage.js +3 -4
  122. package/hooks/features/pagination/useGridPageSize.js +2 -3
  123. package/hooks/features/preferencesPanel/useGridPreferencesPanel.js +4 -6
  124. package/hooks/features/rows/gridRowsSelector.d.ts +1 -0
  125. package/hooks/features/rows/gridRowsSelector.js +1 -0
  126. package/hooks/features/rows/gridRowsState.d.ts +16 -11
  127. package/hooks/features/rows/gridRowsUtils.d.ts +14 -1
  128. package/hooks/features/rows/gridRowsUtils.js +79 -1
  129. package/hooks/features/rows/useGridRows.js +130 -129
  130. package/hooks/features/rows/useGridRowsMeta.d.ts +1 -1
  131. package/hooks/features/rows/useGridRowsMeta.js +107 -43
  132. package/hooks/features/rows/useGridRowsPreProcessors.js +2 -0
  133. package/hooks/features/scroll/useGridScroll.js +6 -1
  134. package/hooks/features/selection/useGridSelection.d.ts +1 -1
  135. package/hooks/features/selection/useGridSelection.js +13 -10
  136. package/hooks/features/sorting/useGridSorting.js +8 -9
  137. package/hooks/features/virtualization/useGridVirtualScroller.d.ts +1 -0
  138. package/hooks/features/virtualization/useGridVirtualScroller.js +33 -14
  139. package/hooks/utils/useGridApiEventHandler.d.ts +4 -1
  140. package/hooks/utils/useGridApiEventHandler.js +22 -9
  141. package/hooks/utils/useGridNativeEventListener.js +1 -2
  142. package/hooks/utils/useGridSelector.js +1 -1
  143. package/index.d.ts +2 -0
  144. package/index.js +1 -1
  145. package/internals/index.d.ts +5 -1
  146. package/internals/index.js +5 -2
  147. package/legacy/DataGrid/DataGrid.js +61 -2
  148. package/legacy/DataGrid/useDataGridProps.js +2 -1
  149. package/legacy/colDef/gridActionsColDef.js +2 -1
  150. package/legacy/colDef/gridBooleanColDef.js +2 -1
  151. package/legacy/colDef/gridCheckboxSelectionColDef.js +1 -0
  152. package/legacy/colDef/gridDateColDef.js +4 -2
  153. package/legacy/colDef/gridNumericColDef.js +3 -2
  154. package/legacy/colDef/gridNumericOperators.js +28 -18
  155. package/legacy/colDef/gridSingleSelectColDef.js +3 -2
  156. package/legacy/colDef/gridSingleSelectOperators.js +55 -6
  157. package/legacy/colDef/gridStringColDef.js +3 -2
  158. package/legacy/colDef/gridStringOperators.js +25 -14
  159. package/legacy/components/GridFooter.js +11 -2
  160. package/legacy/components/GridRow.js +60 -17
  161. package/legacy/components/GridRowCount.js +1 -0
  162. package/legacy/components/GridScrollArea.js +3 -4
  163. package/legacy/components/GridSelectedRowCount.js +2 -1
  164. package/legacy/components/base/GridBody.js +1 -2
  165. package/legacy/components/base/GridOverlays.js +2 -3
  166. package/legacy/components/cell/GridActionsCell.js +13 -4
  167. package/legacy/components/cell/GridCell.js +17 -12
  168. package/legacy/components/cell/GridEditBooleanCell.js +132 -11
  169. package/legacy/components/cell/GridEditDateCell.js +148 -42
  170. package/legacy/components/cell/GridEditInputCell.js +61 -12
  171. package/legacy/components/cell/GridEditSingleSelectCell.js +41 -13
  172. package/legacy/components/cell/index.js +2 -0
  173. package/legacy/components/columnHeaders/GridColumnHeaderItem.js +21 -19
  174. package/legacy/components/columnSelection/GridCellCheckboxRenderer.js +2 -3
  175. package/legacy/components/columnSelection/GridHeaderCheckbox.js +4 -5
  176. package/legacy/components/containers/GridFooterContainer.js +11 -2
  177. package/legacy/components/containers/GridRoot.js +23 -5
  178. package/legacy/components/containers/GridRootStyles.js +3 -2
  179. package/legacy/components/containers/GridToolbarContainer.js +12 -2
  180. package/legacy/components/menu/GridMenu.js +9 -2
  181. package/legacy/components/panel/GridColumnsPanel.js +12 -2
  182. package/legacy/components/panel/GridPanelContent.js +13 -2
  183. package/legacy/components/panel/GridPanelFooter.js +13 -2
  184. package/legacy/components/panel/GridPanelHeader.js +13 -2
  185. package/legacy/components/panel/GridPanelWrapper.js +3 -3
  186. package/legacy/components/panel/filterPanel/GridFilterForm.js +89 -8
  187. package/legacy/components/panel/filterPanel/GridFilterInputMultipleSingleSelect.js +0 -1
  188. package/legacy/components/panel/filterPanel/GridFilterPanel.js +25 -6
  189. package/legacy/components/toolbar/GridToolbar.js +31 -6
  190. package/legacy/components/toolbar/GridToolbarExport.js +18 -19
  191. package/legacy/components/toolbar/GridToolbarQuickFilter.js +102 -0
  192. package/legacy/components/toolbar/index.js +3 -2
  193. package/legacy/constants/defaultGridSlotsComponents.js +3 -2
  194. package/legacy/constants/gridClasses.js +1 -1
  195. package/legacy/constants/localeTextConstants.js +5 -0
  196. package/legacy/hooks/core/pipeProcessing/useGridPipeProcessing.js +10 -10
  197. package/legacy/hooks/core/strategyProcessing/useGridStrategyProcessing.js +6 -7
  198. package/legacy/hooks/core/useGridApiInitialization.js +3 -3
  199. package/legacy/hooks/core/useGridErrorHandler.js +1 -2
  200. package/legacy/hooks/core/useGridStateInitialization.js +1 -2
  201. package/legacy/hooks/features/columnHeaders/useGridColumnHeaders.js +5 -6
  202. package/legacy/hooks/features/columnMenu/useGridColumnMenu.js +3 -4
  203. package/legacy/hooks/features/columns/useGridColumnSpanning.js +1 -2
  204. package/legacy/hooks/features/columns/useGridColumns.js +20 -23
  205. package/legacy/hooks/features/dimensions/useGridDimensions.js +8 -9
  206. package/legacy/hooks/features/editRows/useGridCellEditing.new.js +220 -83
  207. package/legacy/hooks/features/editRows/useGridCellEditing.old.js +20 -21
  208. package/legacy/hooks/features/editRows/useGridEditing.old.js +4 -5
  209. package/legacy/hooks/features/editRows/useGridRowEditing.new.js +132 -42
  210. package/legacy/hooks/features/editRows/useGridRowEditing.old.js +20 -21
  211. package/legacy/hooks/features/events/useGridEvents.js +19 -18
  212. package/legacy/hooks/features/export/serializers/csvSerializer.js +5 -5
  213. package/legacy/hooks/features/export/useGridCsvExport.js +24 -17
  214. package/legacy/hooks/features/export/useGridPrintExport.js +22 -0
  215. package/legacy/hooks/features/export/utils.js +14 -0
  216. package/legacy/hooks/features/filter/gridFilterState.js +3 -1
  217. package/legacy/hooks/features/filter/gridFilterUtils.js +97 -4
  218. package/legacy/hooks/features/filter/useGridFilter.js +25 -13
  219. package/legacy/hooks/features/focus/useGridFocus.js +31 -35
  220. package/legacy/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +4 -5
  221. package/legacy/hooks/features/pagination/useGridPage.js +3 -4
  222. package/legacy/hooks/features/pagination/useGridPageSize.js +2 -3
  223. package/legacy/hooks/features/preferencesPanel/useGridPreferencesPanel.js +4 -6
  224. package/legacy/hooks/features/rows/gridRowsSelector.js +3 -0
  225. package/legacy/hooks/features/rows/gridRowsUtils.js +82 -1
  226. package/legacy/hooks/features/rows/useGridRows.js +140 -132
  227. package/legacy/hooks/features/rows/useGridRowsMeta.js +104 -41
  228. package/legacy/hooks/features/rows/useGridRowsPreProcessors.js +2 -0
  229. package/legacy/hooks/features/scroll/useGridScroll.js +6 -1
  230. package/legacy/hooks/features/selection/useGridSelection.js +13 -10
  231. package/legacy/hooks/features/sorting/useGridSorting.js +8 -9
  232. package/legacy/hooks/features/virtualization/useGridVirtualScroller.js +52 -29
  233. package/legacy/hooks/utils/useGridApiEventHandler.js +20 -9
  234. package/legacy/hooks/utils/useGridNativeEventListener.js +1 -2
  235. package/legacy/hooks/utils/useGridSelector.js +1 -1
  236. package/legacy/index.js +1 -1
  237. package/legacy/internals/index.js +5 -2
  238. package/legacy/locales/arSD.js +5 -0
  239. package/legacy/locales/bgBG.js +5 -0
  240. package/legacy/locales/csCZ.js +5 -0
  241. package/legacy/locales/daDK.js +5 -0
  242. package/legacy/locales/deDE.js +10 -5
  243. package/legacy/locales/elGR.js +5 -0
  244. package/legacy/locales/esES.js +5 -0
  245. package/legacy/locales/faIR.js +5 -0
  246. package/legacy/locales/fiFI.js +5 -0
  247. package/legacy/locales/frFR.js +5 -0
  248. package/legacy/locales/heIL.js +10 -5
  249. package/legacy/locales/huHU.js +5 -0
  250. package/legacy/locales/itIT.js +5 -0
  251. package/legacy/locales/jaJP.js +5 -0
  252. package/legacy/locales/koKR.js +5 -0
  253. package/legacy/locales/nbNO.js +127 -0
  254. package/legacy/locales/nlNL.js +5 -0
  255. package/legacy/locales/plPL.js +5 -0
  256. package/legacy/locales/ptBR.js +5 -0
  257. package/legacy/locales/ruRU.js +5 -0
  258. package/legacy/locales/skSK.js +5 -0
  259. package/legacy/locales/trTR.js +8 -3
  260. package/legacy/locales/ukUA.js +5 -0
  261. package/legacy/locales/viVN.js +5 -0
  262. package/legacy/locales/zhCN.js +5 -0
  263. package/legacy/models/events/gridEvents.js +4 -0
  264. package/legacy/models/gridApiCaches.js +1 -0
  265. package/legacy/models/index.js +4 -3
  266. package/legacy/models/params/gridMenuParams.js +1 -0
  267. package/legacy/models/params/index.js +2 -1
  268. package/legacy/utils/createSelector.js +18 -2
  269. package/legacy/utils/exportAs.js +1 -1
  270. package/locales/arSD.js +5 -0
  271. package/locales/bgBG.js +5 -0
  272. package/locales/csCZ.js +5 -0
  273. package/locales/daDK.js +5 -0
  274. package/locales/deDE.js +10 -5
  275. package/locales/elGR.js +5 -0
  276. package/locales/esES.js +5 -0
  277. package/locales/faIR.js +5 -0
  278. package/locales/fiFI.js +5 -0
  279. package/locales/frFR.js +5 -0
  280. package/locales/heIL.js +10 -5
  281. package/locales/huHU.js +5 -0
  282. package/locales/itIT.js +5 -0
  283. package/locales/jaJP.js +5 -0
  284. package/locales/koKR.js +5 -0
  285. package/locales/nbNO.d.ts +2 -0
  286. package/locales/nbNO.js +115 -0
  287. package/locales/nlNL.js +5 -0
  288. package/locales/plPL.js +5 -0
  289. package/locales/ptBR.js +5 -0
  290. package/locales/ruRU.js +5 -0
  291. package/locales/skSK.js +5 -0
  292. package/locales/trTR.js +8 -3
  293. package/locales/ukUA.js +5 -0
  294. package/locales/viVN.js +5 -0
  295. package/locales/zhCN.js +5 -0
  296. package/models/api/gridCoreApi.d.ts +6 -0
  297. package/models/api/gridEditingApi.d.ts +23 -4
  298. package/models/api/gridFilterApi.d.ts +5 -0
  299. package/models/api/gridFocusApi.d.ts +1 -0
  300. package/models/api/gridLocaleTextApi.d.ts +4 -0
  301. package/models/api/gridRowApi.d.ts +28 -0
  302. package/models/api/gridRowsMetaApi.d.ts +24 -0
  303. package/models/api/index.d.ts +1 -1
  304. package/models/colDef/gridColDef.d.ts +16 -3
  305. package/models/events/gridEventLookup.d.ts +286 -4
  306. package/models/events/gridEvents.d.ts +5 -278
  307. package/models/events/gridEvents.js +4 -0
  308. package/models/gridApiCaches.d.ts +6 -0
  309. package/models/gridApiCaches.js +1 -0
  310. package/models/gridExport.d.ts +29 -2
  311. package/models/gridFilterModel.d.ts +11 -0
  312. package/models/gridFilterOperator.d.ts +1 -1
  313. package/models/gridIconSlotsComponent.d.ts +5 -0
  314. package/models/gridStateCommunity.d.ts +0 -2
  315. package/models/index.d.ts +1 -1
  316. package/models/index.js +4 -3
  317. package/models/params/gridMenuParams.d.ts +7 -0
  318. package/models/params/gridMenuParams.js +1 -0
  319. package/models/params/gridRowParams.d.ts +1 -1
  320. package/models/params/index.d.ts +1 -0
  321. package/models/params/index.js +2 -1
  322. package/models/props/DataGridProps.d.ts +79 -29
  323. package/modern/DataGrid/DataGrid.js +61 -2
  324. package/modern/DataGrid/useDataGridProps.js +2 -1
  325. package/modern/colDef/gridActionsColDef.js +2 -1
  326. package/modern/colDef/gridBooleanColDef.js +2 -1
  327. package/modern/colDef/gridCheckboxSelectionColDef.js +1 -0
  328. package/modern/colDef/gridDateColDef.js +4 -2
  329. package/modern/colDef/gridNumericColDef.js +3 -2
  330. package/modern/colDef/gridNumericOperators.js +11 -0
  331. package/modern/colDef/gridSingleSelectColDef.js +3 -2
  332. package/modern/colDef/gridSingleSelectOperators.js +52 -0
  333. package/modern/colDef/gridStringColDef.js +3 -2
  334. package/modern/colDef/gridStringOperators.js +12 -0
  335. package/modern/components/GridFooter.js +11 -2
  336. package/modern/components/GridRow.js +55 -17
  337. package/modern/components/GridRowCount.js +1 -0
  338. package/modern/components/GridScrollArea.js +3 -4
  339. package/modern/components/GridSelectedRowCount.js +2 -1
  340. package/modern/components/base/GridBody.js +1 -2
  341. package/modern/components/base/GridOverlays.js +2 -3
  342. package/modern/components/cell/GridActionsCell.js +14 -3
  343. package/modern/components/cell/GridCell.js +17 -12
  344. package/modern/components/cell/GridEditBooleanCell.js +101 -6
  345. package/modern/components/cell/GridEditDateCell.js +99 -5
  346. package/modern/components/cell/GridEditInputCell.js +29 -5
  347. package/modern/components/cell/GridEditSingleSelectCell.js +28 -5
  348. package/modern/components/cell/index.js +2 -0
  349. package/modern/components/columnHeaders/GridColumnHeaderItem.js +19 -19
  350. package/modern/components/columnSelection/GridCellCheckboxRenderer.js +2 -3
  351. package/modern/components/columnSelection/GridHeaderCheckbox.js +4 -5
  352. package/modern/components/containers/GridFooterContainer.js +11 -2
  353. package/modern/components/containers/GridRoot.js +25 -3
  354. package/modern/components/containers/GridRootStyles.js +4 -2
  355. package/modern/components/containers/GridToolbarContainer.js +12 -2
  356. package/modern/components/menu/GridMenu.js +9 -2
  357. package/modern/components/panel/GridColumnsPanel.js +10 -2
  358. package/modern/components/panel/GridPanelContent.js +13 -2
  359. package/modern/components/panel/GridPanelFooter.js +13 -2
  360. package/modern/components/panel/GridPanelHeader.js +13 -2
  361. package/modern/components/panel/GridPanelWrapper.js +3 -3
  362. package/modern/components/panel/filterPanel/GridFilterForm.js +88 -8
  363. package/modern/components/panel/filterPanel/GridFilterInputMultipleSingleSelect.js +0 -1
  364. package/modern/components/panel/filterPanel/GridFilterPanel.js +24 -6
  365. package/modern/components/toolbar/GridToolbar.js +30 -7
  366. package/modern/components/toolbar/GridToolbarExport.js +15 -20
  367. package/modern/components/toolbar/GridToolbarQuickFilter.js +85 -0
  368. package/modern/components/toolbar/index.js +3 -2
  369. package/modern/constants/defaultGridSlotsComponents.js +3 -2
  370. package/modern/constants/gridClasses.js +1 -1
  371. package/modern/constants/localeTextConstants.js +5 -0
  372. package/modern/hooks/core/pipeProcessing/useGridPipeProcessing.js +10 -9
  373. package/modern/hooks/core/strategyProcessing/useGridStrategyProcessing.js +6 -7
  374. package/modern/hooks/core/useGridApiInitialization.js +3 -3
  375. package/modern/hooks/core/useGridErrorHandler.js +1 -2
  376. package/modern/hooks/core/useGridStateInitialization.js +1 -2
  377. package/modern/hooks/features/columnHeaders/useGridColumnHeaders.js +5 -6
  378. package/modern/hooks/features/columnMenu/useGridColumnMenu.js +3 -4
  379. package/modern/hooks/features/columns/useGridColumnSpanning.js +1 -2
  380. package/modern/hooks/features/columns/useGridColumns.js +19 -22
  381. package/modern/hooks/features/dimensions/useGridDimensions.js +8 -9
  382. package/modern/hooks/features/editRows/useGridCellEditing.new.js +138 -32
  383. package/modern/hooks/features/editRows/useGridCellEditing.old.js +20 -21
  384. package/modern/hooks/features/editRows/useGridEditing.old.js +4 -5
  385. package/modern/hooks/features/editRows/useGridRowEditing.new.js +126 -42
  386. package/modern/hooks/features/editRows/useGridRowEditing.old.js +21 -22
  387. package/modern/hooks/features/events/useGridEvents.js +19 -18
  388. package/modern/hooks/features/export/serializers/csvSerializer.js +5 -5
  389. package/modern/hooks/features/export/useGridCsvExport.js +21 -16
  390. package/modern/hooks/features/export/useGridPrintExport.js +20 -0
  391. package/modern/hooks/features/export/utils.js +13 -0
  392. package/modern/hooks/features/filter/gridFilterState.js +3 -1
  393. package/modern/hooks/features/filter/gridFilterUtils.js +81 -4
  394. package/modern/hooks/features/filter/useGridFilter.js +25 -13
  395. package/modern/hooks/features/focus/useGridFocus.js +29 -33
  396. package/modern/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +4 -5
  397. package/modern/hooks/features/pagination/useGridPage.js +3 -4
  398. package/modern/hooks/features/pagination/useGridPageSize.js +2 -3
  399. package/modern/hooks/features/preferencesPanel/useGridPreferencesPanel.js +4 -6
  400. package/modern/hooks/features/rows/gridRowsSelector.js +1 -0
  401. package/modern/hooks/features/rows/gridRowsUtils.js +77 -1
  402. package/modern/hooks/features/rows/useGridRows.js +130 -129
  403. package/modern/hooks/features/rows/useGridRowsMeta.js +105 -37
  404. package/modern/hooks/features/rows/useGridRowsPreProcessors.js +2 -0
  405. package/modern/hooks/features/scroll/useGridScroll.js +6 -1
  406. package/modern/hooks/features/selection/useGridSelection.js +13 -10
  407. package/modern/hooks/features/sorting/useGridSorting.js +8 -9
  408. package/modern/hooks/features/virtualization/useGridVirtualScroller.js +33 -14
  409. package/modern/hooks/utils/useGridApiEventHandler.js +20 -9
  410. package/modern/hooks/utils/useGridNativeEventListener.js +1 -2
  411. package/modern/hooks/utils/useGridSelector.js +1 -1
  412. package/modern/index.js +1 -1
  413. package/modern/internals/index.js +5 -2
  414. package/modern/locales/arSD.js +5 -0
  415. package/modern/locales/bgBG.js +5 -0
  416. package/modern/locales/csCZ.js +5 -0
  417. package/modern/locales/daDK.js +5 -0
  418. package/modern/locales/deDE.js +10 -5
  419. package/modern/locales/elGR.js +5 -0
  420. package/modern/locales/esES.js +5 -0
  421. package/modern/locales/faIR.js +5 -0
  422. package/modern/locales/fiFI.js +5 -0
  423. package/modern/locales/frFR.js +5 -0
  424. package/modern/locales/heIL.js +10 -5
  425. package/modern/locales/huHU.js +5 -0
  426. package/modern/locales/itIT.js +5 -0
  427. package/modern/locales/jaJP.js +5 -0
  428. package/modern/locales/koKR.js +5 -0
  429. package/modern/locales/nbNO.js +115 -0
  430. package/modern/locales/nlNL.js +5 -0
  431. package/modern/locales/plPL.js +5 -0
  432. package/modern/locales/ptBR.js +5 -0
  433. package/modern/locales/ruRU.js +5 -0
  434. package/modern/locales/skSK.js +5 -0
  435. package/modern/locales/trTR.js +8 -3
  436. package/modern/locales/ukUA.js +5 -0
  437. package/modern/locales/viVN.js +5 -0
  438. package/modern/locales/zhCN.js +5 -0
  439. package/modern/models/events/gridEvents.js +4 -0
  440. package/modern/models/gridApiCaches.js +1 -0
  441. package/modern/models/index.js +4 -3
  442. package/modern/models/params/gridMenuParams.js +1 -0
  443. package/modern/models/params/index.js +2 -1
  444. package/modern/utils/createSelector.js +20 -2
  445. package/modern/utils/exportAs.js +1 -1
  446. package/node/DataGrid/DataGrid.js +61 -2
  447. package/node/DataGrid/useDataGridProps.js +2 -1
  448. package/node/colDef/gridActionsColDef.js +2 -1
  449. package/node/colDef/gridBooleanColDef.js +2 -1
  450. package/node/colDef/gridCheckboxSelectionColDef.js +1 -0
  451. package/node/colDef/gridDateColDef.js +4 -2
  452. package/node/colDef/gridNumericColDef.js +2 -1
  453. package/node/colDef/gridNumericOperators.js +15 -1
  454. package/node/colDef/gridSingleSelectColDef.js +2 -1
  455. package/node/colDef/gridSingleSelectOperators.js +56 -1
  456. package/node/colDef/gridStringColDef.js +2 -1
  457. package/node/colDef/gridStringOperators.js +16 -1
  458. package/node/components/GridFooter.js +10 -1
  459. package/node/components/GridRow.js +57 -18
  460. package/node/components/GridRowCount.js +1 -0
  461. package/node/components/GridScrollArea.js +3 -5
  462. package/node/components/GridSelectedRowCount.js +2 -1
  463. package/node/components/base/GridBody.js +1 -3
  464. package/node/components/base/GridOverlays.js +2 -4
  465. package/node/components/cell/GridActionsCell.js +13 -4
  466. package/node/components/cell/GridCell.js +16 -11
  467. package/node/components/cell/GridEditBooleanCell.js +100 -5
  468. package/node/components/cell/GridEditDateCell.js +98 -4
  469. package/node/components/cell/GridEditInputCell.js +29 -5
  470. package/node/components/cell/GridEditSingleSelectCell.js +28 -6
  471. package/node/components/cell/index.js +26 -0
  472. package/node/components/columnHeaders/GridColumnHeaderItem.js +19 -20
  473. package/node/components/columnSelection/GridCellCheckboxRenderer.js +2 -4
  474. package/node/components/columnSelection/GridHeaderCheckbox.js +4 -6
  475. package/node/components/containers/GridFooterContainer.js +10 -1
  476. package/node/components/containers/GridRoot.js +24 -3
  477. package/node/components/containers/GridRootStyles.js +4 -2
  478. package/node/components/containers/GridToolbarContainer.js +11 -1
  479. package/node/components/menu/GridMenu.js +10 -2
  480. package/node/components/panel/GridColumnsPanel.js +10 -2
  481. package/node/components/panel/GridPanelContent.js +11 -1
  482. package/node/components/panel/GridPanelFooter.js +11 -1
  483. package/node/components/panel/GridPanelHeader.js +11 -1
  484. package/node/components/panel/GridPanelWrapper.js +5 -3
  485. package/node/components/panel/filterPanel/GridFilterForm.js +91 -9
  486. package/node/components/panel/filterPanel/GridFilterInputMultipleSingleSelect.js +0 -1
  487. package/node/components/panel/filterPanel/GridFilterPanel.js +26 -6
  488. package/node/components/toolbar/GridToolbar.js +32 -7
  489. package/node/components/toolbar/GridToolbarExport.js +14 -19
  490. package/node/components/toolbar/GridToolbarQuickFilter.js +109 -0
  491. package/node/components/toolbar/index.js +42 -11
  492. package/node/constants/defaultGridSlotsComponents.js +2 -1
  493. package/node/constants/gridClasses.js +1 -1
  494. package/node/constants/localeTextConstants.js +5 -0
  495. package/node/hooks/core/pipeProcessing/useGridPipeProcessing.js +10 -8
  496. package/node/hooks/core/strategyProcessing/useGridStrategyProcessing.js +6 -8
  497. package/node/hooks/core/useGridApiInitialization.js +3 -4
  498. package/node/hooks/core/useGridErrorHandler.js +1 -3
  499. package/node/hooks/core/useGridStateInitialization.js +1 -3
  500. package/node/hooks/features/columnHeaders/useGridColumnHeaders.js +5 -7
  501. package/node/hooks/features/columnMenu/useGridColumnMenu.js +3 -5
  502. package/node/hooks/features/columns/useGridColumnSpanning.js +1 -3
  503. package/node/hooks/features/columns/useGridColumns.js +20 -24
  504. package/node/hooks/features/dimensions/useGridDimensions.js +8 -10
  505. package/node/hooks/features/editRows/useGridCellEditing.new.js +140 -32
  506. package/node/hooks/features/editRows/useGridCellEditing.old.js +20 -22
  507. package/node/hooks/features/editRows/useGridEditing.old.js +4 -6
  508. package/node/hooks/features/editRows/useGridRowEditing.new.js +128 -43
  509. package/node/hooks/features/editRows/useGridRowEditing.old.js +21 -23
  510. package/node/hooks/features/events/useGridEvents.js +19 -19
  511. package/node/hooks/features/export/serializers/csvSerializer.js +5 -5
  512. package/node/hooks/features/export/useGridCsvExport.js +26 -17
  513. package/node/hooks/features/export/useGridPrintExport.js +25 -0
  514. package/node/hooks/features/export/utils.js +19 -2
  515. package/node/hooks/features/filter/gridFilterState.js +3 -1
  516. package/node/hooks/features/filter/gridFilterUtils.js +93 -3
  517. package/node/hooks/features/filter/useGridFilter.js +25 -13
  518. package/node/hooks/features/focus/useGridFocus.js +29 -34
  519. package/node/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +4 -6
  520. package/node/hooks/features/pagination/useGridPage.js +3 -5
  521. package/node/hooks/features/pagination/useGridPageSize.js +2 -4
  522. package/node/hooks/features/preferencesPanel/useGridPreferencesPanel.js +4 -8
  523. package/node/hooks/features/rows/gridRowsSelector.js +3 -1
  524. package/node/hooks/features/rows/gridRowsUtils.js +95 -1
  525. package/node/hooks/features/rows/useGridRows.js +132 -127
  526. package/node/hooks/features/rows/useGridRowsMeta.js +107 -43
  527. package/node/hooks/features/rows/useGridRowsPreProcessors.js +2 -0
  528. package/node/hooks/features/scroll/useGridScroll.js +6 -1
  529. package/node/hooks/features/selection/useGridSelection.js +13 -11
  530. package/node/hooks/features/sorting/useGridSorting.js +8 -10
  531. package/node/hooks/features/virtualization/useGridVirtualScroller.js +33 -15
  532. package/node/hooks/utils/useGridApiEventHandler.js +22 -10
  533. package/node/hooks/utils/useGridNativeEventListener.js +1 -3
  534. package/node/hooks/utils/useGridSelector.js +1 -1
  535. package/node/index.js +1 -1
  536. package/node/internals/index.js +39 -3
  537. package/node/locales/arSD.js +5 -0
  538. package/node/locales/bgBG.js +5 -0
  539. package/node/locales/csCZ.js +5 -0
  540. package/node/locales/daDK.js +5 -0
  541. package/node/locales/deDE.js +10 -5
  542. package/node/locales/elGR.js +5 -0
  543. package/node/locales/esES.js +5 -0
  544. package/node/locales/faIR.js +5 -0
  545. package/node/locales/fiFI.js +5 -0
  546. package/node/locales/frFR.js +5 -0
  547. package/node/locales/heIL.js +10 -5
  548. package/node/locales/huHU.js +5 -0
  549. package/node/locales/itIT.js +5 -0
  550. package/node/locales/jaJP.js +5 -0
  551. package/node/locales/koKR.js +5 -0
  552. package/node/locales/nbNO.js +125 -0
  553. package/node/locales/nlNL.js +5 -0
  554. package/node/locales/plPL.js +5 -0
  555. package/node/locales/ptBR.js +5 -0
  556. package/node/locales/ruRU.js +5 -0
  557. package/node/locales/skSK.js +5 -0
  558. package/node/locales/trTR.js +8 -3
  559. package/node/locales/ukUA.js +5 -0
  560. package/node/locales/viVN.js +5 -0
  561. package/node/locales/zhCN.js +5 -0
  562. package/node/models/events/gridEvents.js +4 -0
  563. package/node/models/gridApiCaches.js +5 -0
  564. package/node/models/index.js +0 -13
  565. package/node/models/params/gridMenuParams.js +5 -0
  566. package/node/models/params/index.js +13 -0
  567. package/node/utils/createSelector.js +25 -4
  568. package/node/utils/exportAs.js +1 -1
  569. package/package.json +5 -4
  570. package/utils/createSelector.d.ts +2 -1
  571. package/utils/createSelector.js +20 -2
  572. package/utils/exportAs.d.ts +2 -2
  573. package/utils/exportAs.js +1 -1
@@ -1,5 +1,4 @@
1
1
  import * as React from 'react';
2
- import { GridEvents } from '../../models/events';
3
2
  import { useGridApiMethod } from '../utils/useGridApiMethod';
4
3
  import { GridSignature } from '../utils/useGridApiEventHandler';
5
4
  import { EventManager } from '../../utils/EventManager';
@@ -15,6 +14,7 @@ export function useGridApiInitialization(inputApiRef, props) {
15
14
  if (!apiRef.current) {
16
15
  apiRef.current = {
17
16
  unstable_eventManager: new EventManager(),
17
+ unstable_caches: {},
18
18
  state: {},
19
19
  instanceId: globalId
20
20
  };
@@ -43,7 +43,7 @@ export function useGridApiInitialization(inputApiRef, props) {
43
43
  };
44
44
  }, [apiRef]);
45
45
  const showError = React.useCallback(args => {
46
- apiRef.current.publishEvent(GridEvents.componentError, args);
46
+ apiRef.current.publishEvent('componentError', args);
47
47
  }, [apiRef]);
48
48
  useGridApiMethod(apiRef, {
49
49
  subscribeEvent,
@@ -53,7 +53,7 @@ export function useGridApiInitialization(inputApiRef, props) {
53
53
  React.useEffect(() => {
54
54
  const api = apiRef.current;
55
55
  return () => {
56
- api.publishEvent(GridEvents.unmount);
56
+ api.publishEvent('unmount');
57
57
  };
58
58
  }, [apiRef]);
59
59
  return apiRef;
@@ -1,6 +1,5 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import * as React from 'react';
3
- import { GridEvents } from '../../models/events';
4
3
  import { useGridApiEventHandler } from '../utils/useGridApiEventHandler';
5
4
  export function useGridErrorHandler(apiRef, props) {
6
5
  const handleError = React.useCallback(args => {
@@ -12,5 +11,5 @@ export function useGridErrorHandler(apiRef, props) {
12
11
  React.useEffect(() => {
13
12
  handleError(props.error);
14
13
  }, [handleError, props.error]);
15
- useGridApiEventHandler(apiRef, GridEvents.componentError, handleError);
14
+ useGridApiEventHandler(apiRef, 'componentError', handleError);
16
15
  }
@@ -3,7 +3,6 @@ import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWith
3
3
  const _excluded = ["stateId"];
4
4
  import * as React from 'react';
5
5
  import { GridSignature } from '../utils/useGridApiEventHandler';
6
- import { GridEvents } from '../../models/events';
7
6
  import { useGridApiMethod } from '../utils';
8
7
  import { isFunction } from '../../utils/utils';
9
8
  export const useGridStateInitialization = (apiRef, props) => {
@@ -66,7 +65,7 @@ export const useGridStateInitialization = (apiRef, props) => {
66
65
  apiRef.current.state = newState;
67
66
 
68
67
  if (apiRef.current.publishEvent) {
69
- apiRef.current.publishEvent(GridEvents.stateChange, newState);
68
+ apiRef.current.publishEvent('stateChange', newState);
70
69
  }
71
70
  }
72
71
 
@@ -13,7 +13,6 @@ import { gridSortColumnLookupSelector } from '../sorting/gridSortingSelector';
13
13
  import { gridColumnMenuSelector } from '../columnMenu/columnMenuSelector';
14
14
  import { useGridRootProps } from '../../utils/useGridRootProps';
15
15
  import { useGridApiEventHandler } from '../../utils/useGridApiEventHandler';
16
- import { GridEvents } from '../../../models/events';
17
16
  import { GridColumnHeaderItem } from '../../../components/columnHeaders/GridColumnHeaderItem';
18
17
  import { getFirstColumnIndexToRender } from '../columns/gridColumnsUtils';
19
18
  import { useGridVisibleRows } from '../../utils/useGridVisibleRows';
@@ -127,11 +126,11 @@ export const useGridColumnHeaders = props => {
127
126
  const handleColumnResizeStop = React.useCallback(() => setResizeCol(''), []);
128
127
  const handleColumnReorderStart = React.useCallback(params => setDragCol(params.field), []);
129
128
  const handleColumnReorderStop = React.useCallback(() => setDragCol(''), []);
130
- useGridApiEventHandler(apiRef, GridEvents.columnResizeStart, handleColumnResizeStart);
131
- useGridApiEventHandler(apiRef, GridEvents.columnResizeStop, handleColumnResizeStop);
132
- useGridApiEventHandler(apiRef, GridEvents.columnHeaderDragStart, handleColumnReorderStart);
133
- useGridApiEventHandler(apiRef, GridEvents.columnHeaderDragEnd, handleColumnReorderStop);
134
- useGridApiEventHandler(apiRef, GridEvents.rowsScroll, handleScroll);
129
+ useGridApiEventHandler(apiRef, 'columnResizeStart', handleColumnResizeStart);
130
+ useGridApiEventHandler(apiRef, 'columnResizeStop', handleColumnResizeStop);
131
+ useGridApiEventHandler(apiRef, 'columnHeaderDragStart', handleColumnReorderStart);
132
+ useGridApiEventHandler(apiRef, 'columnHeaderDragEnd', handleColumnReorderStop);
133
+ useGridApiEventHandler(apiRef, 'rowsScroll', handleScroll);
135
134
 
136
135
  const getColumns = (params, other = {}) => {
137
136
  const {
@@ -1,6 +1,5 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import * as React from 'react';
3
- import { GridEvents } from '../../../models/events';
4
3
  import { useGridLogger, useGridApiMethod, useGridApiEventHandler } from '../../utils';
5
4
  import { gridColumnMenuSelector } from './columnMenuSelector';
6
5
  export const columnMenuStateInitializer = state => _extends({}, state, {
@@ -78,7 +77,7 @@ export const useGridColumnMenu = apiRef => {
78
77
  * EVENTS
79
78
  */
80
79
 
81
- useGridApiEventHandler(apiRef, GridEvents.columnResizeStart, hideColumnMenu);
82
- useGridApiEventHandler(apiRef, GridEvents.virtualScrollerWheel, apiRef.current.hideColumnMenu);
83
- useGridApiEventHandler(apiRef, GridEvents.virtualScrollerTouchMove, apiRef.current.hideColumnMenu);
80
+ useGridApiEventHandler(apiRef, 'columnResizeStart', hideColumnMenu);
81
+ useGridApiEventHandler(apiRef, 'virtualScrollerWheel', apiRef.current.hideColumnMenu);
82
+ useGridApiEventHandler(apiRef, 'virtualScrollerTouchMove', apiRef.current.hideColumnMenu);
84
83
  };
@@ -1,7 +1,6 @@
1
1
  import React from 'react';
2
2
  import { useGridApiMethod } from '../../utils/useGridApiMethod';
3
3
  import { useGridApiEventHandler } from '../../utils/useGridApiEventHandler';
4
- import { GridEvents } from '../../../models/events/gridEvents';
5
4
 
6
5
  /**
7
6
  * @requires useGridColumns (method, event)
@@ -103,5 +102,5 @@ export const useGridColumnSpanning = apiRef => {
103
102
  // `colSpan` needs to be recalculated after column reordering
104
103
  lookup.current = {};
105
104
  }, []);
106
- useGridApiEventHandler(apiRef, GridEvents.columnOrderChange, handleColumnReorderChange);
105
+ useGridApiEventHandler(apiRef, 'columnOrderChange', handleColumnReorderChange);
107
106
  };
@@ -1,6 +1,5 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import * as React from 'react';
3
- import { GridEvents } from '../../../models/events';
4
3
  import { useGridApiMethod } from '../../utils/useGridApiMethod';
5
4
  import { useGridLogger } from '../../utils/useGridLogger';
6
5
  import { gridColumnFieldsSelector, gridColumnDefinitionsSelector, gridColumnLookupSelector, gridColumnsMetaSelector, gridColumnsSelector, gridColumnVisibilityModelSelector, gridVisibleColumnDefinitionsSelector, gridColumnPositionsSelector } from './gridColumnsSelector';
@@ -11,6 +10,9 @@ import { GridPreferencePanelsValue } from '../preferencesPanel';
11
10
  import { jsx as _jsx } from "react/jsx-runtime";
12
11
  export const columnsStateInitializer = (state, props, apiRef) => {
13
12
  const isUsingColumnVisibilityModel = !!props.columnVisibilityModel || !!props.initialState?.columns?.columnVisibilityModel;
13
+ apiRef.current.unstable_caches.columns = {
14
+ isUsingColumnVisibilityModel
15
+ };
14
16
  const columnsTypes = computeColumnTypes(props.columnTypes);
15
17
  const columnsState = createColumnsState({
16
18
  apiRef,
@@ -36,24 +38,18 @@ export function useGridColumns(apiRef, props) {
36
38
  const columnTypes = React.useMemo(() => computeColumnTypes(props.columnTypes), [props.columnTypes]);
37
39
  const previousColumnsProp = React.useRef(props.columns);
38
40
  const previousColumnTypesProp = React.useRef(columnTypes);
39
- /**
40
- * If `initialState.columns.columnVisibilityModel` or `columnVisibilityModel` was defined during the 1st render, we are directly updating the model
41
- * If not, we keep the old behavior and update the `GridColDef.hide` option (which will update the state model through the `GridColDef.hide` => `columnVisibilityModel` sync in `createColumnsState`
42
- */
43
-
44
- const isUsingColumnVisibilityModel = React.useRef(!!props.columnVisibilityModel || !!props.initialState?.columns?.columnVisibilityModel);
45
41
  apiRef.current.unstable_updateControlState({
46
42
  stateId: 'visibleColumns',
47
43
  propModel: props.columnVisibilityModel,
48
44
  propOnChange: props.onColumnVisibilityModelChange,
49
45
  stateSelector: gridColumnVisibilityModelSelector,
50
- changeEvent: GridEvents.columnVisibilityModelChange
46
+ changeEvent: 'columnVisibilityModelChange'
51
47
  });
52
48
  const setGridColumnsState = React.useCallback(columnsState => {
53
49
  logger.debug('Updating columns state.');
54
50
  apiRef.current.setState(mergeColumnsState(columnsState));
55
51
  apiRef.current.forceUpdate();
56
- apiRef.current.publishEvent(GridEvents.columnsChange, columnsState.all);
52
+ apiRef.current.publishEvent('columnsChange', columnsState.all);
57
53
  }, [logger, apiRef]);
58
54
  /**
59
55
  * API METHODS
@@ -105,7 +101,7 @@ export function useGridColumns(apiRef, props) {
105
101
  // We keep updating the `hide` option of `GridColDef` when not controlling the model to avoid any breaking change.
106
102
  // `updateColumns` take care of updating the model itself if needs be.
107
103
  // TODO v6: stop using the `hide` field even when the model is not defined
108
- if (isUsingColumnVisibilityModel.current) {
104
+ if (apiRef.current.unstable_caches.columns.isUsingColumnVisibilityModel) {
109
105
  const columnVisibilityModel = gridColumnVisibilityModelSelector(apiRef);
110
106
  const isCurrentlyVisible = columnVisibilityModel[field] ?? true;
111
107
 
@@ -129,7 +125,7 @@ export function useGridColumns(apiRef, props) {
129
125
  colDef: newColumn,
130
126
  isVisible
131
127
  };
132
- apiRef.current.publishEvent(GridEvents.columnVisibilityChange, params);
128
+ apiRef.current.publishEvent('columnVisibilityChange', params);
133
129
  }
134
130
  }, [apiRef]);
135
131
  const setColumnIndex = React.useCallback((field, targetIndexPosition) => {
@@ -142,7 +138,8 @@ export function useGridColumns(apiRef, props) {
142
138
 
143
139
  logger.debug(`Moving column ${field} to index ${targetIndexPosition}`);
144
140
  const updatedColumns = [...allColumns];
145
- updatedColumns.splice(targetIndexPosition, 0, updatedColumns.splice(oldIndexPosition, 1)[0]);
141
+ const fieldRemoved = updatedColumns.splice(oldIndexPosition, 1)[0];
142
+ updatedColumns.splice(targetIndexPosition, 0, fieldRemoved);
146
143
  setGridColumnsState(_extends({}, gridColumnsSelector(apiRef.current.state), {
147
144
  all: updatedColumns
148
145
  }));
@@ -153,7 +150,7 @@ export function useGridColumns(apiRef, props) {
153
150
  targetIndex: targetIndexPosition,
154
151
  oldIndex: oldIndexPosition
155
152
  };
156
- apiRef.current.publishEvent(GridEvents.columnOrderChange, params);
153
+ apiRef.current.publishEvent('columnOrderChange', params);
157
154
  }, [apiRef, logger, setGridColumnsState]);
158
155
  const setColumnWidth = React.useCallback((field, width) => {
159
156
  logger.debug(`Updating column ${field} width to ${width}`);
@@ -164,7 +161,7 @@ export function useGridColumns(apiRef, props) {
164
161
  });
165
162
 
166
163
  apiRef.current.updateColumns([newColumn]);
167
- apiRef.current.publishEvent(GridEvents.columnWidthChange, {
164
+ apiRef.current.publishEvent('columnWidthChange', {
168
165
  element: apiRef.current.getColumnHeaderElement(field),
169
166
  colDef: newColumn,
170
167
  width
@@ -192,7 +189,7 @@ export function useGridColumns(apiRef, props) {
192
189
  const stateExportPreProcessing = React.useCallback(prevState => {
193
190
  const columnsStateToExport = {};
194
191
 
195
- if (isUsingColumnVisibilityModel.current) {
192
+ if (apiRef.current.unstable_caches.columns.isUsingColumnVisibilityModel) {
196
193
  const columnVisibilityModelToExport = gridColumnVisibilityModelSelector(apiRef);
197
194
  const hasHiddenColumns = Object.values(columnVisibilityModelToExport).some(value => value === false);
198
195
 
@@ -229,7 +226,7 @@ export function useGridColumns(apiRef, props) {
229
226
  });
230
227
  }, [apiRef]);
231
228
  const stateRestorePreProcessing = React.useCallback((params, context) => {
232
- const columnVisibilityModelToImport = isUsingColumnVisibilityModel.current ? context.stateToRestore.columns?.columnVisibilityModel : undefined;
229
+ const columnVisibilityModelToImport = apiRef.current.unstable_caches.columns.isUsingColumnVisibilityModel ? context.stateToRestore.columns?.columnVisibilityModel : undefined;
233
230
  const initialState = context.stateToRestore.columns;
234
231
 
235
232
  if (columnVisibilityModelToImport == null && initialState == null) {
@@ -241,14 +238,14 @@ export function useGridColumns(apiRef, props) {
241
238
  columnTypes,
242
239
  columnsToUpsert: [],
243
240
  initialState,
244
- shouldRegenColumnVisibilityModelFromColumns: !isUsingColumnVisibilityModel.current,
241
+ shouldRegenColumnVisibilityModelFromColumns: !apiRef.current.unstable_caches.columns.isUsingColumnVisibilityModel,
245
242
  currentColumnVisibilityModel: columnVisibilityModelToImport,
246
243
  keepOnlyColumnsToUpsert: false
247
244
  });
248
245
  apiRef.current.setState(mergeColumnsState(columnsState));
249
246
 
250
247
  if (initialState != null) {
251
- apiRef.current.publishEvent(GridEvents.columnsChange, columnsState.all);
248
+ apiRef.current.publishEvent('columnsChange', columnsState.all);
252
249
  }
253
250
 
254
251
  return params;
@@ -277,8 +274,8 @@ export function useGridColumns(apiRef, props) {
277
274
  }
278
275
  };
279
276
 
280
- useGridApiEventHandler(apiRef, GridEvents.viewportInnerSizeChange, handleGridSizeChange);
281
- useGridApiOptionHandler(apiRef, GridEvents.columnVisibilityChange, props.onColumnVisibilityChange);
277
+ useGridApiEventHandler(apiRef, 'viewportInnerSizeChange', handleGridSizeChange);
278
+ useGridApiOptionHandler(apiRef, 'columnVisibilityChange', props.onColumnVisibilityChange);
282
279
  /**
283
280
  * APPLIERS
284
281
  */
@@ -290,7 +287,7 @@ export function useGridColumns(apiRef, props) {
290
287
  columnTypes,
291
288
  columnsToUpsert: [],
292
289
  initialState: undefined,
293
- shouldRegenColumnVisibilityModelFromColumns: !isUsingColumnVisibilityModel.current,
290
+ shouldRegenColumnVisibilityModelFromColumns: !apiRef.current.unstable_caches.columns.isUsingColumnVisibilityModel,
294
291
  keepOnlyColumnsToUpsert: false
295
292
  });
296
293
  setGridColumnsState(columnsState);
@@ -320,7 +317,7 @@ export function useGridColumns(apiRef, props) {
320
317
  columnTypes,
321
318
  initialState: undefined,
322
319
  // 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`
323
- shouldRegenColumnVisibilityModelFromColumns: !isUsingColumnVisibilityModel.current,
320
+ shouldRegenColumnVisibilityModelFromColumns: !apiRef.current.unstable_caches.columns.isUsingColumnVisibilityModel,
324
321
  columnsToUpsert: props.columns,
325
322
  keepOnlyColumnsToUpsert: true
326
323
  });
@@ -1,6 +1,5 @@
1
1
  import * as React from 'react';
2
2
  import { debounce, ownerDocument, unstable_useEnhancedEffect as useEnhancedEffect } from '@mui/material/utils';
3
- import { GridEvents } from '../../../models/events';
4
3
  import { useGridApiEventHandler, useGridApiOptionHandler } from '../../utils/useGridApiEventHandler';
5
4
  import { useGridApiMethod } from '../../utils/useGridApiMethod';
6
5
  import { useGridLogger } from '../../utils/useGridLogger';
@@ -99,12 +98,12 @@ export function useGridDimensions(apiRef, props) {
99
98
  fullDimensionsRef.current = newFullDimensions;
100
99
 
101
100
  if (newFullDimensions.viewportInnerSize.width !== prevDimensions?.viewportInnerSize.width || newFullDimensions.viewportInnerSize.height !== prevDimensions?.viewportInnerSize.height) {
102
- apiRef.current.publishEvent(GridEvents.viewportInnerSizeChange, newFullDimensions.viewportInnerSize);
101
+ apiRef.current.publishEvent('viewportInnerSizeChange', newFullDimensions.viewportInnerSize);
103
102
  }
104
103
  }, [apiRef, props.scrollbarSize, props.autoHeight, headerHeight, rowsMeta.currentPageTotalHeight]);
105
104
  const resize = React.useCallback(() => {
106
105
  updateGridDimensionsRef();
107
- apiRef.current.publishEvent(GridEvents.debouncedResize, rootDimensionsRef.current);
106
+ apiRef.current.publishEvent('debouncedResize', rootDimensionsRef.current);
108
107
  }, [apiRef, updateGridDimensionsRef]);
109
108
  const getRootDimensions = React.useCallback(() => fullDimensionsRef.current, []);
110
109
  const getViewportPageSize = React.useCallback(() => {
@@ -170,10 +169,10 @@ export function useGridDimensions(apiRef, props) {
170
169
  debounceResize();
171
170
  }, [props.autoHeight, debounceResize, logger, resize]);
172
171
  useEnhancedEffect(() => updateGridDimensionsRef(), [updateGridDimensionsRef]);
173
- useGridApiOptionHandler(apiRef, GridEvents.sortedRowsSet, updateGridDimensionsRef);
174
- useGridApiOptionHandler(apiRef, GridEvents.pageChange, updateGridDimensionsRef);
175
- useGridApiOptionHandler(apiRef, GridEvents.pageSizeChange, updateGridDimensionsRef);
176
- useGridApiOptionHandler(apiRef, GridEvents.columnsChange, updateGridDimensionsRef);
177
- useGridApiEventHandler(apiRef, GridEvents.resize, handleResize);
178
- useGridApiOptionHandler(apiRef, GridEvents.debouncedResize, props.onResize);
172
+ useGridApiOptionHandler(apiRef, 'sortedRowsSet', updateGridDimensionsRef);
173
+ useGridApiOptionHandler(apiRef, 'pageChange', updateGridDimensionsRef);
174
+ useGridApiOptionHandler(apiRef, 'pageSizeChange', updateGridDimensionsRef);
175
+ useGridApiOptionHandler(apiRef, 'columnsChange', updateGridDimensionsRef);
176
+ useGridApiEventHandler(apiRef, 'resize', handleResize);
177
+ useGridApiOptionHandler(apiRef, 'debouncedResize', props.onResize);
179
178
  }
@@ -1,18 +1,27 @@
1
+ import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
2
+ import _toPropertyKey from "@babel/runtime/helpers/esm/toPropertyKey";
1
3
  import _extends from "@babel/runtime/helpers/esm/extends";
4
+ const _excluded = ["id", "field"],
5
+ _excluded2 = ["id", "field"];
2
6
  import * as React from 'react';
3
- import { useGridApiEventHandler, useGridApiOptionHandler } from '../../utils/useGridApiEventHandler';
4
- import { GridEvents } from '../../../models/events/gridEvents';
7
+ import { useGridApiEventHandler, useGridApiOptionHandler, GridSignature } from '../../utils/useGridApiEventHandler';
5
8
  import { GridEditModes, GridCellModes } from '../../../models/gridEditRowModel';
6
9
  import { useGridApiMethod } from '../../utils/useGridApiMethod';
7
10
  import { gridEditRowsStateSelector } from './gridEditRowsSelector';
8
11
  import { isPrintableKey } from '../../../utils/keyboardUtils';
9
12
  import { buildWarning } from '../../../utils/warning';
13
+ import { gridRowsIdToIdLookupSelector } from '../rows/gridRowsSelector';
10
14
  import { GridCellEditStartReasons, GridCellEditStopReasons } from '../../../models/params/gridEditCellParams';
11
15
  const missingOnProcessRowUpdateErrorWarning = buildWarning(['MUI: A call to `processRowUpdate` threw an error which was not handled because `onProcessRowUpdateError` is missing.', 'To handle the error pass a callback to the `onProcessRowUpdateError` prop, e.g. `<DataGrid onProcessRowUpdateError={(error) => ...} />`.', 'For more detail, see http://mui.com/components/data-grid/editing/#persistence.'], 'error');
12
16
  export const useGridCellEditing = (apiRef, props) => {
17
+ const [cellModesModel, setCellModesModel] = React.useState({});
18
+ const prevCellModesModel = React.useRef({});
13
19
  const {
14
20
  processRowUpdate,
15
- onProcessRowUpdateError
21
+ onProcessRowUpdateError,
22
+ cellModesModel: cellModesModelProp,
23
+ onCellModesModelChange,
24
+ signature
16
25
  } = props;
17
26
 
18
27
  const runIfEditModeIsCell = callback => (...args) => {
@@ -46,7 +55,7 @@ export const useGridCellEditing = (apiRef, props) => {
46
55
  reason: GridCellEditStartReasons.cellDoubleClick
47
56
  });
48
57
 
49
- apiRef.current.publishEvent(GridEvents.cellEditStart, newParams, event);
58
+ apiRef.current.publishEvent('cellEditStart', newParams, event);
50
59
  }, [apiRef]);
51
60
  const handleCellFocusOut = React.useCallback((params, event) => {
52
61
  if (params.cellMode === GridCellModes.View) {
@@ -57,7 +66,7 @@ export const useGridCellEditing = (apiRef, props) => {
57
66
  reason: GridCellEditStopReasons.cellFocusOut
58
67
  });
59
68
 
60
- apiRef.current.publishEvent(GridEvents.cellEditStop, newParams, event);
69
+ apiRef.current.publishEvent('cellEditStop', newParams, event);
61
70
  }, [apiRef]);
62
71
  const handleCellKeyDown = React.useCallback((params, event) => {
63
72
  if (params.cellMode === GridCellModes.Edit) {
@@ -77,7 +86,7 @@ export const useGridCellEditing = (apiRef, props) => {
77
86
  reason
78
87
  });
79
88
 
80
- apiRef.current.publishEvent(GridEvents.cellEditStop, newParams, event);
89
+ apiRef.current.publishEvent('cellEditStop', newParams, event);
81
90
  }
82
91
  } else if (params.isEditable) {
83
92
  let reason;
@@ -99,25 +108,26 @@ export const useGridCellEditing = (apiRef, props) => {
99
108
  reason
100
109
  });
101
110
 
102
- apiRef.current.publishEvent(GridEvents.cellEditStart, newParams, event);
111
+ apiRef.current.publishEvent('cellEditStart', newParams, event);
103
112
  }
104
113
  }
105
114
  }, [apiRef]);
106
- const handleCellEditStart = React.useCallback((params, event) => {
115
+ const handleCellEditStart = React.useCallback(params => {
107
116
  const {
108
117
  id,
109
118
  field,
110
119
  reason
111
120
  } = params;
112
- apiRef.current.startCellEditMode(params);
121
+ const startCellEditModeParams = {
122
+ id,
123
+ field
124
+ };
113
125
 
114
126
  if (reason === GridCellEditStartReasons.deleteKeyDown || reason === GridCellEditStartReasons.printableKeyDown) {
115
- apiRef.current.setEditCellValue({
116
- id,
117
- field,
118
- value: ''
119
- }, event);
127
+ startCellEditModeParams.deleteValue = true;
120
128
  }
129
+
130
+ apiRef.current.startCellEditMode(startCellEditModeParams);
121
131
  }, [apiRef]);
122
132
  const handleCellEditStop = React.useCallback(params => {
123
133
  const {
@@ -151,18 +161,56 @@ export const useGridCellEditing = (apiRef, props) => {
151
161
  cellToFocusAfter
152
162
  });
153
163
  }, [apiRef]);
154
- useGridApiEventHandler(apiRef, GridEvents.cellDoubleClick, runIfEditModeIsCell(handleCellDoubleClick));
155
- useGridApiEventHandler(apiRef, GridEvents.cellFocusOut, runIfEditModeIsCell(handleCellFocusOut));
156
- useGridApiEventHandler(apiRef, GridEvents.cellKeyDown, runIfEditModeIsCell(handleCellKeyDown));
157
- useGridApiEventHandler(apiRef, GridEvents.cellEditStart, runIfEditModeIsCell(handleCellEditStart));
158
- useGridApiEventHandler(apiRef, GridEvents.cellEditStop, runIfEditModeIsCell(handleCellEditStop));
159
- useGridApiOptionHandler(apiRef, GridEvents.cellEditStart, props.onCellEditStart);
160
- useGridApiOptionHandler(apiRef, GridEvents.cellEditStop, props.onCellEditStop);
164
+ useGridApiEventHandler(apiRef, 'cellDoubleClick', runIfEditModeIsCell(handleCellDoubleClick));
165
+ useGridApiEventHandler(apiRef, 'cellFocusOut', runIfEditModeIsCell(handleCellFocusOut));
166
+ useGridApiEventHandler(apiRef, 'cellKeyDown', runIfEditModeIsCell(handleCellKeyDown));
167
+ useGridApiEventHandler(apiRef, 'cellEditStart', runIfEditModeIsCell(handleCellEditStart));
168
+ useGridApiEventHandler(apiRef, 'cellEditStop', runIfEditModeIsCell(handleCellEditStop));
169
+ useGridApiOptionHandler(apiRef, 'cellEditStart', props.onCellEditStart);
170
+ useGridApiOptionHandler(apiRef, 'cellEditStop', props.onCellEditStop);
161
171
  const getCellMode = React.useCallback((id, field) => {
162
172
  const editingState = gridEditRowsStateSelector(apiRef.current.state);
163
173
  const isEditing = editingState[id] && editingState[id][field];
164
174
  return isEditing ? GridCellModes.Edit : GridCellModes.View;
165
175
  }, [apiRef]);
176
+ const updateCellModesModel = React.useCallback(newModel => {
177
+ const isNewModelDifferentFromProp = newModel !== props.cellModesModel;
178
+
179
+ if (onCellModesModelChange && isNewModelDifferentFromProp) {
180
+ const details = signature === GridSignature.DataGridPro ? {
181
+ api: apiRef.current
182
+ } : {};
183
+ onCellModesModelChange(newModel, details);
184
+ }
185
+
186
+ if (props.cellModesModel && isNewModelDifferentFromProp) {
187
+ return; // The prop always win
188
+ }
189
+
190
+ setCellModesModel(newModel);
191
+ apiRef.current.publishEvent('cellModesModelChange', newModel);
192
+ }, [apiRef, onCellModesModelChange, props.cellModesModel, signature]);
193
+ const updateFieldInCellModesModel = React.useCallback((id, field, newProps) => {
194
+ const newModel = _extends({}, cellModesModel);
195
+
196
+ if (newProps !== null) {
197
+ newModel[id] = _extends({}, newModel[id], {
198
+ [field]: _extends({}, newProps)
199
+ });
200
+ } else {
201
+ const _cellModesModel$id = cellModesModel[id],
202
+ otherFields = _objectWithoutPropertiesLoose(_cellModesModel$id, [field].map(_toPropertyKey)); // Ensure that we have a new object, not a reference
203
+
204
+
205
+ newModel[id] = otherFields;
206
+
207
+ if (Object.keys(newModel[id]).length === 0) {
208
+ delete newModel[id];
209
+ }
210
+ }
211
+
212
+ updateCellModesModel(newModel);
213
+ }, [cellModesModel, updateCellModesModel]);
166
214
  const updateOrDeleteFieldState = React.useCallback((id, field, newProps) => {
167
215
  apiRef.current.setState(state => {
168
216
  const newEditingState = _extends({}, state.editRows);
@@ -189,18 +237,42 @@ export const useGridCellEditing = (apiRef, props) => {
189
237
  const {
190
238
  id,
191
239
  field
192
- } = params;
240
+ } = params,
241
+ other = _objectWithoutPropertiesLoose(params, _excluded);
242
+
193
243
  throwIfNotEditable(id, field);
194
244
  throwIfNotInMode(id, field, GridCellModes.View);
245
+ updateFieldInCellModesModel(id, field, _extends({
246
+ mode: GridCellModes.Edit
247
+ }, other));
248
+ }, [throwIfNotEditable, throwIfNotInMode, updateFieldInCellModesModel]);
249
+ const updateStateToStartCellEditMode = React.useCallback(params => {
250
+ const {
251
+ id,
252
+ field,
253
+ deleteValue
254
+ } = params;
195
255
  const newProps = {
196
- value: apiRef.current.getCellValue(id, field),
256
+ value: deleteValue ? '' : apiRef.current.getCellValue(id, field),
197
257
  error: false,
198
258
  isProcessingProps: false
199
259
  };
200
260
  updateOrDeleteFieldState(id, field, newProps);
201
261
  apiRef.current.setCellFocus(id, field);
202
- }, [apiRef, throwIfNotEditable, throwIfNotInMode, updateOrDeleteFieldState]);
262
+ }, [apiRef, updateOrDeleteFieldState]);
203
263
  const stopCellEditMode = React.useCallback(params => {
264
+ const {
265
+ id,
266
+ field
267
+ } = params,
268
+ other = _objectWithoutPropertiesLoose(params, _excluded2);
269
+
270
+ throwIfNotInMode(id, field, GridCellModes.Edit);
271
+ updateFieldInCellModesModel(id, field, _extends({
272
+ mode: GridCellModes.View
273
+ }, other));
274
+ }, [throwIfNotInMode, updateFieldInCellModesModel]);
275
+ const updateStateToStopCellEditMode = React.useCallback(async params => {
204
276
  const {
205
277
  id,
206
278
  field,
@@ -210,15 +282,17 @@ export const useGridCellEditing = (apiRef, props) => {
210
282
  throwIfNotInMode(id, field, GridCellModes.Edit);
211
283
  apiRef.current.unstable_runPendingEditCellValueMutation(id, field);
212
284
 
213
- const updateFocusedCellIfNeeded = () => {
285
+ const finishCellEditMode = () => {
214
286
  if (cellToFocusAfter !== 'none') {
215
287
  apiRef.current.unstable_moveFocusToRelativeCell(id, field, cellToFocusAfter);
216
288
  }
289
+
290
+ updateOrDeleteFieldState(id, field, null);
291
+ updateFieldInCellModesModel(id, field, null);
217
292
  };
218
293
 
219
294
  if (ignoreModifications) {
220
- updateFocusedCellIfNeeded();
221
- updateOrDeleteFieldState(id, field, null);
295
+ finishCellEditMode();
222
296
  return;
223
297
  }
224
298
 
@@ -229,6 +303,9 @@ export const useGridCellEditing = (apiRef, props) => {
229
303
  } = editingState[id][field];
230
304
 
231
305
  if (error || isProcessingProps) {
306
+ // Attempt to change cell mode to "view" was not successful
307
+ // Update previous mode to allow another attempt
308
+ prevCellModesModel.current[id][field].mode = GridCellModes.Edit;
232
309
  return;
233
310
  }
234
311
 
@@ -236,6 +313,8 @@ export const useGridCellEditing = (apiRef, props) => {
236
313
 
237
314
  if (processRowUpdate) {
238
315
  const handleError = errorThrown => {
316
+ prevCellModesModel.current[id][field].mode = GridCellModes.Edit;
317
+
239
318
  if (onProcessRowUpdateError) {
240
319
  onProcessRowUpdateError(errorThrown);
241
320
  } else {
@@ -247,18 +326,16 @@ export const useGridCellEditing = (apiRef, props) => {
247
326
  const row = apiRef.current.getRow(id);
248
327
  Promise.resolve(processRowUpdate(rowUpdate, row)).then(finalRowUpdate => {
249
328
  apiRef.current.updateRows([finalRowUpdate]);
250
- updateFocusedCellIfNeeded();
251
- updateOrDeleteFieldState(id, field, null);
329
+ finishCellEditMode();
252
330
  }).catch(handleError);
253
331
  } catch (errorThrown) {
254
332
  handleError(errorThrown);
255
333
  }
256
334
  } else {
257
335
  apiRef.current.updateRows([rowUpdate]);
258
- updateFocusedCellIfNeeded();
259
- updateOrDeleteFieldState(id, field, null);
336
+ finishCellEditMode();
260
337
  }
261
- }, [apiRef, onProcessRowUpdateError, processRowUpdate, throwIfNotInMode, updateOrDeleteFieldState]);
338
+ }, [apiRef, onProcessRowUpdateError, processRowUpdate, throwIfNotInMode, updateFieldInCellModesModel, updateOrDeleteFieldState]);
262
339
  const setCellEditingEditCellValue = React.useCallback(async params => {
263
340
  const {
264
341
  id,
@@ -335,4 +412,33 @@ export const useGridCellEditing = (apiRef, props) => {
335
412
  unstable_getRowWithUpdatedValuesFromCellEditing: getRowWithUpdatedValuesFromCellEditing
336
413
  };
337
414
  useGridApiMethod(apiRef, editingApi, 'EditingApi');
415
+ React.useEffect(() => {
416
+ if (cellModesModelProp) {
417
+ updateCellModesModel(cellModesModelProp);
418
+ }
419
+ }, [cellModesModelProp, updateCellModesModel]);
420
+ React.useEffect(() => {
421
+ const idToIdLookup = gridRowsIdToIdLookupSelector(apiRef); // Update the ref here because updateStateToStopCellEditMode may change it later
422
+
423
+ const copyOfPrevCellModes = prevCellModesModel.current;
424
+ prevCellModesModel.current = cellModesModel;
425
+ Object.entries(cellModesModel).forEach(([id, fields]) => {
426
+ Object.entries(fields).forEach(([field, params]) => {
427
+ const prevMode = copyOfPrevCellModes[id]?.[field]?.mode || GridCellModes.View;
428
+ const originalId = idToIdLookup[id] ?? id;
429
+
430
+ if (params.mode === GridCellModes.Edit && prevMode === GridCellModes.View) {
431
+ updateStateToStartCellEditMode(_extends({
432
+ id: originalId,
433
+ field
434
+ }, params));
435
+ } else if (params.mode === GridCellModes.View && prevMode === GridCellModes.Edit) {
436
+ updateStateToStopCellEditMode(_extends({
437
+ id: originalId,
438
+ field
439
+ }, params));
440
+ }
441
+ });
442
+ });
443
+ }, [apiRef, cellModesModel, updateStateToStartCellEditMode, updateStateToStopCellEditMode]);
338
444
  };