@mui/x-data-grid 5.9.0 → 5.11.1

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 (519) hide show
  1. package/CHANGELOG.md +284 -10
  2. package/DataGrid/DataGrid.js +35 -1
  3. package/DataGrid/useDataGridProps.js +2 -1
  4. package/README.md +5 -4
  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.js +9 -5
  21. package/components/GridRowCount.d.ts +4 -1
  22. package/components/GridRowCount.js +1 -0
  23. package/components/GridScrollArea.js +3 -4
  24. package/components/GridSelectedRowCount.d.ts +4 -1
  25. package/components/GridSelectedRowCount.js +2 -1
  26. package/components/base/GridBody.js +1 -2
  27. package/components/base/GridOverlays.js +2 -3
  28. package/components/cell/GridActionsCell.js +13 -4
  29. package/components/cell/GridCell.js +8 -8
  30. package/components/cell/GridEditBooleanCell.d.ts +15 -3
  31. package/components/cell/GridEditBooleanCell.js +101 -6
  32. package/components/cell/GridEditDateCell.d.ts +16 -4
  33. package/components/cell/GridEditDateCell.js +99 -5
  34. package/components/cell/GridEditInputCell.d.ts +11 -5
  35. package/components/cell/GridEditInputCell.js +29 -5
  36. package/components/cell/GridEditSingleSelectCell.d.ts +12 -4
  37. package/components/cell/GridEditSingleSelectCell.js +28 -5
  38. package/components/cell/index.d.ts +2 -0
  39. package/components/cell/index.js +2 -0
  40. package/components/columnHeaders/GridColumnHeaderItem.js +15 -16
  41. package/components/columnHeaders/GridColumnHeaders.d.ts +2 -0
  42. package/components/columnHeaders/GridColumnHeadersInner.d.ts +2 -0
  43. package/components/columnSelection/GridCellCheckboxRenderer.js +2 -3
  44. package/components/columnSelection/GridHeaderCheckbox.js +4 -5
  45. package/components/containers/GridFooterContainer.d.ts +8 -2
  46. package/components/containers/GridFooterContainer.js +11 -2
  47. package/components/containers/GridRoot.js +25 -5
  48. package/components/containers/GridRootStyles.js +36 -1
  49. package/components/containers/GridToolbarContainer.d.ts +8 -2
  50. package/components/containers/GridToolbarContainer.js +12 -2
  51. package/components/menu/GridMenu.js +1 -0
  52. package/components/panel/GridPanelContent.d.ts +8 -1
  53. package/components/panel/GridPanelContent.js +13 -2
  54. package/components/panel/GridPanelFooter.d.ts +8 -1
  55. package/components/panel/GridPanelFooter.js +13 -2
  56. package/components/panel/GridPanelHeader.d.ts +8 -1
  57. package/components/panel/GridPanelHeader.js +13 -2
  58. package/components/toolbar/GridToolbar.d.ts +12 -2
  59. package/components/toolbar/GridToolbar.js +30 -7
  60. package/components/toolbar/GridToolbarExport.d.ts +5 -4
  61. package/components/toolbar/GridToolbarExport.js +15 -20
  62. package/components/toolbar/GridToolbarFilterButton.d.ts +1 -1
  63. package/components/toolbar/GridToolbarQuickFilter.d.ts +20 -0
  64. package/components/toolbar/GridToolbarQuickFilter.js +87 -0
  65. package/components/toolbar/index.d.ts +3 -1
  66. package/components/toolbar/index.js +3 -2
  67. package/components/virtualization/GridVirtualScroller.d.ts +4 -1
  68. package/components/virtualization/GridVirtualScrollerContent.d.ts +4 -1
  69. package/components/virtualization/GridVirtualScrollerRenderZone.d.ts +4 -1
  70. package/constants/defaultGridSlotsComponents.js +4 -2
  71. package/constants/gridClasses.d.ts +32 -0
  72. package/constants/gridClasses.js +1 -1
  73. package/constants/localeTextConstants.js +8 -1
  74. package/hooks/core/pipeProcessing/gridPipeProcessingApi.d.ts +11 -0
  75. package/hooks/core/pipeProcessing/useGridPipeProcessing.js +10 -9
  76. package/hooks/core/strategyProcessing/useGridStrategyProcessing.d.ts +4 -4
  77. package/hooks/core/strategyProcessing/useGridStrategyProcessing.js +6 -7
  78. package/hooks/core/useGridApiInitialization.js +3 -3
  79. package/hooks/core/useGridErrorHandler.js +1 -2
  80. package/hooks/core/useGridStateInitialization.js +1 -2
  81. package/hooks/features/columnHeaders/useGridColumnHeaders.js +5 -6
  82. package/hooks/features/columnMenu/useGridColumnMenu.js +3 -3
  83. package/hooks/features/columns/useGridColumnSpanning.js +1 -2
  84. package/hooks/features/columns/useGridColumns.d.ts +1 -1
  85. package/hooks/features/columns/useGridColumns.js +8 -9
  86. package/hooks/features/dimensions/useGridDimensions.d.ts +1 -1
  87. package/hooks/features/dimensions/useGridDimensions.js +8 -9
  88. package/hooks/features/editRows/useGridCellEditing.new.d.ts +1 -1
  89. package/hooks/features/editRows/useGridCellEditing.new.js +133 -32
  90. package/hooks/features/editRows/useGridCellEditing.old.js +20 -21
  91. package/hooks/features/editRows/useGridEditing.old.js +4 -5
  92. package/hooks/features/editRows/useGridRowEditing.new.d.ts +1 -1
  93. package/hooks/features/editRows/useGridRowEditing.new.js +122 -42
  94. package/hooks/features/editRows/useGridRowEditing.old.js +21 -22
  95. package/hooks/features/events/useGridEvents.js +17 -18
  96. package/hooks/features/export/serializers/csvSerializer.js +5 -5
  97. package/hooks/features/export/useGridCsvExport.js +23 -16
  98. package/hooks/features/export/useGridPrintExport.js +22 -0
  99. package/hooks/features/export/utils.d.ts +3 -1
  100. package/hooks/features/export/utils.js +13 -0
  101. package/hooks/features/filter/gridFilterState.d.ts +1 -2
  102. package/hooks/features/filter/gridFilterState.js +3 -1
  103. package/hooks/features/filter/gridFilterUtils.d.ts +8 -0
  104. package/hooks/features/filter/gridFilterUtils.js +84 -2
  105. package/hooks/features/filter/useGridFilter.js +20 -8
  106. package/hooks/features/focus/useGridFocus.d.ts +1 -1
  107. package/hooks/features/focus/useGridFocus.js +29 -33
  108. package/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +4 -5
  109. package/hooks/features/pagination/useGridPage.js +3 -4
  110. package/hooks/features/pagination/useGridPageSize.js +2 -3
  111. package/hooks/features/preferencesPanel/useGridPreferencesPanel.js +4 -6
  112. package/hooks/features/rows/gridRowsSelector.d.ts +1 -0
  113. package/hooks/features/rows/gridRowsSelector.js +1 -0
  114. package/hooks/features/rows/gridRowsState.d.ts +16 -11
  115. package/hooks/features/rows/gridRowsUtils.d.ts +14 -1
  116. package/hooks/features/rows/gridRowsUtils.js +79 -1
  117. package/hooks/features/rows/useGridRows.js +148 -128
  118. package/hooks/features/rows/useGridRowsPreProcessors.js +2 -0
  119. package/hooks/features/scroll/useGridScroll.js +6 -1
  120. package/hooks/features/selection/useGridSelection.d.ts +1 -1
  121. package/hooks/features/selection/useGridSelection.js +13 -10
  122. package/hooks/features/sorting/useGridSorting.js +8 -9
  123. package/hooks/features/virtualization/useGridVirtualScroller.d.ts +2 -0
  124. package/hooks/features/virtualization/useGridVirtualScroller.js +14 -5
  125. package/hooks/utils/useGridApiEventHandler.d.ts +4 -1
  126. package/hooks/utils/useGridApiEventHandler.js +22 -9
  127. package/hooks/utils/useGridNativeEventListener.js +1 -2
  128. package/hooks/utils/useGridSelector.js +1 -1
  129. package/index.d.ts +2 -0
  130. package/index.js +1 -1
  131. package/internals/index.d.ts +4 -1
  132. package/internals/index.js +5 -2
  133. package/legacy/DataGrid/DataGrid.js +35 -1
  134. package/legacy/DataGrid/useDataGridProps.js +2 -1
  135. package/legacy/colDef/gridActionsColDef.js +2 -1
  136. package/legacy/colDef/gridBooleanColDef.js +2 -1
  137. package/legacy/colDef/gridCheckboxSelectionColDef.js +1 -0
  138. package/legacy/colDef/gridDateColDef.js +4 -2
  139. package/legacy/colDef/gridNumericColDef.js +3 -2
  140. package/legacy/colDef/gridNumericOperators.js +28 -18
  141. package/legacy/colDef/gridSingleSelectColDef.js +3 -2
  142. package/legacy/colDef/gridSingleSelectOperators.js +55 -6
  143. package/legacy/colDef/gridStringColDef.js +3 -2
  144. package/legacy/colDef/gridStringOperators.js +25 -14
  145. package/legacy/components/GridFooter.js +11 -2
  146. package/legacy/components/GridRow.js +9 -5
  147. package/legacy/components/GridRowCount.js +1 -0
  148. package/legacy/components/GridScrollArea.js +3 -4
  149. package/legacy/components/GridSelectedRowCount.js +2 -1
  150. package/legacy/components/base/GridBody.js +1 -2
  151. package/legacy/components/base/GridOverlays.js +2 -3
  152. package/legacy/components/cell/GridActionsCell.js +13 -4
  153. package/legacy/components/cell/GridCell.js +8 -8
  154. package/legacy/components/cell/GridEditBooleanCell.js +132 -11
  155. package/legacy/components/cell/GridEditDateCell.js +148 -42
  156. package/legacy/components/cell/GridEditInputCell.js +61 -12
  157. package/legacy/components/cell/GridEditSingleSelectCell.js +41 -13
  158. package/legacy/components/cell/index.js +2 -0
  159. package/legacy/components/columnHeaders/GridColumnHeaderItem.js +15 -16
  160. package/legacy/components/columnSelection/GridCellCheckboxRenderer.js +2 -3
  161. package/legacy/components/columnSelection/GridHeaderCheckbox.js +4 -5
  162. package/legacy/components/containers/GridFooterContainer.js +11 -2
  163. package/legacy/components/containers/GridRoot.js +23 -5
  164. package/legacy/components/containers/GridRootStyles.js +26 -5
  165. package/legacy/components/containers/GridToolbarContainer.js +12 -2
  166. package/legacy/components/menu/GridMenu.js +1 -0
  167. package/legacy/components/panel/GridPanelContent.js +13 -2
  168. package/legacy/components/panel/GridPanelFooter.js +13 -2
  169. package/legacy/components/panel/GridPanelHeader.js +13 -2
  170. package/legacy/components/toolbar/GridToolbar.js +31 -6
  171. package/legacy/components/toolbar/GridToolbarExport.js +18 -19
  172. package/legacy/components/toolbar/GridToolbarQuickFilter.js +102 -0
  173. package/legacy/components/toolbar/index.js +3 -2
  174. package/legacy/constants/defaultGridSlotsComponents.js +4 -2
  175. package/legacy/constants/gridClasses.js +1 -1
  176. package/legacy/constants/localeTextConstants.js +8 -1
  177. package/legacy/hooks/core/pipeProcessing/useGridPipeProcessing.js +10 -10
  178. package/legacy/hooks/core/strategyProcessing/useGridStrategyProcessing.js +6 -7
  179. package/legacy/hooks/core/useGridApiInitialization.js +3 -3
  180. package/legacy/hooks/core/useGridErrorHandler.js +1 -2
  181. package/legacy/hooks/core/useGridStateInitialization.js +1 -2
  182. package/legacy/hooks/features/columnHeaders/useGridColumnHeaders.js +5 -6
  183. package/legacy/hooks/features/columnMenu/useGridColumnMenu.js +3 -3
  184. package/legacy/hooks/features/columns/useGridColumnSpanning.js +1 -2
  185. package/legacy/hooks/features/columns/useGridColumns.js +8 -9
  186. package/legacy/hooks/features/dimensions/useGridDimensions.js +8 -9
  187. package/legacy/hooks/features/editRows/useGridCellEditing.new.js +213 -83
  188. package/legacy/hooks/features/editRows/useGridCellEditing.old.js +20 -21
  189. package/legacy/hooks/features/editRows/useGridEditing.old.js +4 -5
  190. package/legacy/hooks/features/editRows/useGridRowEditing.new.js +126 -42
  191. package/legacy/hooks/features/editRows/useGridRowEditing.old.js +20 -21
  192. package/legacy/hooks/features/events/useGridEvents.js +17 -18
  193. package/legacy/hooks/features/export/serializers/csvSerializer.js +5 -5
  194. package/legacy/hooks/features/export/useGridCsvExport.js +24 -17
  195. package/legacy/hooks/features/export/useGridPrintExport.js +22 -0
  196. package/legacy/hooks/features/export/utils.js +14 -0
  197. package/legacy/hooks/features/filter/gridFilterState.js +3 -1
  198. package/legacy/hooks/features/filter/gridFilterUtils.js +96 -2
  199. package/legacy/hooks/features/filter/useGridFilter.js +20 -8
  200. package/legacy/hooks/features/focus/useGridFocus.js +31 -35
  201. package/legacy/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +4 -5
  202. package/legacy/hooks/features/pagination/useGridPage.js +3 -4
  203. package/legacy/hooks/features/pagination/useGridPageSize.js +2 -3
  204. package/legacy/hooks/features/preferencesPanel/useGridPreferencesPanel.js +4 -6
  205. package/legacy/hooks/features/rows/gridRowsSelector.js +3 -0
  206. package/legacy/hooks/features/rows/gridRowsUtils.js +82 -1
  207. package/legacy/hooks/features/rows/useGridRows.js +164 -131
  208. package/legacy/hooks/features/rows/useGridRowsPreProcessors.js +2 -0
  209. package/legacy/hooks/features/scroll/useGridScroll.js +6 -1
  210. package/legacy/hooks/features/selection/useGridSelection.js +13 -10
  211. package/legacy/hooks/features/sorting/useGridSorting.js +8 -9
  212. package/legacy/hooks/features/virtualization/useGridVirtualScroller.js +14 -5
  213. package/legacy/hooks/utils/useGridApiEventHandler.js +20 -9
  214. package/legacy/hooks/utils/useGridNativeEventListener.js +1 -2
  215. package/legacy/hooks/utils/useGridSelector.js +1 -1
  216. package/legacy/index.js +1 -1
  217. package/legacy/internals/index.js +5 -2
  218. package/legacy/locales/arSD.js +8 -1
  219. package/legacy/locales/bgBG.js +8 -1
  220. package/legacy/locales/csCZ.js +7 -0
  221. package/legacy/locales/daDK.js +8 -1
  222. package/legacy/locales/deDE.js +10 -3
  223. package/legacy/locales/elGR.js +7 -0
  224. package/legacy/locales/esES.js +7 -0
  225. package/legacy/locales/faIR.js +8 -1
  226. package/legacy/locales/fiFI.js +7 -0
  227. package/legacy/locales/frFR.js +7 -0
  228. package/legacy/locales/heIL.js +8 -1
  229. package/legacy/locales/huHU.js +8 -1
  230. package/legacy/locales/itIT.js +7 -0
  231. package/legacy/locales/jaJP.js +7 -0
  232. package/legacy/locales/koKR.js +7 -0
  233. package/legacy/locales/nlNL.js +7 -0
  234. package/legacy/locales/plPL.js +8 -1
  235. package/legacy/locales/ptBR.js +8 -1
  236. package/legacy/locales/ruRU.js +7 -0
  237. package/legacy/locales/skSK.js +7 -0
  238. package/legacy/locales/trTR.js +8 -1
  239. package/legacy/locales/ukUA.js +7 -0
  240. package/legacy/locales/viVN.js +7 -0
  241. package/legacy/locales/zhCN.js +7 -0
  242. package/legacy/models/events/gridEvents.js +8 -0
  243. package/legacy/models/index.js +4 -3
  244. package/legacy/utils/createSelector.js +18 -2
  245. package/legacy/utils/exportAs.js +1 -1
  246. package/locales/arSD.js +8 -1
  247. package/locales/bgBG.js +8 -1
  248. package/locales/csCZ.js +7 -0
  249. package/locales/daDK.js +8 -1
  250. package/locales/deDE.js +10 -3
  251. package/locales/elGR.js +7 -0
  252. package/locales/esES.js +7 -0
  253. package/locales/faIR.js +8 -1
  254. package/locales/fiFI.js +7 -0
  255. package/locales/frFR.js +7 -0
  256. package/locales/heIL.js +8 -1
  257. package/locales/huHU.js +8 -1
  258. package/locales/itIT.js +7 -0
  259. package/locales/jaJP.js +7 -0
  260. package/locales/koKR.js +7 -0
  261. package/locales/nlNL.js +7 -0
  262. package/locales/plPL.js +8 -1
  263. package/locales/ptBR.js +8 -1
  264. package/locales/ruRU.js +7 -0
  265. package/locales/skSK.js +7 -0
  266. package/locales/trTR.js +8 -1
  267. package/locales/ukUA.js +7 -0
  268. package/locales/viVN.js +7 -0
  269. package/locales/zhCN.js +7 -0
  270. package/models/api/gridCoreApi.d.ts +10 -0
  271. package/models/api/gridEditingApi.d.ts +23 -4
  272. package/models/api/gridFilterApi.d.ts +5 -0
  273. package/models/api/gridFocusApi.d.ts +1 -0
  274. package/models/api/gridLocaleTextApi.d.ts +5 -0
  275. package/models/api/gridRowApi.d.ts +34 -0
  276. package/models/api/index.d.ts +1 -1
  277. package/models/colDef/gridColDef.d.ts +13 -0
  278. package/models/events/gridEventLookup.d.ts +293 -3
  279. package/models/events/gridEvents.d.ts +8 -251
  280. package/models/events/gridEvents.js +8 -0
  281. package/models/gridExport.d.ts +29 -2
  282. package/models/gridFilterModel.d.ts +11 -0
  283. package/models/gridFilterOperator.d.ts +1 -1
  284. package/models/gridIconSlotsComponent.d.ts +10 -0
  285. package/models/gridStateCommunity.d.ts +0 -2
  286. package/models/index.d.ts +1 -1
  287. package/models/index.js +4 -3
  288. package/models/props/DataGridProps.d.ts +56 -28
  289. package/modern/DataGrid/DataGrid.js +35 -1
  290. package/modern/DataGrid/useDataGridProps.js +2 -1
  291. package/modern/colDef/gridActionsColDef.js +2 -1
  292. package/modern/colDef/gridBooleanColDef.js +2 -1
  293. package/modern/colDef/gridCheckboxSelectionColDef.js +1 -0
  294. package/modern/colDef/gridDateColDef.js +4 -2
  295. package/modern/colDef/gridNumericColDef.js +3 -2
  296. package/modern/colDef/gridNumericOperators.js +11 -0
  297. package/modern/colDef/gridSingleSelectColDef.js +3 -2
  298. package/modern/colDef/gridSingleSelectOperators.js +52 -0
  299. package/modern/colDef/gridStringColDef.js +3 -2
  300. package/modern/colDef/gridStringOperators.js +12 -0
  301. package/modern/components/GridFooter.js +11 -2
  302. package/modern/components/GridRow.js +9 -5
  303. package/modern/components/GridRowCount.js +1 -0
  304. package/modern/components/GridScrollArea.js +3 -4
  305. package/modern/components/GridSelectedRowCount.js +2 -1
  306. package/modern/components/base/GridBody.js +1 -2
  307. package/modern/components/base/GridOverlays.js +2 -3
  308. package/modern/components/cell/GridActionsCell.js +14 -3
  309. package/modern/components/cell/GridCell.js +8 -8
  310. package/modern/components/cell/GridEditBooleanCell.js +101 -6
  311. package/modern/components/cell/GridEditDateCell.js +99 -5
  312. package/modern/components/cell/GridEditInputCell.js +29 -5
  313. package/modern/components/cell/GridEditSingleSelectCell.js +28 -5
  314. package/modern/components/cell/index.js +2 -0
  315. package/modern/components/columnHeaders/GridColumnHeaderItem.js +15 -16
  316. package/modern/components/columnSelection/GridCellCheckboxRenderer.js +2 -3
  317. package/modern/components/columnSelection/GridHeaderCheckbox.js +4 -5
  318. package/modern/components/containers/GridFooterContainer.js +11 -2
  319. package/modern/components/containers/GridRoot.js +25 -3
  320. package/modern/components/containers/GridRootStyles.js +36 -1
  321. package/modern/components/containers/GridToolbarContainer.js +12 -2
  322. package/modern/components/menu/GridMenu.js +1 -0
  323. package/modern/components/panel/GridPanelContent.js +13 -2
  324. package/modern/components/panel/GridPanelFooter.js +13 -2
  325. package/modern/components/panel/GridPanelHeader.js +13 -2
  326. package/modern/components/toolbar/GridToolbar.js +30 -7
  327. package/modern/components/toolbar/GridToolbarExport.js +15 -20
  328. package/modern/components/toolbar/GridToolbarQuickFilter.js +85 -0
  329. package/modern/components/toolbar/index.js +3 -2
  330. package/modern/constants/defaultGridSlotsComponents.js +4 -2
  331. package/modern/constants/gridClasses.js +1 -1
  332. package/modern/constants/localeTextConstants.js +8 -1
  333. package/modern/hooks/core/pipeProcessing/useGridPipeProcessing.js +10 -9
  334. package/modern/hooks/core/strategyProcessing/useGridStrategyProcessing.js +6 -7
  335. package/modern/hooks/core/useGridApiInitialization.js +3 -3
  336. package/modern/hooks/core/useGridErrorHandler.js +1 -2
  337. package/modern/hooks/core/useGridStateInitialization.js +1 -2
  338. package/modern/hooks/features/columnHeaders/useGridColumnHeaders.js +5 -6
  339. package/modern/hooks/features/columnMenu/useGridColumnMenu.js +3 -3
  340. package/modern/hooks/features/columns/useGridColumnSpanning.js +1 -2
  341. package/modern/hooks/features/columns/useGridColumns.js +8 -9
  342. package/modern/hooks/features/dimensions/useGridDimensions.js +8 -9
  343. package/modern/hooks/features/editRows/useGridCellEditing.new.js +131 -32
  344. package/modern/hooks/features/editRows/useGridCellEditing.old.js +20 -21
  345. package/modern/hooks/features/editRows/useGridEditing.old.js +4 -5
  346. package/modern/hooks/features/editRows/useGridRowEditing.new.js +120 -42
  347. package/modern/hooks/features/editRows/useGridRowEditing.old.js +21 -22
  348. package/modern/hooks/features/events/useGridEvents.js +17 -18
  349. package/modern/hooks/features/export/serializers/csvSerializer.js +5 -5
  350. package/modern/hooks/features/export/useGridCsvExport.js +21 -16
  351. package/modern/hooks/features/export/useGridPrintExport.js +20 -0
  352. package/modern/hooks/features/export/utils.js +13 -0
  353. package/modern/hooks/features/filter/gridFilterState.js +3 -1
  354. package/modern/hooks/features/filter/gridFilterUtils.js +80 -2
  355. package/modern/hooks/features/filter/useGridFilter.js +20 -8
  356. package/modern/hooks/features/focus/useGridFocus.js +29 -33
  357. package/modern/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +4 -5
  358. package/modern/hooks/features/pagination/useGridPage.js +3 -4
  359. package/modern/hooks/features/pagination/useGridPageSize.js +2 -3
  360. package/modern/hooks/features/preferencesPanel/useGridPreferencesPanel.js +4 -6
  361. package/modern/hooks/features/rows/gridRowsSelector.js +1 -0
  362. package/modern/hooks/features/rows/gridRowsUtils.js +77 -1
  363. package/modern/hooks/features/rows/useGridRows.js +148 -128
  364. package/modern/hooks/features/rows/useGridRowsPreProcessors.js +2 -0
  365. package/modern/hooks/features/scroll/useGridScroll.js +6 -1
  366. package/modern/hooks/features/selection/useGridSelection.js +13 -10
  367. package/modern/hooks/features/sorting/useGridSorting.js +8 -9
  368. package/modern/hooks/features/virtualization/useGridVirtualScroller.js +14 -5
  369. package/modern/hooks/utils/useGridApiEventHandler.js +20 -9
  370. package/modern/hooks/utils/useGridNativeEventListener.js +1 -2
  371. package/modern/hooks/utils/useGridSelector.js +1 -1
  372. package/modern/index.js +1 -1
  373. package/modern/internals/index.js +5 -2
  374. package/modern/locales/arSD.js +8 -1
  375. package/modern/locales/bgBG.js +8 -1
  376. package/modern/locales/csCZ.js +7 -0
  377. package/modern/locales/daDK.js +8 -1
  378. package/modern/locales/deDE.js +10 -3
  379. package/modern/locales/elGR.js +7 -0
  380. package/modern/locales/esES.js +7 -0
  381. package/modern/locales/faIR.js +8 -1
  382. package/modern/locales/fiFI.js +7 -0
  383. package/modern/locales/frFR.js +7 -0
  384. package/modern/locales/heIL.js +8 -1
  385. package/modern/locales/huHU.js +8 -1
  386. package/modern/locales/itIT.js +7 -0
  387. package/modern/locales/jaJP.js +7 -0
  388. package/modern/locales/koKR.js +7 -0
  389. package/modern/locales/nlNL.js +7 -0
  390. package/modern/locales/plPL.js +8 -1
  391. package/modern/locales/ptBR.js +8 -1
  392. package/modern/locales/ruRU.js +7 -0
  393. package/modern/locales/skSK.js +7 -0
  394. package/modern/locales/trTR.js +8 -1
  395. package/modern/locales/ukUA.js +7 -0
  396. package/modern/locales/viVN.js +7 -0
  397. package/modern/locales/zhCN.js +7 -0
  398. package/modern/models/events/gridEvents.js +8 -0
  399. package/modern/models/index.js +4 -3
  400. package/modern/utils/createSelector.js +20 -2
  401. package/modern/utils/exportAs.js +1 -1
  402. package/node/DataGrid/DataGrid.js +35 -1
  403. package/node/DataGrid/useDataGridProps.js +2 -1
  404. package/node/colDef/gridActionsColDef.js +2 -1
  405. package/node/colDef/gridBooleanColDef.js +2 -1
  406. package/node/colDef/gridCheckboxSelectionColDef.js +1 -0
  407. package/node/colDef/gridDateColDef.js +4 -2
  408. package/node/colDef/gridNumericColDef.js +2 -1
  409. package/node/colDef/gridNumericOperators.js +15 -1
  410. package/node/colDef/gridSingleSelectColDef.js +2 -1
  411. package/node/colDef/gridSingleSelectOperators.js +56 -1
  412. package/node/colDef/gridStringColDef.js +2 -1
  413. package/node/colDef/gridStringOperators.js +16 -1
  414. package/node/components/GridFooter.js +10 -1
  415. package/node/components/GridRow.js +9 -6
  416. package/node/components/GridRowCount.js +1 -0
  417. package/node/components/GridScrollArea.js +3 -5
  418. package/node/components/GridSelectedRowCount.js +2 -1
  419. package/node/components/base/GridBody.js +1 -3
  420. package/node/components/base/GridOverlays.js +2 -4
  421. package/node/components/cell/GridActionsCell.js +13 -4
  422. package/node/components/cell/GridCell.js +7 -7
  423. package/node/components/cell/GridEditBooleanCell.js +100 -5
  424. package/node/components/cell/GridEditDateCell.js +98 -4
  425. package/node/components/cell/GridEditInputCell.js +29 -5
  426. package/node/components/cell/GridEditSingleSelectCell.js +28 -6
  427. package/node/components/cell/index.js +26 -0
  428. package/node/components/columnHeaders/GridColumnHeaderItem.js +15 -17
  429. package/node/components/columnSelection/GridCellCheckboxRenderer.js +2 -4
  430. package/node/components/columnSelection/GridHeaderCheckbox.js +4 -6
  431. package/node/components/containers/GridFooterContainer.js +10 -1
  432. package/node/components/containers/GridRoot.js +24 -3
  433. package/node/components/containers/GridRootStyles.js +36 -1
  434. package/node/components/containers/GridToolbarContainer.js +11 -1
  435. package/node/components/menu/GridMenu.js +1 -0
  436. package/node/components/panel/GridPanelContent.js +11 -1
  437. package/node/components/panel/GridPanelFooter.js +11 -1
  438. package/node/components/panel/GridPanelHeader.js +11 -1
  439. package/node/components/toolbar/GridToolbar.js +32 -7
  440. package/node/components/toolbar/GridToolbarExport.js +14 -19
  441. package/node/components/toolbar/GridToolbarQuickFilter.js +109 -0
  442. package/node/components/toolbar/index.js +42 -11
  443. package/node/constants/defaultGridSlotsComponents.js +3 -1
  444. package/node/constants/gridClasses.js +1 -1
  445. package/node/constants/localeTextConstants.js +8 -1
  446. package/node/hooks/core/pipeProcessing/useGridPipeProcessing.js +10 -8
  447. package/node/hooks/core/strategyProcessing/useGridStrategyProcessing.js +6 -8
  448. package/node/hooks/core/useGridApiInitialization.js +3 -4
  449. package/node/hooks/core/useGridErrorHandler.js +1 -3
  450. package/node/hooks/core/useGridStateInitialization.js +1 -3
  451. package/node/hooks/features/columnHeaders/useGridColumnHeaders.js +5 -7
  452. package/node/hooks/features/columnMenu/useGridColumnMenu.js +3 -4
  453. package/node/hooks/features/columns/useGridColumnSpanning.js +1 -3
  454. package/node/hooks/features/columns/useGridColumns.js +8 -10
  455. package/node/hooks/features/dimensions/useGridDimensions.js +8 -10
  456. package/node/hooks/features/editRows/useGridCellEditing.new.js +133 -32
  457. package/node/hooks/features/editRows/useGridCellEditing.old.js +20 -22
  458. package/node/hooks/features/editRows/useGridEditing.old.js +4 -6
  459. package/node/hooks/features/editRows/useGridRowEditing.new.js +122 -43
  460. package/node/hooks/features/editRows/useGridRowEditing.old.js +21 -23
  461. package/node/hooks/features/events/useGridEvents.js +17 -19
  462. package/node/hooks/features/export/serializers/csvSerializer.js +5 -5
  463. package/node/hooks/features/export/useGridCsvExport.js +26 -17
  464. package/node/hooks/features/export/useGridPrintExport.js +25 -0
  465. package/node/hooks/features/export/utils.js +19 -2
  466. package/node/hooks/features/filter/gridFilterState.js +3 -1
  467. package/node/hooks/features/filter/gridFilterUtils.js +92 -3
  468. package/node/hooks/features/filter/useGridFilter.js +21 -9
  469. package/node/hooks/features/focus/useGridFocus.js +29 -34
  470. package/node/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +4 -6
  471. package/node/hooks/features/pagination/useGridPage.js +3 -5
  472. package/node/hooks/features/pagination/useGridPageSize.js +2 -4
  473. package/node/hooks/features/preferencesPanel/useGridPreferencesPanel.js +4 -8
  474. package/node/hooks/features/rows/gridRowsSelector.js +3 -1
  475. package/node/hooks/features/rows/gridRowsUtils.js +95 -1
  476. package/node/hooks/features/rows/useGridRows.js +150 -126
  477. package/node/hooks/features/rows/useGridRowsPreProcessors.js +2 -0
  478. package/node/hooks/features/scroll/useGridScroll.js +6 -1
  479. package/node/hooks/features/selection/useGridSelection.js +13 -11
  480. package/node/hooks/features/sorting/useGridSorting.js +8 -10
  481. package/node/hooks/features/virtualization/useGridVirtualScroller.js +14 -6
  482. package/node/hooks/utils/useGridApiEventHandler.js +22 -10
  483. package/node/hooks/utils/useGridNativeEventListener.js +1 -3
  484. package/node/hooks/utils/useGridSelector.js +1 -1
  485. package/node/index.js +1 -1
  486. package/node/internals/index.js +39 -3
  487. package/node/locales/arSD.js +8 -1
  488. package/node/locales/bgBG.js +8 -1
  489. package/node/locales/csCZ.js +7 -0
  490. package/node/locales/daDK.js +8 -1
  491. package/node/locales/deDE.js +10 -3
  492. package/node/locales/elGR.js +7 -0
  493. package/node/locales/esES.js +7 -0
  494. package/node/locales/faIR.js +8 -1
  495. package/node/locales/fiFI.js +7 -0
  496. package/node/locales/frFR.js +7 -0
  497. package/node/locales/heIL.js +8 -1
  498. package/node/locales/huHU.js +8 -1
  499. package/node/locales/itIT.js +7 -0
  500. package/node/locales/jaJP.js +7 -0
  501. package/node/locales/koKR.js +7 -0
  502. package/node/locales/nlNL.js +7 -0
  503. package/node/locales/plPL.js +8 -1
  504. package/node/locales/ptBR.js +8 -1
  505. package/node/locales/ruRU.js +7 -0
  506. package/node/locales/skSK.js +7 -0
  507. package/node/locales/trTR.js +8 -1
  508. package/node/locales/ukUA.js +7 -0
  509. package/node/locales/viVN.js +7 -0
  510. package/node/locales/zhCN.js +7 -0
  511. package/node/models/events/gridEvents.js +8 -0
  512. package/node/models/index.js +0 -13
  513. package/node/utils/createSelector.js +25 -4
  514. package/node/utils/exportAs.js +1 -1
  515. package/package.json +3 -2
  516. package/utils/createSelector.d.ts +2 -1
  517. package/utils/createSelector.js +20 -2
  518. package/utils/exportAs.d.ts +2 -2
  519. package/utils/exportAs.js +1 -1
