@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
@@ -11,4 +11,12 @@ export declare const mergeStateWithFilterModel: (filterModel: GridFilterModel, d
11
11
  * @param {React.MutableRefObject<GridApiCommunity>} apiRef The API of the grid.
12
12
  * @returns {GridAggregatedFilterItemApplier | null} A method that checks if a row is matching the current filter model. If `null`, we consider that all the rows are matching the filters.
13
13
  */
14
+ export declare const buildAggregatedFilterItemsApplier: (filterModel: GridFilterModel, apiRef: React.MutableRefObject<GridApiCommunity>) => GridAggregatedFilterItemApplier | null;
15
+ /**
16
+ * Generates a method to easily check if a row is matching the current quick filter.
17
+ * @param {any[]} values The model with which we want to filter the rows.
18
+ * @param {React.MutableRefObject<GridApiCommunity>} apiRef The API of the grid.
19
+ * @returns {GridAggregatedFilterItemApplier | null} A method that checks if a row is matching the current filter model. If `null`, we consider that all the rows are matching the filters.
20
+ */
21
+ export declare const buildAggregatedQuickFilterApplier: (filterModel: GridFilterModel, apiRef: React.MutableRefObject<GridApiCommunity>) => GridAggregatedFilterItemApplier | null;
14
22
  export declare const buildAggregatedFilterApplier: (filterModel: GridFilterModel, apiRef: React.MutableRefObject<GridApiCommunity>) => GridAggregatedFilterItemApplier | null;
@@ -1,6 +1,7 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import { GridLinkOperator } from '../../../models';
3
3
  import { buildWarning } from '../../../utils/warning';
4
+ import { gridColumnFieldsSelector } from '../columns';
4
5
 
5
6
  /**
6
7
  * Adds default values to the optional fields of a filter items.
@@ -76,7 +77,7 @@ export const mergeStateWithFilterModel = (filterModel, disableMultipleColumnsFil
76
77
  * @returns {GridAggregatedFilterItemApplier | null} A method that checks if a row is matching the current filter model. If `null`, we consider that all the rows are matching the filters.
77
78
  */
78
79
 
79
- export const buildAggregatedFilterApplier = (filterModel, apiRef) => {
80
+ export const buildAggregatedFilterItemsApplier = (filterModel, apiRef) => {
80
81
  const {
81
82
  items,
82
83
  linkOperator = GridLinkOperator.And
@@ -144,7 +145,7 @@ export const buildAggregatedFilterApplier = (filterModel, apiRef) => {
144
145
  }
145
146
 
146
147
  return (rowId, shouldApplyFilter) => {
147
- const filteredAppliers = shouldApplyFilter ? appliers.filter(applier => shouldApplyFilter(applier.item)) : appliers; // Return `false` as soon as we have a failing filter
148
+ const filteredAppliers = shouldApplyFilter ? appliers.filter(applier => shouldApplyFilter(applier.item.columnField)) : appliers; // Return `false` as soon as we have a failing filter
148
149
 
149
150
  if (linkOperator === GridLinkOperator.And) {
150
151
  return filteredAppliers.every(applier => applier.fn(rowId));
@@ -153,4 +154,85 @@ export const buildAggregatedFilterApplier = (filterModel, apiRef) => {
153
154
 
154
155
  return filteredAppliers.some(applier => applier.fn(rowId));
155
156
  };
157
+ };
158
+ /**
159
+ * Generates a method to easily check if a row is matching the current quick filter.
160
+ * @param {any[]} values The model with which we want to filter the rows.
161
+ * @param {React.MutableRefObject<GridApiCommunity>} apiRef The API of the grid.
162
+ * @returns {GridAggregatedFilterItemApplier | null} A method that checks if a row is matching the current filter model. If `null`, we consider that all the rows are matching the filters.
163
+ */
164
+
165
+ export const buildAggregatedQuickFilterApplier = (filterModel, apiRef) => {
166
+ const {
167
+ quickFilterValues = [],
168
+ quickFilterLogicOperator = GridLinkOperator.And
169
+ } = filterModel;
170
+
171
+ if (quickFilterValues.length === 0) {
172
+ return null;
173
+ }
174
+
175
+ const columnsFields = gridColumnFieldsSelector(apiRef);
176
+ const appliersPerColumnField = {};
177
+ columnsFields.forEach(field => {
178
+ const column = apiRef.current.getColumn(field);
179
+ const getApplyQuickFilterFn = column == null ? void 0 : column.getApplyQuickFilterFn;
180
+
181
+ if (!getApplyQuickFilterFn) {
182
+ return;
183
+ }
184
+
185
+ appliersPerColumnField[field] = quickFilterValues.map(value => getApplyQuickFilterFn(value, column, apiRef));
186
+ }); // If some value does not have an applier we ignore them
187
+
188
+ const sanitizedQuickFilterValues = quickFilterValues.filter((value, index) => Object.keys(appliersPerColumnField).some(field => appliersPerColumnField[field][index] != null));
189
+ return (rowId, shouldApplyFilter) => {
190
+ const usedCellParams = {};
191
+ Object.keys(appliersPerColumnField).forEach(columnField => {
192
+ if (!shouldApplyFilter || shouldApplyFilter(columnField)) {
193
+ usedCellParams[columnField] = apiRef.current.getCellParams(rowId, columnField);
194
+ }
195
+ }); // Return `false` as soon as we have a quick filter value that does not match any column
196
+
197
+ if (quickFilterLogicOperator === GridLinkOperator.And) {
198
+ return sanitizedQuickFilterValues.every((value, index) => Object.keys(appliersPerColumnField).some(field => {
199
+ var _appliersPerColumnFie, _appliersPerColumnFie2;
200
+
201
+ if (appliersPerColumnField[field][index] == null) {
202
+ return false;
203
+ }
204
+
205
+ return (_appliersPerColumnFie = (_appliersPerColumnFie2 = appliersPerColumnField[field])[index]) == null ? void 0 : _appliersPerColumnFie.call(_appliersPerColumnFie2, usedCellParams[field]);
206
+ }));
207
+ } // Return `true` as soon as we have have a quick filter value that match any column
208
+
209
+
210
+ return sanitizedQuickFilterValues.some((value, index) => Object.keys(appliersPerColumnField).some(field => {
211
+ var _appliersPerColumnFie3, _appliersPerColumnFie4;
212
+
213
+ if (appliersPerColumnField[field][index] == null) {
214
+ return false;
215
+ }
216
+
217
+ return (_appliersPerColumnFie3 = (_appliersPerColumnFie4 = appliersPerColumnField[field])[index]) == null ? void 0 : _appliersPerColumnFie3.call(_appliersPerColumnFie4, usedCellParams[field]);
218
+ }));
219
+ };
220
+ };
221
+ export const buildAggregatedFilterApplier = (filterModel, apiRef) => {
222
+ const isRowMatchingFilterItems = buildAggregatedFilterItemsApplier(filterModel, apiRef);
223
+ const isRowMatchingQuickFilter = buildAggregatedQuickFilterApplier(filterModel, apiRef);
224
+
225
+ if (isRowMatchingFilterItems == null && isRowMatchingQuickFilter == null) {
226
+ return null;
227
+ }
228
+
229
+ if (isRowMatchingFilterItems == null) {
230
+ return isRowMatchingQuickFilter;
231
+ }
232
+
233
+ if (isRowMatchingQuickFilter == null) {
234
+ return isRowMatchingFilterItems;
235
+ }
236
+
237
+ return (rowId, shouldApplyFilter) => isRowMatchingFilterItems(rowId, shouldApplyFilter) && isRowMatchingQuickFilter(rowId, shouldApplyFilter);
156
238
  };
@@ -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 { GridFeatureModeConstant } from '../../../models/gridFeatureMode';
5
4
  import { useGridApiEventHandler } from '../../utils/useGridApiEventHandler';
6
5
  import { useGridApiMethod } from '../../utils/useGridApiMethod';
@@ -14,6 +13,7 @@ import { gridRowIdsSelector } from '../rows';
14
13
  import { useGridRegisterPipeProcessor } from '../../core/pipeProcessing';
15
14
  import { GRID_DEFAULT_STRATEGY, useGridRegisterStrategyProcessor } from '../../core/strategyProcessing';
16
15
  import { buildAggregatedFilterApplier, sanitizeFilterModel, mergeStateWithFilterModel } from './gridFilterUtils';
16
+ import { isDeepEqual } from '../../../utils/utils';
17
17
  import { jsx as _jsx } from "react/jsx-runtime";
18
18
  export const filterStateInitializer = (state, props, apiRef) => {
19
19
  var _ref, _props$filterModel, _props$initialState, _props$initialState$f;
@@ -42,7 +42,7 @@ export const useGridFilter = (apiRef, props) => {
42
42
  propModel: props.filterModel,
43
43
  propOnChange: props.onFilterModelChange,
44
44
  stateSelector: gridFilterModelSelector,
45
- changeEvent: GridEvents.filterModelChange
45
+ changeEvent: 'filterModelChange'
46
46
  });
47
47
  const updateFilteredRows = React.useCallback(() => {
48
48
  apiRef.current.setState(state => {
@@ -55,7 +55,7 @@ export const useGridFilter = (apiRef, props) => {
55
55
  filter: _extends({}, state.filter, filteringResult)
56
56
  });
57
57
  });
58
- apiRef.current.publishEvent(GridEvents.filteredRowsSet);
58
+ apiRef.current.publishEvent('filteredRowsSet');
59
59
  }, [props.filterMode, apiRef]);
60
60
  /**
61
61
  * API METHODS
@@ -135,6 +135,17 @@ export const useGridFilter = (apiRef, props) => {
135
135
  linkOperator
136
136
  }));
137
137
  }, [apiRef]);
138
+ const setQuickFilterValues = React.useCallback(values => {
139
+ const filterModel = gridFilterModelSelector(apiRef);
140
+
141
+ if (isDeepEqual(filterModel.quickFilterValues, values)) {
142
+ return;
143
+ }
144
+
145
+ apiRef.current.setFilterModel(_extends({}, filterModel, {
146
+ quickFilterValues: [...values]
147
+ }));
148
+ }, [apiRef]);
138
149
  const setFilterModel = React.useCallback(model => {
139
150
  const currentModel = gridFilterModelSelector(apiRef);
140
151
 
@@ -156,7 +167,8 @@ export const useGridFilter = (apiRef, props) => {
156
167
  setFilterModel,
157
168
  showFilterPanel,
158
169
  hideFilterPanel,
159
- getVisibleRowModels
170
+ getVisibleRowModels,
171
+ setQuickFilterValues
160
172
  };
161
173
  useGridApiMethod(apiRef, filterApi, 'GridFilterApi');
162
174
  /**
@@ -251,10 +263,10 @@ export const useGridFilter = (apiRef, props) => {
251
263
  }, [apiRef]); // Do not call `apiRef.current.forceUpdate` to avoid re-render before updating the sorted rows.
252
264
  // Otherwise, the state is not consistent during the render
253
265
 
254
- useGridApiEventHandler(apiRef, GridEvents.rowsSet, updateFilteredRows);
255
- useGridApiEventHandler(apiRef, GridEvents.rowExpansionChange, apiRef.current.unstable_applyFilters);
256
- useGridApiEventHandler(apiRef, GridEvents.columnsChange, handleColumnsChange);
257
- useGridApiEventHandler(apiRef, GridEvents.activeStrategyProcessorChange, handleStrategyProcessorChange);
266
+ useGridApiEventHandler(apiRef, 'rowsSet', updateFilteredRows);
267
+ useGridApiEventHandler(apiRef, 'rowExpansionChange', apiRef.current.unstable_applyFilters);
268
+ useGridApiEventHandler(apiRef, 'columnsChange', handleColumnsChange);
269
+ useGridApiEventHandler(apiRef, 'activeStrategyProcessorChange', handleStrategyProcessorChange);
258
270
  /**
259
271
  * 1ST RENDER
260
272
  */
@@ -8,4 +8,4 @@ export declare const focusStateInitializer: GridStateInitializer;
8
8
  * @requires useGridRows (method)
9
9
  * @requires useGridEditing (event)
10
10
  */
11
- export declare const useGridFocus: (apiRef: React.MutableRefObject<GridApiCommunity>, props: Pick<DataGridProcessedProps, 'rows' | 'pagination' | 'paginationMode'>) => void;
11
+ export declare const useGridFocus: (apiRef: React.MutableRefObject<GridApiCommunity>, props: Pick<DataGridProcessedProps, 'pagination' | 'paginationMode'>) => void;
@@ -1,7 +1,6 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import * as React from 'react';
3
3
  import { ownerDocument } from '@mui/material/utils';
4
- import { GridEvents } from '../../../models/events';
5
4
  import { useGridApiMethod } from '../../utils/useGridApiMethod';
6
5
  import { useGridLogger } from '../../utils/useGridLogger';
7
6
  import { useGridApiEventHandler } from '../../utils/useGridApiEventHandler';
@@ -30,14 +29,9 @@ export const useGridFocus = (apiRef, props) => {
30
29
  const logger = useGridLogger(apiRef, 'useGridFocus');
31
30
  const lastClickedCell = React.useRef(null);
32
31
  const setCellFocus = React.useCallback((id, field) => {
33
- // The row might have been deleted
34
- if (!apiRef.current.getRow(id)) {
35
- return;
36
- }
37
-
38
32
  const focusedCell = gridFocusCellSelector(apiRef);
39
33
 
40
- if ((focusedCell == null ? void 0 : focusedCell.id) === id && focusedCell.field === field) {
34
+ if ((focusedCell == null ? void 0 : focusedCell.id) === id && (focusedCell == null ? void 0 : focusedCell.field) === field) {
41
35
  return;
42
36
  }
43
37
 
@@ -60,14 +54,19 @@ export const useGridFocus = (apiRef, props) => {
60
54
  }
61
55
  });
62
56
  });
63
- apiRef.current.forceUpdate();
64
- apiRef.current.publishEvent(GridEvents.cellFocusIn, apiRef.current.getCellParams(id, field));
57
+ apiRef.current.forceUpdate(); // The row might have been deleted
58
+
59
+ if (!apiRef.current.getRow(id)) {
60
+ return;
61
+ }
62
+
63
+ apiRef.current.publishEvent('cellFocusIn', apiRef.current.getCellParams(id, field));
65
64
  }, [apiRef, logger]);
66
65
  const setColumnHeaderFocus = React.useCallback((field, event = {}) => {
67
66
  const cell = gridFocusCellSelector(apiRef);
68
67
 
69
68
  if (cell) {
70
- apiRef.current.publishEvent(GridEvents.cellFocusOut, apiRef.current.getCellParams(cell.id, cell.field), event);
69
+ apiRef.current.publishEvent('cellFocusOut', apiRef.current.getCellParams(cell.id, cell.field), event);
71
70
  }
72
71
 
73
72
  apiRef.current.setState(state => {
@@ -196,7 +195,7 @@ export const useGridFocus = (apiRef, props) => {
196
195
  // Publishes an event to notify that the focus was lost
197
196
 
198
197
 
199
- apiRef.current.publishEvent(GridEvents.cellFocusOut, apiRef.current.getCellParams(focusedCell.id, focusedCell.field), event);
198
+ apiRef.current.publishEvent('cellFocusOut', apiRef.current.getCellParams(focusedCell.id, focusedCell.field), event);
200
199
 
201
200
  if (cellParams) {
202
201
  apiRef.current.setCellFocus(cellParams.id, cellParams.field);
@@ -221,27 +220,23 @@ export const useGridFocus = (apiRef, props) => {
221
220
  apiRef.current.setCellFocus(params.id, params.field);
222
221
  }
223
222
  }, [apiRef]);
223
+ const handleRowSet = React.useCallback(() => {
224
+ const cell = gridFocusCellSelector(apiRef); // If the focused cell is in a row which does not exist anymore, then remove the focus
225
+
226
+ if (cell && !apiRef.current.getRow(cell.id)) {
227
+ apiRef.current.setState(state => _extends({}, state, {
228
+ focus: {
229
+ cell: null,
230
+ columnHeader: null
231
+ }
232
+ }));
233
+ }
234
+ }, [apiRef]);
224
235
  useGridApiMethod(apiRef, {
225
236
  setCellFocus,
226
237
  setColumnHeaderFocus,
227
238
  unstable_moveFocusToRelativeCell: moveFocusToRelativeCell
228
239
  }, 'GridFocusApi');
229
- React.useEffect(() => {
230
- const cell = gridFocusCellSelector(apiRef);
231
-
232
- if (cell) {
233
- const updatedRow = apiRef.current.getRow(cell.id);
234
-
235
- if (!updatedRow) {
236
- apiRef.current.setState(state => _extends({}, state, {
237
- focus: {
238
- cell: null,
239
- columnHeader: null
240
- }
241
- }));
242
- }
243
- }
244
- }, [apiRef, props.rows]);
245
240
  React.useEffect(() => {
246
241
  const doc = ownerDocument(apiRef.current.rootElementRef.current);
247
242
  doc.addEventListener('click', handleDocumentClick);
@@ -249,10 +244,11 @@ export const useGridFocus = (apiRef, props) => {
249
244
  doc.removeEventListener('click', handleDocumentClick);
250
245
  };
251
246
  }, [apiRef, handleDocumentClick]);
252
- useGridApiEventHandler(apiRef, GridEvents.columnHeaderBlur, handleBlur);
253
- useGridApiEventHandler(apiRef, GridEvents.cellDoubleClick, handleCellDoubleClick);
254
- useGridApiEventHandler(apiRef, GridEvents.cellMouseUp, handleCellMouseUp);
255
- useGridApiEventHandler(apiRef, GridEvents.cellKeyDown, handleCellKeyDown);
256
- useGridApiEventHandler(apiRef, GridEvents.cellModeChange, handleCellModeChange);
257
- useGridApiEventHandler(apiRef, GridEvents.columnHeaderFocus, handleColumnHeaderFocus);
247
+ useGridApiEventHandler(apiRef, 'columnHeaderBlur', handleBlur);
248
+ useGridApiEventHandler(apiRef, 'cellDoubleClick', handleCellDoubleClick);
249
+ useGridApiEventHandler(apiRef, 'cellMouseUp', handleCellMouseUp);
250
+ useGridApiEventHandler(apiRef, 'cellKeyDown', handleCellKeyDown);
251
+ useGridApiEventHandler(apiRef, 'cellModeChange', handleCellModeChange);
252
+ useGridApiEventHandler(apiRef, 'columnHeaderFocus', handleColumnHeaderFocus);
253
+ useGridApiEventHandler(apiRef, 'rowsSet', handleRowSet);
258
254
  };
@@ -1,5 +1,4 @@
1
1
  import * as React from 'react';
2
- import { GridEvents } from '../../../models/events';
3
2
  import { gridVisibleColumnDefinitionsSelector } from '../columns/gridColumnsSelector';
4
3
  import { useGridLogger } from '../../utils/useGridLogger';
5
4
  import { useGridApiEventHandler } from '../../utils/useGridApiEventHandler';
@@ -316,10 +315,10 @@ export const useGridKeyboardNavigation = (apiRef, props) => {
316
315
  const cellParams = apiRef.current.getCellParams(params.id, params.field);
317
316
 
318
317
  if (cellParams.cellMode !== GridCellModes.Edit && isNavigationKey(event.key)) {
319
- apiRef.current.publishEvent(GridEvents.cellNavigationKeyDown, cellParams, event);
318
+ apiRef.current.publishEvent('cellNavigationKeyDown', cellParams, event);
320
319
  }
321
320
  }, [apiRef]);
322
- useGridApiEventHandler(apiRef, GridEvents.cellNavigationKeyDown, handleCellNavigationKeyDown);
323
- useGridApiEventHandler(apiRef, GridEvents.columnHeaderKeyDown, handleColumnHeaderKeyDown);
324
- useGridApiEventHandler(apiRef, GridEvents.cellKeyDown, handleCellKeyDown);
321
+ useGridApiEventHandler(apiRef, 'cellNavigationKeyDown', handleCellNavigationKeyDown);
322
+ useGridApiEventHandler(apiRef, 'columnHeaderKeyDown', handleColumnHeaderKeyDown);
323
+ useGridApiEventHandler(apiRef, 'cellKeyDown', handleCellKeyDown);
325
324
  };
@@ -1,7 +1,6 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import * as React from 'react';
3
3
  import { useGridLogger, useGridSelector, useGridApiMethod, useGridApiEventHandler } from '../../utils';
4
- import { GridEvents } from '../../../models/events';
5
4
  import { gridVisibleTopLevelRowCountSelector } from '../filter';
6
5
  import { gridPageSelector, gridPageSizeSelector } from './gridPaginationSelector';
7
6
  import { useGridRegisterPipeProcessor } from '../../core/pipeProcessing';
@@ -45,7 +44,7 @@ export const useGridPage = (apiRef, props) => {
45
44
  propModel: props.page,
46
45
  propOnChange: props.onPageChange,
47
46
  stateSelector: gridPageSelector,
48
- changeEvent: GridEvents.pageChange
47
+ changeEvent: 'pageChange'
49
48
  });
50
49
  /**
51
50
  * API METHODS
@@ -114,8 +113,8 @@ export const useGridPage = (apiRef, props) => {
114
113
  rowIndex: gridPageSelector(apiRef) * gridPageSizeSelector(apiRef)
115
114
  });
116
115
 
117
- useGridApiEventHandler(apiRef, GridEvents.pageSizeChange, handlePageSizeChange);
118
- useGridApiEventHandler(apiRef, GridEvents.pageChange, handlePageChange);
116
+ useGridApiEventHandler(apiRef, 'pageSizeChange', handlePageSizeChange);
117
+ useGridApiEventHandler(apiRef, 'pageChange', handlePageChange);
119
118
  /**
120
119
  * EFFECTS
121
120
  */
@@ -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, useGridSelector } from '../../utils';
5
4
  import { gridPageSizeSelector } from './gridPaginationSelector';
6
5
  import { gridDensityRowHeightSelector } from '../density';
@@ -27,7 +26,7 @@ export const useGridPageSize = (apiRef, props) => {
27
26
  propModel: props.pageSize,
28
27
  propOnChange: props.onPageSizeChange,
29
28
  stateSelector: gridPageSizeSelector,
30
- changeEvent: GridEvents.pageSizeChange
29
+ changeEvent: 'pageSizeChange'
31
30
  });