@@ -46,30 +46,27 @@ export const useGridPipeProcessing = apiRef => {
46
46
  const registerPipeProcessor = React.useCallback((group, id, processor) => {
47
47
  if (!processorsCache.current[group]) {
48
48
  processorsCache.current[group] = {
49
- processors: {},
49
+ processors: new Map(),
50
50
  appliers: {}
51
51
  };
52
52
  }
53
53
 
54
54
  const groupCache = processorsCache.current[group];
55
- const oldProcessor = groupCache.processors[id];
55
+ const oldProcessor = groupCache.processors.get(id);
56
56
 
57
57
  if (oldProcessor !== processor) {
58
- groupCache.processors[id] = processor;
58
+ groupCache.processors.set(id, processor);
59
59
  runAppliers(groupCache);
60
60
  }
61
61
 
62
62
  return () => {
63
- const _processors = processorsCache.current[group].processors,
64
- otherProcessors = _objectWithoutPropertiesLoose(_processors, [id].map(_toPropertyKey));
65
-
66
- processorsCache.current[group].processors = otherProcessors;
63
+ processorsCache.current[group].processors.set(id, null);
67
64
  };
68
65
  }, [runAppliers]);
69
66
  const registerPipeApplier = React.useCallback((group, id, applier) => {
70
67
  if (!processorsCache.current[group]) {
71
68
  processorsCache.current[group] = {
72
- processors: {},
69
+ processors: new Map(),
73
70
  appliers: {}
74
71
  };
75
72
  }
@@ -93,8 +90,12 @@ export const useGridPipeProcessing = apiRef => {
93
90
  return value;
94
91
  }
95
92
 
96
- const preProcessors = Object.values(processorsCache.current[group].processors);
93
+ const preProcessors = Array.from(processorsCache.current[group].processors.values());
97
94
  return preProcessors.reduce((acc, preProcessor) => {
95
+ if (!preProcessor) {
96
+ return acc;
97
+ }
98
+
98
99
  return preProcessor(acc, context);
99
100
  }, value);
100
101
  }, []);
@@ -2,7 +2,6 @@ import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWith
2
2
  import _toPropertyKey from "@babel/runtime/helpers/esm/toPropertyKey";
3
3
  import * as React from 'react';
4
4
  import { useGridApiMethod } from '../../utils/useGridApiMethod';
5
- import { GridEvents } from '../../../models/events';
6
5
  export const GRID_DEFAULT_STRATEGY = 'none';
7
6
  export const GRID_STRATEGIES_PROCESSORS = {
8
7
  rowTreeCreation: 'rowTree',
@@ -25,7 +24,7 @@ export const GRID_STRATEGIES_PROCESSORS = {
25
24
  * The plugin containing the custom logic must use:
26
25
  *
27
26
  * - `useGridRegisterStrategyProcessor` to register their processor.
28
- * When the processor of the active strategy changes, it will fire `GridEvents.activeStrategyProcessorChange` to re-apply the processor.
27
+ * When the processor of the active strategy changes, it will fire `"activeStrategyProcessorChange"` to re-apply the processor.
29
28
  *
30
29
  * - `apiRef.current.unstable_setStrategyAvailability` to tell if their strategy can be used.
31
30
  *
@@ -35,12 +34,12 @@ export const GRID_STRATEGIES_PROCESSORS = {
35
34
  *
36
35
  * - `apiRef.current.unstable_applyStrategyProcessor` to run the processor of the active strategy for a given processor name.
37
36
  *
38
- * - `GridEvents.strategyAvailabilityChange` to update something when the active strategy changes.
37
+ * - the "strategyAvailabilityChange" event to update something when the active strategy changes.
39
38
  * Warning: Be careful not to apply the processor several times.
40
- * For instance `GridEvents.rowsSet` is fired by `useGridRows` whenever the active strategy changes.
39
+ * For instance "rowsSet" is fired by `useGridRows` whenever the active strategy changes.
41
40
  * So listening to both would most likely run your logic twice.
42
41
  *
43
- * - `GridEvents.activeStrategyProcessorChange` to update something when the processor of the active strategy changes.
42
+ * - The "activeStrategyProcessorChange" event to update something when the processor of the active strategy changes.
44
43
  *
45
44
  * =====================================================================================================================
46
45
  *
@@ -74,7 +73,7 @@ export const useGridStrategyProcessing = apiRef => {
74
73
  }
75
74
 
76
75
  if (strategyName === apiRef.current.unstable_getActiveStrategy(GRID_STRATEGIES_PROCESSORS[processorName])) {
77
- apiRef.current.publishEvent(GridEvents.activeStrategyProcessorChange, processorName);
76
+ apiRef.current.publishEvent('activeStrategyProcessorChange', processorName);
78
77
  }
79
78
 
80
79
  return cleanup;
@@ -111,7 +110,7 @@ export const useGridStrategyProcessing = apiRef => {
111
110
  group: strategyGroup,
112
111
  isAvailable
113
112
  });
114
- apiRef.current.publishEvent(GridEvents.strategyAvailabilityChange);
113
+ apiRef.current.publishEvent('strategyAvailabilityChange');
115
114
  }, [apiRef]);
116
115
  const strategyProcessingApi = {
117
116
  unstable_registerStrategyProcessor: registerStrategyProcessor,
@@ -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,6 +77,7 @@ export const useGridColumnMenu = apiRef => {
78
77
  * EVENTS
79
78
  */
80
79
 
81
- useGridApiEventHandler(apiRef, GridEvents.columnResizeStart, hideColumnMenu);
82
- useGridApiEventHandler(apiRef, GridEvents.rowsScroll, hideColumnMenu);
80
+ useGridApiEventHandler(apiRef, 'columnResizeStart', hideColumnMenu);
81
+ useGridApiEventHandler(apiRef, 'virtualScrollerWheel', apiRef.current.hideColumnMenu);
82
+ useGridApiEventHandler(apiRef, 'virtualScrollerTouchMove', apiRef.current.hideColumnMenu);
83
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';
@@ -47,13 +46,13 @@ export function useGridColumns(apiRef, props) {
47
46
  propModel: props.columnVisibilityModel,
48
47
  propOnChange: props.onColumnVisibilityModelChange,
49
48
  stateSelector: gridColumnVisibilityModelSelector,
50
- changeEvent: GridEvents.columnVisibilityModelChange
49
+ changeEvent: 'columnVisibilityModelChange'
51
50
  });
52
51
  const setGridColumnsState = React.useCallback(columnsState => {
53
52
  logger.debug('Updating columns state.');
54
53
  apiRef.current.setState(mergeColumnsState(columnsState));
55
54
  apiRef.current.forceUpdate();
56
- apiRef.current.publishEvent(GridEvents.columnsChange, columnsState.all);
55
+ apiRef.current.publishEvent('columnsChange', columnsState.all);
57
56
  }, [logger, apiRef]);
58
57
  /**
59
58
  * API METHODS
@@ -129,7 +128,7 @@ export function useGridColumns(apiRef, props) {
129
128
  colDef: newColumn,
130
129
  isVisible
131
130
  };
132
- apiRef.current.publishEvent(GridEvents.columnVisibilityChange, params);
131
+ apiRef.current.publishEvent('columnVisibilityChange', params);
133
132
  }
134
133
  }, [apiRef]);
135
134
  const setColumnIndex = React.useCallback((field, targetIndexPosition) => {
@@ -153,7 +152,7 @@ export function useGridColumns(apiRef, props) {
153
152
  targetIndex: targetIndexPosition,
154
153
  oldIndex: oldIndexPosition
155
154
  };
156
- apiRef.current.publishEvent(GridEvents.columnOrderChange, params);
155
+ apiRef.current.publishEvent('columnOrderChange', params);
157
156
  }, [apiRef, logger, setGridColumnsState]);
158
157
  const setColumnWidth = React.useCallback((field, width) => {
159
158
  logger.debug(`Updating column ${field} width to ${width}`);
@@ -164,7 +163,7 @@ export function useGridColumns(apiRef, props) {
164
163
  });
165
164
 
166
165
  apiRef.current.updateColumns([newColumn]);
167
- apiRef.current.publishEvent(GridEvents.columnWidthChange, {
166
+ apiRef.current.publishEvent('columnWidthChange', {
168
167
  element: apiRef.current.getColumnHeaderElement(field),
169
168
  colDef: newColumn,
170
169
  width
@@ -248,7 +247,7 @@ export function useGridColumns(apiRef, props) {
248
247
  apiRef.current.setState(mergeColumnsState(columnsState));
249
248
 
250
249
  if (initialState != null) {
251
- apiRef.current.publishEvent(GridEvents.columnsChange, columnsState.all);
250
+ apiRef.current.publishEvent('columnsChange', columnsState.all);
252
251
  }
253
252
 
254
253
  return params;
@@ -277,8 +276,8 @@ export function useGridColumns(apiRef, props) {
277
276
  }
278
277
  };
279
278
 
280
- useGridApiEventHandler(apiRef, GridEvents.viewportInnerSizeChange, handleGridSizeChange);
281
- useGridApiOptionHandler(apiRef, GridEvents.columnVisibilityChange, props.onColumnVisibilityChange);
279
+ useGridApiEventHandler(apiRef, 'viewportInnerSizeChange', handleGridSizeChange);
280
+ useGridApiOptionHandler(apiRef, 'columnVisibilityChange', props.onColumnVisibilityChange);
282
281
  /**
283
282
  * APPLIERS
284
283
  */
@@ -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
 
@@ -247,18 +321,16 @@ export const useGridCellEditing = (apiRef, props) => {
247
321
  const row = apiRef.current.getRow(id);
248
322
  Promise.resolve(processRowUpdate(rowUpdate, row)).then(finalRowUpdate => {
249
323
  apiRef.current.updateRows([finalRowUpdate]);
250
- updateFocusedCellIfNeeded();
251
- updateOrDeleteFieldState(id, field, null);
324
+ finishCellEditMode();
252
325
  }).catch(handleError);
253
326
  } catch (errorThrown) {
254
327
  handleError(errorThrown);
255
328
  }
256
329
  } else {
257
330
  apiRef.current.updateRows([rowUpdate]);
258
- updateFocusedCellIfNeeded();
259
- updateOrDeleteFieldState(id, field, null);
331
+ finishCellEditMode();
260
332
  }
261
- }, [apiRef, onProcessRowUpdateError, processRowUpdate, throwIfNotInMode, updateOrDeleteFieldState]);
333
+ }, [apiRef, onProcessRowUpdateError, processRowUpdate, throwIfNotInMode, updateFieldInCellModesModel, updateOrDeleteFieldState]);
262
334
  const setCellEditingEditCellValue = React.useCallback(async params => {
263
335
  const {
264
336
  id,
@@ -335,4 +407,31 @@ export const useGridCellEditing = (apiRef, props) => {
335
407
  unstable_getRowWithUpdatedValuesFromCellEditing: getRowWithUpdatedValuesFromCellEditing
336
408
  };
337
409
  useGridApiMethod(apiRef, editingApi, 'EditingApi');
410
+ React.useEffect(() => {
411
+ if (cellModesModelProp) {
412
+ updateCellModesModel(cellModesModelProp);
413
+ }
414
+ }, [cellModesModelProp, updateCellModesModel]);
415
+ React.useEffect(() => {
416
+ const idToIdLookup = gridRowsIdToIdLookupSelector(apiRef);
417
+ Object.entries(cellModesModel).forEach(([id, fields]) => {
418
+ Object.entries(fields).forEach(([field, params]) => {
419
+ const prevMode = prevCellModesModel.current[id]?.[field]?.mode || GridCellModes.View;
420
+ const originalId = idToIdLookup[id] ?? id;
421
+
422
+ if (params.mode === GridCellModes.Edit && prevMode === GridCellModes.View) {
423
+ updateStateToStartCellEditMode(_extends({
424
+ id: originalId,
425
+ field
426
+ }, params));
427
+ } else if (params.mode === GridCellModes.View && prevMode === GridCellModes.Edit) {
428
+ updateStateToStopCellEditMode(_extends({
429
+ id: originalId,
430
+ field
431
+ }, params));
432
+ }
433
+ });
434
+ });
435
+ prevCellModesModel.current = cellModesModel;
436
+ }, [apiRef, cellModesModel, updateStateToStartCellEditMode, updateStateToStopCellEditMode]);
338
437
  };