32
31
  /**
33
32
  * API METHODS
@@ -100,7 +99,7 @@ export const useGridPageSize = (apiRef, props) => {
100
99
  const maximumPageSizeWithoutScrollBar = Math.floor(dimensions.viewportInnerSize.height / rowHeight);
101
100
  apiRef.current.setPageSize(maximumPageSizeWithoutScrollBar);
102
101
  }, [apiRef, props.autoPageSize, rowHeight]);
103
- useGridApiEventHandler(apiRef, GridEvents.viewportInnerSizeChange, handleUpdateAutoPageSize);
102
+ useGridApiEventHandler(apiRef, 'viewportInnerSizeChange', handleUpdateAutoPageSize);
104
103
  /**
105
104
  * EFFECTS
106
105
  */
@@ -1,11 +1,9 @@
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 { useGridRegisterPipeProcessor } from '../../core/pipeProcessing';
7
6
  import { gridPreferencePanelStateSelector } from './gridPreferencePanelSelector';
8
- import { useGridSelector } from '../../utils/useGridSelector';
9
7
  export const preferencePanelStateInitializer = (state, props) => {
10
8
  var _props$initialState$p, _props$initialState;
11
9
 
@@ -21,7 +19,6 @@ export const preferencePanelStateInitializer = (state, props) => {
21
19
 
22
20
  export const useGridPreferencesPanel = apiRef => {
23
21
  const logger = useGridLogger(apiRef, 'useGridPreferencesPanel');
24
- const preferencePanelState = useGridSelector(apiRef, gridPreferencePanelStateSelector);
25
22
  const hideTimeout = React.useRef();
26
23
  const immediateTimeout = React.useRef();
27
24
  /**
@@ -30,9 +27,10 @@ export const useGridPreferencesPanel = apiRef => {
30
27
 
31
28
  const hidePreferences = React.useCallback(() => {
32
29
  logger.debug('Hiding Preferences Panel');
30
+ const preferencePanelState = gridPreferencePanelStateSelector(apiRef.current.state);
33
31
 
34
32
  if (preferencePanelState.openedPanelValue) {
35
- apiRef.current.publishEvent(GridEvents.preferencePanelClose, {
33
+ apiRef.current.publishEvent('preferencePanelClose', {
36
34
  openedPanelValue: preferencePanelState.openedPanelValue
37
35
  });
38
36
  }
@@ -43,7 +41,7 @@ export const useGridPreferencesPanel = apiRef => {
43
41
  }
44
42
  }));
45
43
  apiRef.current.forceUpdate();
46
- }, [apiRef, logger, preferencePanelState.openedPanelValue]); // This is to prevent the preferences from closing when you open a select box or another panel,
44
+ }, [apiRef, logger]); // This is to prevent the preferences from closing when you open a select box or another panel,
47
45
  // The issue is in MUI core V4 => Fixed in V5
48
46
 
49
47
  const doNotHidePanel = React.useCallback(() => {
@@ -63,7 +61,7 @@ export const useGridPreferencesPanel = apiRef => {
63
61
  openedPanelValue: newValue
64
62
  })
65
63
  }));
66
- apiRef.current.publishEvent(GridEvents.preferencePanelOpen, {
64
+ apiRef.current.publishEvent('preferencePanelOpen', {
67
65
  openedPanelValue: newValue
68
66
  });
69
67
  apiRef.current.forceUpdate();
@@ -4,6 +4,7 @@ export declare const gridRowCountSelector: import("../../../utils/createSelector
4
4
  export declare const gridRowsLoadingSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, boolean | undefined>;
5
5
  export declare const gridTopLevelRowCountSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, number>;
6
6
  export declare const gridRowsLookupSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, import("../../..").GridRowsLookup<any>>;
7
+ export declare const gridRowsIdToIdLookupSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, Record<string, import("../../..").GridRowId>>;
7
8
  export declare const gridRowTreeSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, import("../../..").GridRowTreeConfig>;
8
9
  export declare const gridRowGroupingNameSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, string>;
9
10
  export declare const gridRowTreeDepthSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, number>;
@@ -4,6 +4,7 @@ export const gridRowCountSelector = createSelector(gridRowsStateSelector, rows =
4
4
  export const gridRowsLoadingSelector = createSelector(gridRowsStateSelector, rows => rows.loading);
5
5
  export const gridTopLevelRowCountSelector = createSelector(gridRowsStateSelector, rows => rows.totalTopLevelRowCount);
6
6
  export const gridRowsLookupSelector = createSelector(gridRowsStateSelector, rows => rows.idRowsLookup);
7
+ export const gridRowsIdToIdLookupSelector = createSelector(gridRowsStateSelector, rows => rows.idToIdLookup);
7
8
  export const gridRowTreeSelector = createSelector(gridRowsStateSelector, rows => rows.tree);
8
9
  export const gridRowGroupingNameSelector = createSelector(gridRowsStateSelector, rows => rows.groupingName);
9
10
  export const gridRowTreeDepthSelector = createSelector(gridRowsStateSelector, rows => rows.treeDepth);
@@ -1,8 +1,9 @@
1
- /// <reference types="node" />
2
- import { GridRowId, GridRowsLookup, GridRowsProp, GridRowTreeConfig } from '../../../models/gridRows';
1
+ import { GridRowId, GridRowsLookup, GridRowTreeConfig } from '../../../models/gridRows';
2
+ import type { DataGridProcessedProps } from '../../../models/props/DataGridProps';
3
3
  export interface GridRowTreeCreationParams {
4
4
  ids: GridRowId[];
5
5
  idRowsLookup: GridRowsLookup;
6
+ idToIdLookup: Record<string, GridRowId>;
6
7
  previousTree: GridRowTreeConfig | null;
7
8
  }
8
9
  export interface GridRowTreeCreationValue {
@@ -15,20 +16,18 @@ export interface GridRowTreeCreationValue {
15
16
  treeDepth: number;
16
17
  ids: GridRowId[];
17
18
  idRowsLookup: GridRowsLookup;
19
+ idToIdLookup: Record<string, GridRowId>;
18
20
  }
19
- export declare type GridRowInternalCacheValue = Omit<GridRowTreeCreationParams, 'previousTree'>;
20
- export interface GridRowsInternalCacheState {
21
- value: GridRowInternalCacheValue;
21
+ export interface GridRowsInternalCache extends Omit<GridRowTreeCreationParams, 'previousTree'> {
22
22
  /**
23
23
  * The rows as they were the last time all the rows have been updated at once
24
24
  * It is used to avoid processing several time the same set of rows
25
25
  */
26
- rowsBeforePartialUpdates: GridRowsProp;
27
- }
28
- export interface GridRowsInternalCache {
29
- state: GridRowsInternalCacheState;
30
- timeout: NodeJS.Timeout | null;
31
- lastUpdateMs: number;
26
+ rowsBeforePartialUpdates: DataGridProcessedProps['rows'];
27
+ /**
28
+ * The value of the `loading` prop since the last time that the rows state was updated.
29
+ */
30
+ loadingPropBeforePartialUpdates: DataGridProcessedProps['loading'];
32
31
  }
33
32
  export interface GridRowsState extends GridRowTreeCreationValue {
34
33
  /**
@@ -45,4 +44,10 @@ export interface GridRowsState extends GridRowTreeCreationValue {
45
44
  * It does not count the expanded children rows.
46
45
  */
47
46
  totalTopLevelRowCount: number;
47
+ /**
48
+ * Tree returned by the `rowTreeCreation` strategy processor.
49
+ * It is used to re-apply the `hydrateRows` pipe processor without having to recreate the tree.
50
+ */
51
+ groupingResponseBeforeRowHydration: GridRowTreeCreationValue;
48
52
  }
53
+ export declare type GridHydrateRowsValue = GridRowTreeCreationValue;
@@ -1,4 +1,8 @@
1
- import { GridRowId, GridRowModel } from '../../../models';
1
+ import * as React from 'react';
2
+ import { GridRowId, GridRowIdGetter, GridRowModel, GridRowTreeConfig } from '../../../models';
3
+ import { DataGridProcessedProps } from '../../../models/props/DataGridProps';
4
+ import { GridApiCommunity } from '../../../models/api/gridApiCommunity';
5
+ import { GridRowsInternalCache, GridRowsState } from './gridRowsState';
2
6
  /**
3
7
  * A helper function to check if the id provided is valid.
4
8
  * @param {GridRowId} id Id as [[GridRowId]].
@@ -6,3 +10,12 @@ import { GridRowId, GridRowModel } from '../../../models';
6
10
  * @param {string} detailErrorMessage A custom error message to display for invalid IDs
7
11
  */
8
12
  export declare function checkGridRowIdIsValid(id: GridRowId, row: GridRowModel | Partial<GridRowModel>, detailErrorMessage?: string): void;
13
+ export declare const getRowIdFromRowModel: (rowModel: GridRowModel, getRowId?: GridRowIdGetter<any> | undefined, detailErrorMessage?: string | undefined) => GridRowId;
14
+ export declare const createRowsInternalCache: ({ rows, getRowId, loading, }: Pick<DataGridProcessedProps, 'rows' | 'getRowId' | 'loading'>) => GridRowsInternalCache;
15
+ export declare const getRowsStateFromCache: ({ apiRef, previousTree, rowCountProp, loadingProp, }: {
16
+ apiRef: React.MutableRefObject<GridApiCommunity>;
17
+ previousTree: GridRowTreeConfig | null;
18
+ rowCountProp: number | undefined;
19
+ loadingProp: boolean | undefined;
20
+ }) => GridRowsState;
21
+ export declare const getTreeNodeDescendants: (tree: GridRowTreeConfig, parentId: GridRowId, skipAutoGeneratedRows: boolean) => GridRowId[];
@@ -1,3 +1,7 @@
1
+ import _extends from "@babel/runtime/helpers/esm/extends";
2
+ import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
3
+ const _excluded = ["rowsBeforePartialUpdates"];
4
+
1
5
  /**
2
6
  * A helper function to check if the id provided is valid.
3
7
  * @param {GridRowId} id Id as [[GridRowId]].
@@ -8,4 +12,78 @@ export function checkGridRowIdIsValid(id, row, detailErrorMessage = 'A row was p
8
12
  if (id == null) {
9
13
  throw new Error(['MUI: The data grid component requires all rows to have a unique `id` property.', 'Alternatively, you can use the `getRowId` prop to specify a custom id for each row.', detailErrorMessage, JSON.stringify(row)].join('\n'));
10
14
  }
11
- }
15
+ }
16
+ export const getRowIdFromRowModel = (rowModel, getRowId, detailErrorMessage) => {
17
+ const id = getRowId ? getRowId(rowModel) : rowModel.id;
18
+ checkGridRowIdIsValid(id, rowModel, detailErrorMessage);
19
+ return id;
20
+ };
21
+ export const createRowsInternalCache = ({
22
+ rows,
23
+ getRowId,
24
+ loading
25
+ }) => {
26
+ const cache = {
27
+ rowsBeforePartialUpdates: rows,
28
+ loadingPropBeforePartialUpdates: loading,
29
+ idRowsLookup: {},
30
+ idToIdLookup: {},
31
+ ids: []
32
+ };
33
+
34
+ for (let i = 0; i < rows.length; i += 1) {
35
+ const row = rows[i];
36
+ const id = getRowIdFromRowModel(row, getRowId);
37
+ cache.idRowsLookup[id] = row;
38
+ cache.idToIdLookup[id] = id;
39
+ cache.ids.push(id);
40
+ }
41
+
42
+ return cache;
43
+ };
44
+ export const getRowsStateFromCache = ({
45
+ apiRef,
46
+ previousTree,
47
+ rowCountProp,
48
+ loadingProp
49
+ }) => {
50
+ const _apiRef$current$unsta = apiRef.current.unstable_caches.rows,
51
+ cacheForGrouping = _objectWithoutPropertiesLoose(_apiRef$current$unsta, _excluded);
52
+
53
+ const rowCount = rowCountProp != null ? rowCountProp : 0;
54
+ const groupingResponse = apiRef.current.unstable_applyStrategyProcessor('rowTreeCreation', _extends({}, cacheForGrouping, {
55
+ previousTree
56
+ }));
57
+ const processedGroupingResponse = apiRef.current.unstable_applyPipeProcessors('hydrateRows', groupingResponse);
58
+ const dataTopLevelRowCount = processedGroupingResponse.treeDepth === 1 ? processedGroupingResponse.ids.length : Object.values(processedGroupingResponse.tree).filter(node => node.parent == null).length;
59
+ return _extends({}, processedGroupingResponse, {
60
+ groupingResponseBeforeRowHydration: groupingResponse,
61
+ loading: loadingProp,
62
+ totalRowCount: Math.max(rowCount, processedGroupingResponse.ids.length),
63
+ totalTopLevelRowCount: Math.max(rowCount, dataTopLevelRowCount)
64
+ });
65
+ };
66
+ export const getTreeNodeDescendants = (tree, parentId, skipAutoGeneratedRows) => {
67
+ var _tree$parentId;
68
+
69
+ const children = (_tree$parentId = tree[parentId]) == null ? void 0 : _tree$parentId.children;
70
+
71
+ if (children == null) {
72
+ return [];
73
+ }
74
+
75
+ const validDescendants = [];
76
+
77
+ for (let i = 0; i < children.length; i += 1) {
78
+ const child = children[i];
79
+ const childNode = tree[child];
80
+
81
+ if (!skipAutoGeneratedRows || !childNode.isAutoGenerated) {
82
+ validDescendants.push(child);
83
+ }
84
+
85
+ validDescendants.push(...getTreeNodeDescendants(tree, childNode.id, skipAutoGeneratedRows));
86
+ }
87
+
88
+ return validDescendants;
89
+ };