@mui/x-data-grid 5.10.0 → 5.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (490) hide show
  1. package/CHANGELOG.md +163 -10
  2. package/DataGrid/DataGrid.js +35 -1
  3. package/DataGrid/useDataGridProps.js +2 -1
  4. package/README.md +1 -1
  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 +4 -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 +1 -2
  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/GridToolbarContainer.d.ts +8 -2
  48. package/components/containers/GridToolbarContainer.js +12 -2
  49. package/components/panel/GridPanelContent.d.ts +8 -1
  50. package/components/panel/GridPanelContent.js +13 -2
  51. package/components/panel/GridPanelFooter.d.ts +8 -1
  52. package/components/panel/GridPanelFooter.js +13 -2
  53. package/components/panel/GridPanelHeader.d.ts +8 -1
  54. package/components/panel/GridPanelHeader.js +13 -2
  55. package/components/toolbar/GridToolbar.d.ts +12 -2
  56. package/components/toolbar/GridToolbar.js +30 -7
  57. package/components/toolbar/GridToolbarExport.d.ts +5 -4
  58. package/components/toolbar/GridToolbarExport.js +15 -20
  59. package/components/toolbar/GridToolbarQuickFilter.d.ts +20 -0
  60. package/components/toolbar/GridToolbarQuickFilter.js +88 -0
  61. package/components/toolbar/index.d.ts +3 -1
  62. package/components/toolbar/index.js +3 -2
  63. package/components/virtualization/GridVirtualScroller.d.ts +4 -1
  64. package/components/virtualization/GridVirtualScrollerContent.d.ts +4 -1
  65. package/components/virtualization/GridVirtualScrollerRenderZone.d.ts +4 -1
  66. package/constants/localeTextConstants.js +5 -0
  67. package/hooks/core/pipeProcessing/gridPipeProcessingApi.d.ts +7 -0
  68. package/hooks/core/strategyProcessing/useGridStrategyProcessing.d.ts +4 -4
  69. package/hooks/core/strategyProcessing/useGridStrategyProcessing.js +6 -7
  70. package/hooks/core/useGridApiInitialization.js +3 -3
  71. package/hooks/core/useGridErrorHandler.js +1 -2
  72. package/hooks/core/useGridStateInitialization.js +1 -2
  73. package/hooks/features/columnHeaders/useGridColumnHeaders.js +5 -6
  74. package/hooks/features/columnMenu/useGridColumnMenu.js +3 -4
  75. package/hooks/features/columns/useGridColumnSpanning.js +1 -2
  76. package/hooks/features/columns/useGridColumns.js +8 -9
  77. package/hooks/features/dimensions/useGridDimensions.d.ts +1 -1
  78. package/hooks/features/dimensions/useGridDimensions.js +8 -9
  79. package/hooks/features/editRows/useGridCellEditing.new.d.ts +1 -1
  80. package/hooks/features/editRows/useGridCellEditing.new.js +133 -32
  81. package/hooks/features/editRows/useGridCellEditing.old.js +20 -21
  82. package/hooks/features/editRows/useGridEditing.old.js +4 -5
  83. package/hooks/features/editRows/useGridRowEditing.new.d.ts +1 -1
  84. package/hooks/features/editRows/useGridRowEditing.new.js +122 -42
  85. package/hooks/features/editRows/useGridRowEditing.old.js +21 -22
  86. package/hooks/features/events/useGridEvents.js +17 -18
  87. package/hooks/features/export/serializers/csvSerializer.js +5 -5
  88. package/hooks/features/export/useGridCsvExport.js +23 -16
  89. package/hooks/features/export/useGridPrintExport.js +22 -0
  90. package/hooks/features/export/utils.d.ts +3 -1
  91. package/hooks/features/export/utils.js +13 -0
  92. package/hooks/features/filter/gridFilterState.d.ts +1 -2
  93. package/hooks/features/filter/gridFilterState.js +3 -1
  94. package/hooks/features/filter/gridFilterUtils.d.ts +8 -0
  95. package/hooks/features/filter/gridFilterUtils.js +84 -2
  96. package/hooks/features/filter/useGridFilter.js +20 -8
  97. package/hooks/features/focus/useGridFocus.d.ts +1 -1
  98. package/hooks/features/focus/useGridFocus.js +29 -33
  99. package/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +4 -5
  100. package/hooks/features/pagination/useGridPage.js +3 -4
  101. package/hooks/features/pagination/useGridPageSize.js +2 -3
  102. package/hooks/features/preferencesPanel/useGridPreferencesPanel.js +4 -6
  103. package/hooks/features/rows/gridRowsSelector.d.ts +1 -0
  104. package/hooks/features/rows/gridRowsSelector.js +1 -0
  105. package/hooks/features/rows/gridRowsState.d.ts +3 -7
  106. package/hooks/features/rows/gridRowsUtils.d.ts +2 -1
  107. package/hooks/features/rows/gridRowsUtils.js +25 -1
  108. package/hooks/features/rows/useGridRows.js +100 -60
  109. package/hooks/features/rows/useGridRowsPreProcessors.js +2 -0
  110. package/hooks/features/scroll/useGridScroll.js +6 -1
  111. package/hooks/features/selection/useGridSelection.d.ts +1 -1
  112. package/hooks/features/selection/useGridSelection.js +13 -10
  113. package/hooks/features/sorting/useGridSorting.js +8 -9
  114. package/hooks/features/virtualization/useGridVirtualScroller.js +6 -7
  115. package/hooks/utils/useGridApiEventHandler.d.ts +4 -1
  116. package/hooks/utils/useGridApiEventHandler.js +22 -9
  117. package/hooks/utils/useGridNativeEventListener.js +1 -2
  118. package/hooks/utils/useGridSelector.js +1 -1
  119. package/index.d.ts +2 -0
  120. package/index.js +1 -1
  121. package/internals/index.d.ts +4 -1
  122. package/internals/index.js +5 -2
  123. package/legacy/DataGrid/DataGrid.js +35 -1
  124. package/legacy/DataGrid/useDataGridProps.js +2 -1
  125. package/legacy/colDef/gridActionsColDef.js +2 -1
  126. package/legacy/colDef/gridBooleanColDef.js +2 -1
  127. package/legacy/colDef/gridCheckboxSelectionColDef.js +1 -0
  128. package/legacy/colDef/gridDateColDef.js +4 -2
  129. package/legacy/colDef/gridNumericColDef.js +3 -2
  130. package/legacy/colDef/gridNumericOperators.js +28 -18
  131. package/legacy/colDef/gridSingleSelectColDef.js +3 -2
  132. package/legacy/colDef/gridSingleSelectOperators.js +55 -6
  133. package/legacy/colDef/gridStringColDef.js +3 -2
  134. package/legacy/colDef/gridStringOperators.js +25 -14
  135. package/legacy/components/GridFooter.js +11 -2
  136. package/legacy/components/GridRow.js +4 -5
  137. package/legacy/components/GridRowCount.js +1 -0
  138. package/legacy/components/GridScrollArea.js +3 -4
  139. package/legacy/components/GridSelectedRowCount.js +2 -1
  140. package/legacy/components/base/GridBody.js +1 -2
  141. package/legacy/components/base/GridOverlays.js +1 -2
  142. package/legacy/components/cell/GridActionsCell.js +13 -4
  143. package/legacy/components/cell/GridCell.js +8 -8
  144. package/legacy/components/cell/GridEditBooleanCell.js +132 -11
  145. package/legacy/components/cell/GridEditDateCell.js +148 -42
  146. package/legacy/components/cell/GridEditInputCell.js +61 -12
  147. package/legacy/components/cell/GridEditSingleSelectCell.js +41 -13
  148. package/legacy/components/cell/index.js +2 -0
  149. package/legacy/components/columnHeaders/GridColumnHeaderItem.js +15 -16
  150. package/legacy/components/columnSelection/GridCellCheckboxRenderer.js +2 -3
  151. package/legacy/components/columnSelection/GridHeaderCheckbox.js +4 -5
  152. package/legacy/components/containers/GridFooterContainer.js +11 -2
  153. package/legacy/components/containers/GridToolbarContainer.js +12 -2
  154. package/legacy/components/panel/GridPanelContent.js +13 -2
  155. package/legacy/components/panel/GridPanelFooter.js +13 -2
  156. package/legacy/components/panel/GridPanelHeader.js +13 -2
  157. package/legacy/components/toolbar/GridToolbar.js +31 -6
  158. package/legacy/components/toolbar/GridToolbarExport.js +18 -19
  159. package/legacy/components/toolbar/GridToolbarQuickFilter.js +103 -0
  160. package/legacy/components/toolbar/index.js +3 -2
  161. package/legacy/constants/localeTextConstants.js +5 -0
  162. package/legacy/hooks/core/strategyProcessing/useGridStrategyProcessing.js +6 -7
  163. package/legacy/hooks/core/useGridApiInitialization.js +3 -3
  164. package/legacy/hooks/core/useGridErrorHandler.js +1 -2
  165. package/legacy/hooks/core/useGridStateInitialization.js +1 -2
  166. package/legacy/hooks/features/columnHeaders/useGridColumnHeaders.js +5 -6
  167. package/legacy/hooks/features/columnMenu/useGridColumnMenu.js +3 -4
  168. package/legacy/hooks/features/columns/useGridColumnSpanning.js +1 -2
  169. package/legacy/hooks/features/columns/useGridColumns.js +8 -9
  170. package/legacy/hooks/features/dimensions/useGridDimensions.js +8 -9
  171. package/legacy/hooks/features/editRows/useGridCellEditing.new.js +213 -83
  172. package/legacy/hooks/features/editRows/useGridCellEditing.old.js +20 -21
  173. package/legacy/hooks/features/editRows/useGridEditing.old.js +4 -5
  174. package/legacy/hooks/features/editRows/useGridRowEditing.new.js +126 -42
  175. package/legacy/hooks/features/editRows/useGridRowEditing.old.js +20 -21
  176. package/legacy/hooks/features/events/useGridEvents.js +17 -18
  177. package/legacy/hooks/features/export/serializers/csvSerializer.js +5 -5
  178. package/legacy/hooks/features/export/useGridCsvExport.js +24 -17
  179. package/legacy/hooks/features/export/useGridPrintExport.js +22 -0
  180. package/legacy/hooks/features/export/utils.js +14 -0
  181. package/legacy/hooks/features/filter/gridFilterState.js +3 -1
  182. package/legacy/hooks/features/filter/gridFilterUtils.js +96 -2
  183. package/legacy/hooks/features/filter/useGridFilter.js +20 -8
  184. package/legacy/hooks/features/focus/useGridFocus.js +31 -35
  185. package/legacy/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +4 -5
  186. package/legacy/hooks/features/pagination/useGridPage.js +3 -4
  187. package/legacy/hooks/features/pagination/useGridPageSize.js +2 -3
  188. package/legacy/hooks/features/preferencesPanel/useGridPreferencesPanel.js +4 -6
  189. package/legacy/hooks/features/rows/gridRowsSelector.js +3 -0
  190. package/legacy/hooks/features/rows/gridRowsUtils.js +27 -1
  191. package/legacy/hooks/features/rows/useGridRows.js +104 -60
  192. package/legacy/hooks/features/rows/useGridRowsPreProcessors.js +2 -0
  193. package/legacy/hooks/features/scroll/useGridScroll.js +6 -1
  194. package/legacy/hooks/features/selection/useGridSelection.js +13 -10
  195. package/legacy/hooks/features/sorting/useGridSorting.js +8 -9
  196. package/legacy/hooks/features/virtualization/useGridVirtualScroller.js +6 -7
  197. package/legacy/hooks/utils/useGridApiEventHandler.js +20 -9
  198. package/legacy/hooks/utils/useGridNativeEventListener.js +1 -2
  199. package/legacy/hooks/utils/useGridSelector.js +1 -1
  200. package/legacy/index.js +1 -1
  201. package/legacy/internals/index.js +5 -2
  202. package/legacy/locales/arSD.js +5 -0
  203. package/legacy/locales/bgBG.js +5 -0
  204. package/legacy/locales/csCZ.js +5 -0
  205. package/legacy/locales/daDK.js +5 -0
  206. package/legacy/locales/deDE.js +10 -5
  207. package/legacy/locales/elGR.js +5 -0
  208. package/legacy/locales/esES.js +5 -0
  209. package/legacy/locales/faIR.js +5 -0
  210. package/legacy/locales/fiFI.js +5 -0
  211. package/legacy/locales/frFR.js +5 -0
  212. package/legacy/locales/heIL.js +5 -0
  213. package/legacy/locales/huHU.js +5 -0
  214. package/legacy/locales/itIT.js +5 -0
  215. package/legacy/locales/jaJP.js +5 -0
  216. package/legacy/locales/koKR.js +5 -0
  217. package/legacy/locales/nlNL.js +5 -0
  218. package/legacy/locales/plPL.js +5 -0
  219. package/legacy/locales/ptBR.js +5 -0
  220. package/legacy/locales/ruRU.js +5 -0
  221. package/legacy/locales/skSK.js +5 -0
  222. package/legacy/locales/trTR.js +5 -0
  223. package/legacy/locales/ukUA.js +5 -0
  224. package/legacy/locales/viVN.js +5 -0
  225. package/legacy/locales/zhCN.js +5 -0
  226. package/legacy/models/events/gridEvents.js +2 -0
  227. package/legacy/models/index.js +4 -3
  228. package/legacy/utils/createSelector.js +18 -2
  229. package/legacy/utils/exportAs.js +1 -1
  230. package/locales/arSD.js +5 -0
  231. package/locales/bgBG.js +5 -0
  232. package/locales/csCZ.js +5 -0
  233. package/locales/daDK.js +5 -0
  234. package/locales/deDE.js +10 -5
  235. package/locales/elGR.js +5 -0
  236. package/locales/esES.js +5 -0
  237. package/locales/faIR.js +5 -0
  238. package/locales/fiFI.js +5 -0
  239. package/locales/frFR.js +5 -0
  240. package/locales/heIL.js +5 -0
  241. package/locales/huHU.js +5 -0
  242. package/locales/itIT.js +5 -0
  243. package/locales/jaJP.js +5 -0
  244. package/locales/koKR.js +5 -0
  245. package/locales/nlNL.js +5 -0
  246. package/locales/plPL.js +5 -0
  247. package/locales/ptBR.js +5 -0
  248. package/locales/ruRU.js +5 -0
  249. package/locales/skSK.js +5 -0
  250. package/locales/trTR.js +5 -0
  251. package/locales/ukUA.js +5 -0
  252. package/locales/viVN.js +5 -0
  253. package/locales/zhCN.js +5 -0
  254. package/models/api/gridCoreApi.d.ts +10 -0
  255. package/models/api/gridEditingApi.d.ts +23 -4
  256. package/models/api/gridFilterApi.d.ts +5 -0
  257. package/models/api/gridFocusApi.d.ts +1 -0
  258. package/models/api/gridLocaleTextApi.d.ts +4 -0
  259. package/models/api/gridRowApi.d.ts +28 -0
  260. package/models/api/index.d.ts +1 -1
  261. package/models/colDef/gridColDef.d.ts +13 -0
  262. package/models/events/gridEventLookup.d.ts +273 -3
  263. package/models/events/gridEvents.d.ts +2 -277
  264. package/models/events/gridEvents.js +2 -0
  265. package/models/gridExport.d.ts +29 -2
  266. package/models/gridFilterModel.d.ts +11 -0
  267. package/models/gridFilterOperator.d.ts +1 -1
  268. package/models/gridStateCommunity.d.ts +0 -2
  269. package/models/index.d.ts +1 -1
  270. package/models/index.js +4 -3
  271. package/models/props/DataGridProps.d.ts +56 -28
  272. package/modern/DataGrid/DataGrid.js +35 -1
  273. package/modern/DataGrid/useDataGridProps.js +2 -1
  274. package/modern/colDef/gridActionsColDef.js +2 -1
  275. package/modern/colDef/gridBooleanColDef.js +2 -1
  276. package/modern/colDef/gridCheckboxSelectionColDef.js +1 -0
  277. package/modern/colDef/gridDateColDef.js +4 -2
  278. package/modern/colDef/gridNumericColDef.js +3 -2
  279. package/modern/colDef/gridNumericOperators.js +11 -0
  280. package/modern/colDef/gridSingleSelectColDef.js +3 -2
  281. package/modern/colDef/gridSingleSelectOperators.js +52 -0
  282. package/modern/colDef/gridStringColDef.js +3 -2
  283. package/modern/colDef/gridStringOperators.js +12 -0
  284. package/modern/components/GridFooter.js +11 -2
  285. package/modern/components/GridRow.js +4 -5
  286. package/modern/components/GridRowCount.js +1 -0
  287. package/modern/components/GridScrollArea.js +3 -4
  288. package/modern/components/GridSelectedRowCount.js +2 -1
  289. package/modern/components/base/GridBody.js +1 -2
  290. package/modern/components/base/GridOverlays.js +1 -2
  291. package/modern/components/cell/GridActionsCell.js +14 -3
  292. package/modern/components/cell/GridCell.js +8 -8
  293. package/modern/components/cell/GridEditBooleanCell.js +101 -6
  294. package/modern/components/cell/GridEditDateCell.js +99 -5
  295. package/modern/components/cell/GridEditInputCell.js +29 -5
  296. package/modern/components/cell/GridEditSingleSelectCell.js +28 -5
  297. package/modern/components/cell/index.js +2 -0
  298. package/modern/components/columnHeaders/GridColumnHeaderItem.js +15 -16
  299. package/modern/components/columnSelection/GridCellCheckboxRenderer.js +2 -3
  300. package/modern/components/columnSelection/GridHeaderCheckbox.js +4 -5
  301. package/modern/components/containers/GridFooterContainer.js +11 -2
  302. package/modern/components/containers/GridToolbarContainer.js +12 -2
  303. package/modern/components/panel/GridPanelContent.js +13 -2
  304. package/modern/components/panel/GridPanelFooter.js +13 -2
  305. package/modern/components/panel/GridPanelHeader.js +13 -2
  306. package/modern/components/toolbar/GridToolbar.js +30 -7
  307. package/modern/components/toolbar/GridToolbarExport.js +15 -20
  308. package/modern/components/toolbar/GridToolbarQuickFilter.js +86 -0
  309. package/modern/components/toolbar/index.js +3 -2
  310. package/modern/constants/localeTextConstants.js +5 -0
  311. package/modern/hooks/core/strategyProcessing/useGridStrategyProcessing.js +6 -7
  312. package/modern/hooks/core/useGridApiInitialization.js +3 -3
  313. package/modern/hooks/core/useGridErrorHandler.js +1 -2
  314. package/modern/hooks/core/useGridStateInitialization.js +1 -2
  315. package/modern/hooks/features/columnHeaders/useGridColumnHeaders.js +5 -6
  316. package/modern/hooks/features/columnMenu/useGridColumnMenu.js +3 -4
  317. package/modern/hooks/features/columns/useGridColumnSpanning.js +1 -2
  318. package/modern/hooks/features/columns/useGridColumns.js +8 -9
  319. package/modern/hooks/features/dimensions/useGridDimensions.js +8 -9
  320. package/modern/hooks/features/editRows/useGridCellEditing.new.js +131 -32
  321. package/modern/hooks/features/editRows/useGridCellEditing.old.js +20 -21
  322. package/modern/hooks/features/editRows/useGridEditing.old.js +4 -5
  323. package/modern/hooks/features/editRows/useGridRowEditing.new.js +120 -42
  324. package/modern/hooks/features/editRows/useGridRowEditing.old.js +21 -22
  325. package/modern/hooks/features/events/useGridEvents.js +17 -18
  326. package/modern/hooks/features/export/serializers/csvSerializer.js +5 -5
  327. package/modern/hooks/features/export/useGridCsvExport.js +21 -16
  328. package/modern/hooks/features/export/useGridPrintExport.js +20 -0
  329. package/modern/hooks/features/export/utils.js +13 -0
  330. package/modern/hooks/features/filter/gridFilterState.js +3 -1
  331. package/modern/hooks/features/filter/gridFilterUtils.js +80 -2
  332. package/modern/hooks/features/filter/useGridFilter.js +20 -8
  333. package/modern/hooks/features/focus/useGridFocus.js +29 -33
  334. package/modern/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +4 -5
  335. package/modern/hooks/features/pagination/useGridPage.js +3 -4
  336. package/modern/hooks/features/pagination/useGridPageSize.js +2 -3
  337. package/modern/hooks/features/preferencesPanel/useGridPreferencesPanel.js +4 -6
  338. package/modern/hooks/features/rows/gridRowsSelector.js +1 -0
  339. package/modern/hooks/features/rows/gridRowsUtils.js +23 -1
  340. package/modern/hooks/features/rows/useGridRows.js +100 -60
  341. package/modern/hooks/features/rows/useGridRowsPreProcessors.js +2 -0
  342. package/modern/hooks/features/scroll/useGridScroll.js +6 -1
  343. package/modern/hooks/features/selection/useGridSelection.js +13 -10
  344. package/modern/hooks/features/sorting/useGridSorting.js +8 -9
  345. package/modern/hooks/features/virtualization/useGridVirtualScroller.js +6 -7
  346. package/modern/hooks/utils/useGridApiEventHandler.js +20 -9
  347. package/modern/hooks/utils/useGridNativeEventListener.js +1 -2
  348. package/modern/hooks/utils/useGridSelector.js +1 -1
  349. package/modern/index.js +1 -1
  350. package/modern/internals/index.js +5 -2
  351. package/modern/locales/arSD.js +5 -0
  352. package/modern/locales/bgBG.js +5 -0
  353. package/modern/locales/csCZ.js +5 -0
  354. package/modern/locales/daDK.js +5 -0
  355. package/modern/locales/deDE.js +10 -5
  356. package/modern/locales/elGR.js +5 -0
  357. package/modern/locales/esES.js +5 -0
  358. package/modern/locales/faIR.js +5 -0
  359. package/modern/locales/fiFI.js +5 -0
  360. package/modern/locales/frFR.js +5 -0
  361. package/modern/locales/heIL.js +5 -0
  362. package/modern/locales/huHU.js +5 -0
  363. package/modern/locales/itIT.js +5 -0
  364. package/modern/locales/jaJP.js +5 -0
  365. package/modern/locales/koKR.js +5 -0
  366. package/modern/locales/nlNL.js +5 -0
  367. package/modern/locales/plPL.js +5 -0
  368. package/modern/locales/ptBR.js +5 -0
  369. package/modern/locales/ruRU.js +5 -0
  370. package/modern/locales/skSK.js +5 -0
  371. package/modern/locales/trTR.js +5 -0
  372. package/modern/locales/ukUA.js +5 -0
  373. package/modern/locales/viVN.js +5 -0
  374. package/modern/locales/zhCN.js +5 -0
  375. package/modern/models/events/gridEvents.js +2 -0
  376. package/modern/models/index.js +4 -3
  377. package/modern/utils/createSelector.js +20 -2
  378. package/modern/utils/exportAs.js +1 -1
  379. package/node/DataGrid/DataGrid.js +35 -1
  380. package/node/DataGrid/useDataGridProps.js +2 -1
  381. package/node/colDef/gridActionsColDef.js +2 -1
  382. package/node/colDef/gridBooleanColDef.js +2 -1
  383. package/node/colDef/gridCheckboxSelectionColDef.js +1 -0
  384. package/node/colDef/gridDateColDef.js +4 -2
  385. package/node/colDef/gridNumericColDef.js +2 -1
  386. package/node/colDef/gridNumericOperators.js +15 -1
  387. package/node/colDef/gridSingleSelectColDef.js +2 -1
  388. package/node/colDef/gridSingleSelectOperators.js +56 -1
  389. package/node/colDef/gridStringColDef.js +2 -1
  390. package/node/colDef/gridStringOperators.js +16 -1
  391. package/node/components/GridFooter.js +10 -1
  392. package/node/components/GridRow.js +4 -6
  393. package/node/components/GridRowCount.js +1 -0
  394. package/node/components/GridScrollArea.js +3 -5
  395. package/node/components/GridSelectedRowCount.js +2 -1
  396. package/node/components/base/GridBody.js +1 -3
  397. package/node/components/base/GridOverlays.js +1 -3
  398. package/node/components/cell/GridActionsCell.js +13 -4
  399. package/node/components/cell/GridCell.js +7 -7
  400. package/node/components/cell/GridEditBooleanCell.js +100 -5
  401. package/node/components/cell/GridEditDateCell.js +98 -4
  402. package/node/components/cell/GridEditInputCell.js +29 -5
  403. package/node/components/cell/GridEditSingleSelectCell.js +28 -6
  404. package/node/components/cell/index.js +26 -0
  405. package/node/components/columnHeaders/GridColumnHeaderItem.js +15 -17
  406. package/node/components/columnSelection/GridCellCheckboxRenderer.js +2 -4
  407. package/node/components/columnSelection/GridHeaderCheckbox.js +4 -6
  408. package/node/components/containers/GridFooterContainer.js +10 -1
  409. package/node/components/containers/GridToolbarContainer.js +11 -1
  410. package/node/components/panel/GridPanelContent.js +11 -1
  411. package/node/components/panel/GridPanelFooter.js +11 -1
  412. package/node/components/panel/GridPanelHeader.js +11 -1
  413. package/node/components/toolbar/GridToolbar.js +32 -7
  414. package/node/components/toolbar/GridToolbarExport.js +14 -19
  415. package/node/components/toolbar/GridToolbarQuickFilter.js +111 -0
  416. package/node/components/toolbar/index.js +42 -11
  417. package/node/constants/localeTextConstants.js +5 -0
  418. package/node/hooks/core/strategyProcessing/useGridStrategyProcessing.js +6 -8
  419. package/node/hooks/core/useGridApiInitialization.js +3 -4
  420. package/node/hooks/core/useGridErrorHandler.js +1 -3
  421. package/node/hooks/core/useGridStateInitialization.js +1 -3
  422. package/node/hooks/features/columnHeaders/useGridColumnHeaders.js +5 -7
  423. package/node/hooks/features/columnMenu/useGridColumnMenu.js +3 -5
  424. package/node/hooks/features/columns/useGridColumnSpanning.js +1 -3
  425. package/node/hooks/features/columns/useGridColumns.js +8 -10
  426. package/node/hooks/features/dimensions/useGridDimensions.js +8 -10
  427. package/node/hooks/features/editRows/useGridCellEditing.new.js +133 -32
  428. package/node/hooks/features/editRows/useGridCellEditing.old.js +20 -22
  429. package/node/hooks/features/editRows/useGridEditing.old.js +4 -6
  430. package/node/hooks/features/editRows/useGridRowEditing.new.js +122 -43
  431. package/node/hooks/features/editRows/useGridRowEditing.old.js +21 -23
  432. package/node/hooks/features/events/useGridEvents.js +17 -19
  433. package/node/hooks/features/export/serializers/csvSerializer.js +5 -5
  434. package/node/hooks/features/export/useGridCsvExport.js +26 -17
  435. package/node/hooks/features/export/useGridPrintExport.js +25 -0
  436. package/node/hooks/features/export/utils.js +19 -2
  437. package/node/hooks/features/filter/gridFilterState.js +3 -1
  438. package/node/hooks/features/filter/gridFilterUtils.js +92 -3
  439. package/node/hooks/features/filter/useGridFilter.js +21 -9
  440. package/node/hooks/features/focus/useGridFocus.js +29 -34
  441. package/node/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +4 -6
  442. package/node/hooks/features/pagination/useGridPage.js +3 -5
  443. package/node/hooks/features/pagination/useGridPageSize.js +2 -4
  444. package/node/hooks/features/preferencesPanel/useGridPreferencesPanel.js +4 -8
  445. package/node/hooks/features/rows/gridRowsSelector.js +3 -1
  446. package/node/hooks/features/rows/gridRowsUtils.js +29 -1
  447. package/node/hooks/features/rows/useGridRows.js +101 -60
  448. package/node/hooks/features/rows/useGridRowsPreProcessors.js +2 -0
  449. package/node/hooks/features/scroll/useGridScroll.js +6 -1
  450. package/node/hooks/features/selection/useGridSelection.js +13 -11
  451. package/node/hooks/features/sorting/useGridSorting.js +8 -10
  452. package/node/hooks/features/virtualization/useGridVirtualScroller.js +6 -8
  453. package/node/hooks/utils/useGridApiEventHandler.js +22 -10
  454. package/node/hooks/utils/useGridNativeEventListener.js +1 -3
  455. package/node/hooks/utils/useGridSelector.js +1 -1
  456. package/node/index.js +1 -1
  457. package/node/internals/index.js +39 -3
  458. package/node/locales/arSD.js +5 -0
  459. package/node/locales/bgBG.js +5 -0
  460. package/node/locales/csCZ.js +5 -0
  461. package/node/locales/daDK.js +5 -0
  462. package/node/locales/deDE.js +10 -5
  463. package/node/locales/elGR.js +5 -0
  464. package/node/locales/esES.js +5 -0
  465. package/node/locales/faIR.js +5 -0
  466. package/node/locales/fiFI.js +5 -0
  467. package/node/locales/frFR.js +5 -0
  468. package/node/locales/heIL.js +5 -0
  469. package/node/locales/huHU.js +5 -0
  470. package/node/locales/itIT.js +5 -0
  471. package/node/locales/jaJP.js +5 -0
  472. package/node/locales/koKR.js +5 -0
  473. package/node/locales/nlNL.js +5 -0
  474. package/node/locales/plPL.js +5 -0
  475. package/node/locales/ptBR.js +5 -0
  476. package/node/locales/ruRU.js +5 -0
  477. package/node/locales/skSK.js +5 -0
  478. package/node/locales/trTR.js +5 -0
  479. package/node/locales/ukUA.js +5 -0
  480. package/node/locales/viVN.js +5 -0
  481. package/node/locales/zhCN.js +5 -0
  482. package/node/models/events/gridEvents.js +2 -0
  483. package/node/models/index.js +0 -13
  484. package/node/utils/createSelector.js +25 -4
  485. package/node/utils/exportAs.js +1 -1
  486. package/package.json +1 -1
  487. package/utils/createSelector.d.ts +2 -1
  488. package/utils/createSelector.js +20 -2
  489. package/utils/exportAs.d.ts +2 -2
  490. package/utils/exportAs.js +1 -1
@@ -2,13 +2,14 @@ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
2
  import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
3
3
  import _extends from "@babel/runtime/helpers/esm/extends";
4
4
  import * as React from 'react';
5
- import { GridEvents } from '../../../models/events';
6
5
  import { useGridApiMethod } from '../../utils/useGridApiMethod';
7
6
  import { useGridLogger } from '../../utils/useGridLogger';
8
7
  import { gridRowCountSelector, gridRowsLookupSelector, gridRowTreeSelector, gridRowIdsSelector, gridRowGroupingNameSelector } from './gridRowsSelector';
9
8
  import { GridSignature, useGridApiEventHandler } from '../../utils/useGridApiEventHandler';
10
9
  import { useGridVisibleRows } from '../../utils/useGridVisibleRows';
11
- import { checkGridRowIdIsValid } from './gridRowsUtils';
10
+ import { gridSortedRowIdsSelector } from '../sorting/gridSortingSelector';
11
+ import { gridFilteredRowsLookupSelector } from '../filter/gridFilterSelector';
12
+ import { checkGridRowIdIsValid, getTreeNodeDescendants } from './gridRowsUtils';
12
13
 
13
14
  function getGridRowId(rowModel, getRowId, detailErrorMessage) {
14
15
  var id = getRowId ? getRowId(rowModel) : rowModel.id;
@@ -16,8 +17,8 @@ function getGridRowId(rowModel, getRowId, detailErrorMessage) {
16
17
  return id;
17
18
  }
18
19
 
19
- var convertGridRowsPropToState = function convertGridRowsPropToState(_ref) {
20
- var prevState = _ref.prevState,
20
+ var convertRowsPropToState = function convertRowsPropToState(_ref) {
21
+ var prevState = _ref.prevCache,
21
22
  rows = _ref.rows,
22
23
  getRowId = _ref.getRowId;
23
24
  var value;
@@ -25,6 +26,7 @@ var convertGridRowsPropToState = function convertGridRowsPropToState(_ref) {
25
26
  if (rows) {
26
27
  value = {
27
28
  idRowsLookup: {},
29
+ idToIdLookup: {},
28
30
  ids: []
29
31
  };
30
32
 
@@ -32,6 +34,7 @@ var convertGridRowsPropToState = function convertGridRowsPropToState(_ref) {
32
34
  var row = rows[i];
33
35
  var id = getGridRowId(row, getRowId);
34
36
  value.idRowsLookup[id] = row;
37
+ value.idToIdLookup[id] = id;
35
38
  value.ids.push(id);
36
39
  }
37
40
  } else {
@@ -45,7 +48,7 @@ var convertGridRowsPropToState = function convertGridRowsPropToState(_ref) {
45
48
  };
46
49
 
47
50
  var getRowsStateFromCache = function getRowsStateFromCache(rowsCache, previousTree, apiRef, rowCountProp, loadingProp) {
48
- var value = rowsCache.state.value;
51
+ var value = rowsCache.value;
49
52
  var rowCount = rowCountProp != null ? rowCountProp : 0;
50
53
  var groupingResponse = apiRef.current.unstable_applyStrategyProcessor('rowTreeCreation', _extends({}, value, {
51
54
  previousTree: previousTree
@@ -61,25 +64,20 @@ var getRowsStateFromCache = function getRowsStateFromCache(rowsCache, previousTr
61
64
  };
62
65
 
63
66
  export var rowsStateInitializer = function rowsStateInitializer(state, props, apiRef) {
64
- var rowsCache = {
65
- state: convertGridRowsPropToState({
66
- rows: props.rows,
67
- getRowId: props.getRowId,
68
- prevState: {
69
- value: {
70
- idRowsLookup: {},
71
- ids: []
72
- },
73
- rowsBeforePartialUpdates: []
74
- }
75
- }),
76
- timeout: null,
77
- lastUpdateMs: Date.now()
78
- };
67
+ apiRef.current.unstable_caches.rows = convertRowsPropToState({
68
+ rows: props.rows,
69
+ getRowId: props.getRowId,
70
+ prevCache: {
71
+ value: {
72
+ idRowsLookup: {},
73
+ idToIdLookup: {},
74
+ ids: []
75
+ },
76
+ rowsBeforePartialUpdates: []
77
+ }
78
+ });
79
79
  return _extends({}, state, {
80
- rows: getRowsStateFromCache(rowsCache, null, apiRef, props.rowCount, props.loading),
81
- rowsCache: rowsCache // TODO remove from state
82
-
80
+ rows: getRowsStateFromCache(apiRef.current.unstable_caches.rows, null, apiRef, props.rowCount, props.loading)
83
81
  });
84
82
  };
85
83
  export var useGridRows = function useGridRows(apiRef, props) {
@@ -89,9 +87,9 @@ export var useGridRows = function useGridRows(apiRef, props) {
89
87
  }
90
88
 
91
89
  var logger = useGridLogger(apiRef, 'useGridRows');
92
- var rowsCache = React.useRef(apiRef.current.state.rowsCache); // To avoid listing rowsCache as useEffect dep
93
-
94
90
  var currentPage = useGridVisibleRows(apiRef, props);
91
+ var lastUpdateMs = React.useRef(Date.now());
92
+ var timeout = React.useRef(null);
95
93
  var getRow = React.useCallback(function (id) {
96
94
  var _ref2;
97
95
 
@@ -104,35 +102,35 @@ export var useGridRows = function useGridRows(apiRef, props) {
104
102
  return acc;
105
103
  }, {});
106
104
  }, [currentPage.rows]);
107
- var throttledRowsChange = React.useCallback(function (newState, throttle) {
105
+ var throttledRowsChange = React.useCallback(function (newCache, throttle) {
108
106
  var run = function run() {
109
- rowsCache.current.timeout = null;
110
- rowsCache.current.lastUpdateMs = Date.now();
107
+ timeout.current = null;
108
+ lastUpdateMs.current = Date.now();
111
109
  apiRef.current.setState(function (state) {
112
110
  return _extends({}, state, {
113
- rows: getRowsStateFromCache(rowsCache.current, gridRowTreeSelector(apiRef), apiRef, props.rowCount, props.loading)
111
+ rows: getRowsStateFromCache(apiRef.current.unstable_caches.rows, gridRowTreeSelector(apiRef), apiRef, props.rowCount, props.loading)
114
112
  });
115
113
  });
116
- apiRef.current.publishEvent(GridEvents.rowsSet);
114
+ apiRef.current.publishEvent('rowsSet');
117
115
  apiRef.current.forceUpdate();
118
116
  };
119
117
 
120
- if (rowsCache.current.timeout) {
121
- clearTimeout(rowsCache.current.timeout);
118
+ if (timeout.current) {
119
+ clearTimeout(timeout.current);
120
+ timeout.current = null;
122
121
  }
123
122
 
124
- rowsCache.current.state = newState;
125
- rowsCache.current.timeout = null;
123
+ apiRef.current.unstable_caches.rows = newCache;
126
124
 
127
125
  if (!throttle) {
128
126
  run();
129
127
  return;
130
128
  }
131
129
 
132
- var throttleRemainingTimeMs = props.throttleRowsMs - (Date.now() - rowsCache.current.lastUpdateMs);
130
+ var throttleRemainingTimeMs = props.throttleRowsMs - (Date.now() - lastUpdateMs.current);
133
131
 
134
132
  if (throttleRemainingTimeMs > 0) {
135
- rowsCache.current.timeout = setTimeout(run, throttleRemainingTimeMs);
133
+ timeout.current = setTimeout(run, throttleRemainingTimeMs);
136
134
  return;
137
135
  }
138
136
 
@@ -144,12 +142,12 @@ export var useGridRows = function useGridRows(apiRef, props) {
144
142
 
145
143
  var setRows = React.useCallback(function (rows) {
146
144
  logger.debug("Updating all rows, new length ".concat(rows.length));
147
- throttledRowsChange(convertGridRowsPropToState({
145
+ throttledRowsChange(convertRowsPropToState({
148
146
  rows: rows,
149
- prevState: rowsCache.current.state,
147
+ prevCache: apiRef.current.unstable_caches.rows,
150
148
  getRowId: props.getRowId
151
149
  }), true);
152
- }, [logger, props.getRowId, throttledRowsChange]);
150
+ }, [apiRef, logger, props.getRowId, throttledRowsChange]);
153
151
  var updateRows = React.useCallback(function (updates) {
154
152
  if (props.signature === GridSignature.DataGrid && updates.length > 1) {
155
153
  // TODO: Add test with direct call to `apiRef.current.updateRows` in DataGrid after enabling the `apiRef` on the free plan.
@@ -169,13 +167,15 @@ export var useGridRows = function useGridRows(apiRef, props) {
169
167
  });
170
168
  var deletedRowIds = [];
171
169
  var newStateValue = {
172
- idRowsLookup: _extends({}, rowsCache.current.state.value.idRowsLookup),
173
- ids: _toConsumableArray(rowsCache.current.state.value.ids)
170
+ idRowsLookup: _extends({}, apiRef.current.unstable_caches.rows.value.idRowsLookup),
171
+ idToIdLookup: _extends({}, apiRef.current.unstable_caches.rows.value.idToIdLookup),
172
+ ids: _toConsumableArray(apiRef.current.unstable_caches.rows.value.ids)
174
173
  };
175
174
  uniqUpdates.forEach(function (partialRow, id) {
176
175
  // eslint-disable-next-line no-underscore-dangle
177
176
  if (partialRow._action === 'delete') {
178
177
  delete newStateValue.idRowsLookup[id];
178
+ delete newStateValue.idToIdLookup[id];
179
179
  deletedRowIds.push(id);
180
180
  return;
181
181
  }
@@ -184,6 +184,7 @@ export var useGridRows = function useGridRows(apiRef, props) {
184
184
 
185
185
  if (!oldRow) {
186
186
  newStateValue.idRowsLookup[id] = partialRow;
187
+ newStateValue.idToIdLookup[id] = id;
187
188
  newStateValue.ids.push(id);
188
189
  return;
189
190
  }
@@ -197,12 +198,12 @@ export var useGridRows = function useGridRows(apiRef, props) {
197
198
  });
198
199
  }
199
200
 
200
- var state = _extends({}, rowsCache.current.state, {
201
+ var state = _extends({}, apiRef.current.unstable_caches.rows, {
201
202
  value: newStateValue
202
203
  });
203
204
 
204
205
  throttledRowsChange(state, true);
205
- }, [apiRef, props.getRowId, throttledRowsChange, props.signature]);
206
+ }, [props.signature, props.getRowId, throttledRowsChange, apiRef]);
206
207
  var getRowModels = React.useCallback(function () {
207
208
  var allRows = gridRowIdsSelector(apiRef);
208
209
  var idRowsLookup = gridRowsLookupSelector(apiRef);
@@ -238,20 +239,63 @@ export var useGridRows = function useGridRows(apiRef, props) {
238
239
  });
239
240
  });
240
241
  apiRef.current.forceUpdate();
241
- apiRef.current.publishEvent(GridEvents.rowExpansionChange, newNode);
242
+ apiRef.current.publishEvent('rowExpansionChange', newNode);
242
243
  }, [apiRef]);
243
244
  var getRowNode = React.useCallback(function (id) {
244
245
  var _gridRowTreeSelector$;
245
246
 
246
247
  return (_gridRowTreeSelector$ = gridRowTreeSelector(apiRef)[id]) != null ? _gridRowTreeSelector$ : null;
247
248
  }, [apiRef]);
249
+ var getRowGroupChildren = React.useCallback(function (_ref4) {
250
+ var _ref4$skipAutoGenerat = _ref4.skipAutoGeneratedRows,
251
+ skipAutoGeneratedRows = _ref4$skipAutoGenerat === void 0 ? true : _ref4$skipAutoGenerat,
252
+ groupId = _ref4.groupId,
253
+ applySorting = _ref4.applySorting,
254
+ applyFiltering = _ref4.applyFiltering;
255
+ var tree = gridRowTreeSelector(apiRef);
256
+ var children;
257
+
258
+ if (applySorting) {
259
+ var groupNode = tree[groupId];
260
+
261
+ if (!groupNode) {
262
+ return [];
263
+ }
264
+
265
+ var sortedRowIds = gridSortedRowIdsSelector(apiRef);
266
+ children = [];
267
+ var startIndex = sortedRowIds.findIndex(function (id) {
268
+ return id === groupId;
269
+ }) + 1;
270
+
271
+ for (var index = startIndex; index < sortedRowIds.length && tree[sortedRowIds[index]].depth > groupNode.depth; index += 1) {
272
+ var id = sortedRowIds[index];
273
+ var node = tree[id];
274
+
275
+ if (!skipAutoGeneratedRows || !node.isAutoGenerated) {
276
+ children.push(id);
277
+ }
278
+ }
279
+ } else {
280
+ children = getTreeNodeDescendants(tree, groupId, skipAutoGeneratedRows);
281
+ }
282
+
283
+ if (applyFiltering) {
284
+ var filteredRowsLookup = gridFilteredRowsLookupSelector(apiRef);
285
+ children = children.filter(function (childId) {
286
+ return filteredRowsLookup[childId] !== false;
287
+ });
288
+ }
289
+
290
+ return children;
291
+ }, [apiRef]);
248
292
  var setRowIndex = React.useCallback(function (rowId, targetIndex) {
249
293
  var allRows = gridRowIdsSelector(apiRef);
250
294
  var oldIndex = allRows.findIndex(function (row) {
251
295
  return row === rowId;
252
296
  });
253
297
 
254
- if (oldIndex === targetIndex) {
298
+ if (oldIndex === -1 || oldIndex === targetIndex) {
255
299
  return;
256
300
  }
257
301
 
@@ -279,7 +323,8 @@ export var useGridRows = function useGridRows(apiRef, props) {
279
323
  updateRows: updateRows,
280
324
  setRowChildrenExpansion: setRowChildrenExpansion,
281
325
  getRowNode: getRowNode,
282
- getRowIndexRelativeToVisibleRows: getRowIndexRelativeToVisibleRows
326
+ getRowIndexRelativeToVisibleRows: getRowIndexRelativeToVisibleRows,
327
+ getRowGroupChildren: getRowGroupChildren
283
328
  };
284
329
  /**
285
330
  * EVENTS
@@ -289,7 +334,7 @@ export var useGridRows = function useGridRows(apiRef, props) {
289
334
  logger.info("Row grouping pre-processing have changed, regenerating the row tree");
290
335
  var rows;
291
336
 
292
- if (rowsCache.current.state.rowsBeforePartialUpdates === props.rows) {
337
+ if (apiRef.current.unstable_caches.rows.rowsBeforePartialUpdates === props.rows) {
293
338
  // The `props.rows` has not changed since the last row grouping
294
339
  // We can keep the potential updates stored in `inputRowsAfterUpdates` on the new grouping
295
340
  rows = undefined;
@@ -300,12 +345,12 @@ export var useGridRows = function useGridRows(apiRef, props) {
300
345
  rows = props.rows;
301
346
  }
302
347
 
303
- throttledRowsChange(convertGridRowsPropToState({
348
+ throttledRowsChange(convertRowsPropToState({
304
349
  rows: rows,
305
350
  getRowId: props.getRowId,
306
- prevState: rowsCache.current.state
351
+ prevCache: apiRef.current.unstable_caches.rows
307
352
  }), false);
308
- }, [logger, throttledRowsChange, props.getRowId, props.rows]);
353
+ }, [logger, apiRef, props.rows, props.getRowId, throttledRowsChange]);
309
354
  var handleStrategyProcessorChange = React.useCallback(function (methodName) {
310
355
  if (methodName === 'rowTreeCreation') {
311
356
  groupRows();
@@ -318,8 +363,8 @@ export var useGridRows = function useGridRows(apiRef, props) {
318
363
  groupRows();
319
364
  }
320
365
  }, [apiRef, groupRows]);
321
- useGridApiEventHandler(apiRef, GridEvents.activeStrategyProcessorChange, handleStrategyProcessorChange);
322
- useGridApiEventHandler(apiRef, GridEvents.strategyAvailabilityChange, handleStrategyActivityChange);
366
+ useGridApiEventHandler(apiRef, 'activeStrategyProcessorChange', handleStrategyProcessorChange);
367
+ useGridApiEventHandler(apiRef, 'strategyAvailabilityChange', handleStrategyActivityChange);
323
368
  useGridApiMethod(apiRef, rowApi, 'GridRowApi');
324
369
  /**
325
370
  * EFFECTS
@@ -327,9 +372,8 @@ export var useGridRows = function useGridRows(apiRef, props) {
327
372
 
328
373
  React.useEffect(function () {
329
374
  return function () {
330
- if (rowsCache.current.timeout !== null) {
331
- // eslint-disable-next-line react-hooks/exhaustive-deps
332
- clearTimeout(rowsCache.current.timeout);
375
+ if (timeout.current !== null) {
376
+ clearTimeout(timeout.current);
333
377
  }
334
378
  };
335
379
  }, []); // The effect do not track any value defined synchronously during the 1st render by hooks called after `useGridRows`
@@ -340,18 +384,18 @@ export var useGridRows = function useGridRows(apiRef, props) {
340
384
  if (isFirstRender.current) {
341
385
  isFirstRender.current = false;
342
386
  return;
343
- } // The new rows have already been applied (most likely in the `GridEvents.rowGroupsPreProcessingChange` listener)
387
+ } // The new rows have already been applied (most likely in the `'rowGroupsPreProcessingChange'` listener)
344
388
 
345
389
 
346
- if (rowsCache.current.state.rowsBeforePartialUpdates === props.rows) {
390
+ if (apiRef.current.unstable_caches.rows.rowsBeforePartialUpdates === props.rows) {
347
391
  return;
348
392
  }
349
393
 
350
394
  logger.debug("Updating all rows, new length ".concat(props.rows.length));
351
- throttledRowsChange(convertGridRowsPropToState({
395
+ throttledRowsChange(convertRowsPropToState({
352
396
  rows: props.rows,
353
397
  getRowId: props.getRowId,
354
- prevState: rowsCache.current.state
398
+ prevCache: apiRef.current.unstable_caches.rows
355
399
  }), false);
356
- }, [props.rows, props.rowCount, props.getRowId, logger, throttledRowsChange]);
400
+ }, [props.rows, props.rowCount, props.getRowId, logger, throttledRowsChange, apiRef]);
357
401
  };
@@ -3,6 +3,7 @@ import { GRID_DEFAULT_STRATEGY, useGridRegisterStrategyProcessor } from '../../c
3
3
  var flatRowTreeCreationMethod = function flatRowTreeCreationMethod(_ref) {
4
4
  var ids = _ref.ids,
5
5
  idRowsLookup = _ref.idRowsLookup,
6
+ idToIdLookup = _ref.idToIdLookup,
6
7
  previousTree = _ref.previousTree;
7
8
  var tree = {};
8
9
 
@@ -27,6 +28,7 @@ var flatRowTreeCreationMethod = function flatRowTreeCreationMethod(_ref) {
27
28
  tree: tree,
28
29
  treeDepth: 1,
29
30
  idRowsLookup: idRowsLookup,
31
+ idToIdLookup: idToIdLookup,
30
32
  ids: ids
31
33
  };
32
34
  };
@@ -15,7 +15,12 @@ function scrollIntoView(dimensions) {
15
15
  scrollTop = dimensions.scrollTop,
16
16
  offsetHeight = dimensions.offsetHeight,
17
17
  offsetTop = dimensions.offsetTop;
18
- var elementBottom = offsetTop + offsetHeight;
18
+ var elementBottom = offsetTop + offsetHeight; // Always scroll to top when cell is higher than viewport to avoid scroll jump
19
+ // See https://github.com/mui/mui-x/issues/4513 and https://github.com/mui/mui-x/issues/4514
20
+
21
+ if (offsetHeight > clientHeight) {
22
+ return offsetTop;
23
+ }
19
24
 
20
25
  if (elementBottom - clientHeight > scrollTop) {
21
26
  return elementBottom - clientHeight;
@@ -1,7 +1,6 @@
1
1
  import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
2
2
  import _extends from "@babel/runtime/helpers/esm/extends";
3
3
  import * as React from 'react';
4
- import { GridEvents } from '../../../models/events';
5
4
  import { useGridApiEventHandler } from '../../utils/useGridApiEventHandler';
6
5
  import { useGridApiMethod } from '../../utils/useGridApiMethod';
7
6
  import { useGridLogger } from '../../utils/useGridLogger';
@@ -57,7 +56,7 @@ export var useGridSelection = function useGridSelection(apiRef, props) {
57
56
  propModel: propSelectionModel,
58
57
  propOnChange: props.onSelectionModelChange,
59
58
  stateSelector: gridSelectionStateSelector,
60
- changeEvent: GridEvents.selectionChange
59
+ changeEvent: 'selectionChange'
61
60
  });
62
61
  var checkboxSelection = props.checkboxSelection,
63
62
  disableMultipleSelection = props.disableMultipleSelection,
@@ -223,6 +222,10 @@ export var useGridSelection = function useGridSelection(apiRef, props) {
223
222
  */
224
223
 
225
224
  var removeOutdatedSelection = React.useCallback(function () {
225
+ if (props.keepNonExistentRowsSelected) {
226
+ return;
227
+ }
228
+
226
229
  var currentSelection = gridSelectionStateSelector(apiRef.current.state);
227
230
  var rowsLookup = gridRowsLookupSelector(apiRef); // We clone the existing object to avoid mutating the same object returned by the selector to others part of the project
228
231
 
@@ -239,12 +242,12 @@ export var useGridSelection = function useGridSelection(apiRef, props) {
239
242
  if (hasChanged) {
240
243
  apiRef.current.setSelectionModel(Object.values(selectionLookup));
241
244
  }
242
- }, [apiRef]);
245
+ }, [apiRef, props.keepNonExistentRowsSelected]);
243
246
  var handleSingleRowSelection = React.useCallback(function (id, event) {
244
247
  var hasCtrlKey = event.metaKey || event.ctrlKey; // multiple selection is only allowed if:
245
248
  // - it is a checkboxSelection
246
249
  // - it is a keyboard selection
247
- // - CTRL is pressed
250
+ // - Ctrl is pressed
248
251
 
249
252
  var isMultipleSelectionDisabled = !checkboxSelection && !hasCtrlKey && !isKeyboardEvent(event);
250
253
  var resetSelection = !canHaveMultipleSelection || isMultipleSelectionDisabled;
@@ -376,12 +379,12 @@ export var useGridSelection = function useGridSelection(apiRef, props) {
376
379
  selectRows(apiRef.current.getAllRowIds(), true);
377
380
  }
378
381
  }, [apiRef, handleSingleRowSelection, selectRows, visibleRows.rows, canHaveMultipleSelection]);
379
- useGridApiEventHandler(apiRef, GridEvents.sortedRowsSet, removeOutdatedSelection);
380
- useGridApiEventHandler(apiRef, GridEvents.cellClick, handleCellClick);
381
- useGridApiEventHandler(apiRef, GridEvents.rowSelectionCheckboxChange, handleRowSelectionCheckboxChange);
382
- useGridApiEventHandler(apiRef, GridEvents.headerSelectionCheckboxChange, handleHeaderSelectionCheckboxChange);
383
- useGridApiEventHandler(apiRef, GridEvents.cellMouseDown, preventSelectionOnShift);
384
- useGridApiEventHandler(apiRef, GridEvents.cellKeyDown, handleCellKeyDown);
382
+ useGridApiEventHandler(apiRef, 'sortedRowsSet', removeOutdatedSelection);
383
+ useGridApiEventHandler(apiRef, 'cellClick', handleCellClick);
384
+ useGridApiEventHandler(apiRef, 'rowSelectionCheckboxChange', handleRowSelectionCheckboxChange);
385
+ useGridApiEventHandler(apiRef, 'headerSelectionCheckboxChange', handleHeaderSelectionCheckboxChange);
386
+ useGridApiEventHandler(apiRef, 'cellMouseDown', preventSelectionOnShift);
387
+ useGridApiEventHandler(apiRef, 'cellKeyDown', handleCellKeyDown);
385
388
  /**
386
389
  * EFFECTS
387
390
  */
@@ -1,7 +1,6 @@
1
1
  import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
2
2
  import _extends from "@babel/runtime/helpers/esm/extends";
3
3
  import * as React from 'react';
4
- import { GridEvents } from '../../../models/events';
5
4
  import { GridFeatureModeConstant } from '../../../models/gridFeatureMode';
6
5
  import { isEnterKey } from '../../../utils/keyboardUtils';
7
6
  import { useGridApiEventHandler } from '../../utils/useGridApiEventHandler';
@@ -37,7 +36,7 @@ export var useGridSorting = function useGridSorting(apiRef, props) {
37
36
  propModel: props.sortModel,
38
37
  propOnChange: props.onSortModelChange,
39
38
  stateSelector: gridSortModelSelector,
40
- changeEvent: GridEvents.sortModelChange
39
+ changeEvent: 'sortModelChange'
41
40
  });
42
41
  var upsertSortModel = React.useCallback(function (field, sortItem) {
43
42
  var sortModel = gridSortModelSelector(apiRef);
@@ -107,7 +106,7 @@ export var useGridSorting = function useGridSorting(apiRef, props) {
107
106
  })
108
107
  });
109
108
  });
110
- apiRef.current.publishEvent(GridEvents.sortedRowsSet);
109
+ apiRef.current.publishEvent('sortedRowsSet');
111
110
  apiRef.current.forceUpdate();
112
111
  }, [apiRef, logger, props.sortingMode]);
113
112
  var setSortModel = React.useCallback(function (model) {
@@ -219,7 +218,7 @@ export var useGridSorting = function useGridSorting(apiRef, props) {
219
218
  var handleColumnHeaderKeyDown = React.useCallback(function (_ref3, event) {
220
219
  var colDef = _ref3.colDef;
221
220
 
222
- // CTRL + Enter opens the column menu
221
+ // Ctrl + Enter opens the column menu
223
222
  if (isEnterKey(event.key) && !event.ctrlKey && !event.metaKey) {
224
223
  sortColumn(colDef, undefined, event.shiftKey);
225
224
  }
@@ -244,11 +243,11 @@ export var useGridSorting = function useGridSorting(apiRef, props) {
244
243
  apiRef.current.applySorting();
245
244
  }
246
245
  }, [apiRef]);
247
- useGridApiEventHandler(apiRef, GridEvents.columnHeaderClick, handleColumnHeaderClick);
248
- useGridApiEventHandler(apiRef, GridEvents.columnHeaderKeyDown, handleColumnHeaderKeyDown);
249
- useGridApiEventHandler(apiRef, GridEvents.rowsSet, apiRef.current.applySorting);
250
- useGridApiEventHandler(apiRef, GridEvents.columnsChange, handleColumnsChange);
251
- useGridApiEventHandler(apiRef, GridEvents.activeStrategyProcessorChange, handleStrategyProcessorChange);
246
+ useGridApiEventHandler(apiRef, 'columnHeaderClick', handleColumnHeaderClick);
247
+ useGridApiEventHandler(apiRef, 'columnHeaderKeyDown', handleColumnHeaderKeyDown);
248
+ useGridApiEventHandler(apiRef, 'rowsSet', apiRef.current.applySorting);
249
+ useGridApiEventHandler(apiRef, 'columnsChange', handleColumnsChange);
250
+ useGridApiEventHandler(apiRef, 'activeStrategyProcessorChange', handleStrategyProcessorChange);
252
251
  /**
253
252
  * 1ST RENDER
254
253
  */
@@ -13,7 +13,6 @@ import { gridDensityRowHeightSelector } from '../density/densitySelector';
13
13
  import { gridFocusCellSelector, gridTabIndexCellSelector } from '../focus/gridFocusStateSelector';
14
14
  import { gridEditRowsStateSelector } from '../editRows/gridEditRowsSelector';
15
15
  import { useGridVisibleRows } from '../../utils/useGridVisibleRows';
16
- import { GridEvents } from '../../../models/events';
17
16
  import { useGridApiEventHandler } from '../../utils/useGridApiEventHandler';
18
17
  import { clamp } from '../../../utils/utils';
19
18
  import { selectedIdsLookupSelector } from '../selection/gridSelectionSelector';
@@ -128,7 +127,7 @@ export var useGridVirtualScroller = function useGridVirtualScroller(props) {
128
127
  setContainerWidth(rootRef.current.clientWidth);
129
128
  }
130
129
  }, []);
131
- useGridApiEventHandler(apiRef, GridEvents.resize, handleResize);
130
+ useGridApiEventHandler(apiRef, 'resize', handleResize);
132
131
  var updateRenderZonePosition = React.useCallback(function (nextRenderContext) {
133
132
  var _getRenderableIndexes = getRenderableIndexes({
134
133
  firstIndex: nextRenderContext.firstRowIndex,
@@ -194,7 +193,7 @@ export var useGridVirtualScroller = function useGridVirtualScroller(props) {
194
193
  left: left,
195
194
  renderContext: initialRenderContext
196
195
  };
197
- apiRef.current.publishEvent(GridEvents.rowsScroll, params);
196
+ apiRef.current.publishEvent('rowsScroll', params);
198
197
  }, [apiRef, computeRenderContext, containerWidth, updateRenderContext]);
199
198
 
200
199
  var handleScroll = function handleScroll(event) {
@@ -216,7 +215,7 @@ export var useGridVirtualScroller = function useGridVirtualScroller(props) {
216
215
  var bottomColumnsScrolledSincePreviousRender = Math.abs(nextRenderContext.lastColumnIndex - prevRenderContext.current.lastColumnIndex);
217
216
  var shouldSetState = topRowsScrolledSincePreviousRender >= rootProps.rowThreshold || bottomRowsScrolledSincePreviousRender >= rootProps.rowThreshold || topColumnsScrolledSincePreviousRender >= rootProps.columnThreshold || bottomColumnsScrolledSincePreviousRender >= rootProps.columnThreshold || prevTotalWidth.current !== columnsTotalWidth; // TODO v6: rename event to a wider name, it's not only fired for row scrolling
218
217
 
219
- apiRef.current.publishEvent(GridEvents.rowsScroll, {
218
+ apiRef.current.publishEvent('rowsScroll', {
220
219
  top: scrollTop,
221
220
  left: scrollLeft,
222
221
  renderContext: shouldSetState ? nextRenderContext : prevRenderContext.current
@@ -232,11 +231,11 @@ export var useGridVirtualScroller = function useGridVirtualScroller(props) {
232
231
  };
233
232
 
234
233
  var handleWheel = function handleWheel(event) {
235
- apiRef.current.publishEvent(GridEvents.virtualScrollerWheel, {}, event);
234
+ apiRef.current.publishEvent('virtualScrollerWheel', {}, event);
236
235
  };
237
236
 
238
237
  var handleTouchMove = function handleTouchMove(event) {
239
- apiRef.current.publishEvent(GridEvents.virtualScrollerTouchMove, {}, event);
238
+ apiRef.current.publishEvent('virtualScrollerTouchMove', {}, event);
240
239
  };
241
240
 
242
241
  var getRows = function getRows() {
@@ -369,7 +368,7 @@ export var useGridVirtualScroller = function useGridVirtualScroller(props) {
369
368
  return size;
370
369
  }, [rootRef, columnsTotalWidth, rowsMeta.currentPageTotalHeight, currentPage.rows.length, needsHorizontalScrollbar, rootProps.autoHeight, rowHeight]);
371
370
  React.useEffect(function () {
372
- apiRef.current.publishEvent(GridEvents.virtualScrollerContentSizeChange);
371
+ apiRef.current.publishEvent('virtualScrollerContentSizeChange');
373
372
  }, [apiRef, contentSize]);
374
373
 
375
374
  if (rootProps.autoHeight && currentPage.rows.length === 0) {
@@ -9,22 +9,27 @@ import { FinalizationRegistryBasedCleanupTracking } from '../../utils/cleanupTra
9
9
  * Signal to the underlying logic what version of the public component API
10
10
  * of the data grid is exposed.
11
11
  */
12
- var GridSignature; // We use class to make it easier to detect in heap snapshots by name
12
+ var GridSignature;
13
13
 
14
14
  (function (GridSignature) {
15
15
  GridSignature["DataGrid"] = "DataGrid";
16
16
  GridSignature["DataGridPro"] = "DataGridPro";
17
17
  })(GridSignature || (GridSignature = {}));
18
18
 
19
+ // We use class to make it easier to detect in heap snapshots by name
19
20
  var ObjectToBeRetainedByReact = /*#__PURE__*/_createClass(function ObjectToBeRetainedByReact() {
20
21
  _classCallCheck(this, ObjectToBeRetainedByReact);
21
22
  }); // Based on https://github.com/Bnaya/use-dispose-uncommitted/blob/main/src/finalization-registry-based-impl.ts
22
23
  // Check https://github.com/facebook/react/issues/15317 to get more information
23
24
 
24
25
 
25
- export function createUseGridApiEventHandler(registry) {
26
+ export function createUseGridApiEventHandler(registryContainer) {
26
27
  var cleanupTokensCounter = 0;
27
28
  return function useGridApiEventHandler(apiRef, eventName, handler, options) {
29
+ if (registryContainer.registry === null) {
30
+ registryContainer.registry = typeof FinalizationRegistry !== 'undefined' ? new FinalizationRegistryBasedCleanupTracking() : new TimerBasedCleanupTracking();
31
+ }
32
+
28
33
  var _React$useState = React.useState(new ObjectToBeRetainedByReact()),
29
34
  _React$useState2 = _slicedToArray(_React$useState, 1),
30
35
  objectRetainedByReact = _React$useState2[0];
@@ -48,7 +53,7 @@ export function createUseGridApiEventHandler(registry) {
48
53
  cleanupTokenRef.current = {
49
54
  cleanupToken: cleanupTokensCounter
50
55
  };
51
- registry.register(objectRetainedByReact, // The callback below will be called once this reference stops being retained
56
+ registryContainer.registry.register(objectRetainedByReact, // The callback below will be called once this reference stops being retained
52
57
  function () {
53
58
  var _subscription$current;
54
59
 
@@ -61,7 +66,7 @@ export function createUseGridApiEventHandler(registry) {
61
66
  subscription.current = null;
62
67
 
63
68
  if (cleanupTokenRef.current) {
64
- registry.unregister(cleanupTokenRef.current);
69
+ registryContainer.registry.unregister(cleanupTokenRef.current);
65
70
  cleanupTokenRef.current = null;
66
71
  }
67
72
  }
@@ -79,10 +84,10 @@ export function createUseGridApiEventHandler(registry) {
79
84
  subscription.current = apiRef.current.subscribeEvent(eventName, _enhancedHandler, options);
80
85
  }
81
86
 
82
- if (cleanupTokenRef.current && registry) {
87
+ if (cleanupTokenRef.current && registryContainer.registry) {
83
88
  // If the effect was called, it means that this render was committed
84
89
  // so we can trust the cleanup function to remove the listener.
85
- registry.unregister(cleanupTokenRef.current);
90
+ registryContainer.registry.unregister(cleanupTokenRef.current);
86
91
  cleanupTokenRef.current = null;
87
92
  }
88
93
 
@@ -95,12 +100,18 @@ export function createUseGridApiEventHandler(registry) {
95
100
  }, [apiRef, eventName, options]);
96
101
  };
97
102
  }
98
- var registry = typeof FinalizationRegistry !== 'undefined' ? new FinalizationRegistryBasedCleanupTracking() : new TimerBasedCleanupTracking(); // eslint-disable-next-line @typescript-eslint/naming-convention
103
+ var registryContainer = {
104
+ registry: null
105
+ }; // TODO: move to @mui/x-data-grid/internals
106
+ // eslint-disable-next-line @typescript-eslint/naming-convention
99
107
 
100
108
  export var unstable_resetCleanupTracking = function unstable_resetCleanupTracking() {
101
- return registry.reset();
109
+ var _registryContainer$re;
110
+
111
+ (_registryContainer$re = registryContainer.registry) == null ? void 0 : _registryContainer$re.reset();
112
+ registryContainer.registry = null;
102
113
  };
103
- export var useGridApiEventHandler = createUseGridApiEventHandler(registry);
114
+ export var useGridApiEventHandler = createUseGridApiEventHandler(registryContainer);
104
115
  var optionsSubscriberOptions = {
105
116
  isFirst: true
106
117
  };
@@ -1,6 +1,5 @@
1
1
  import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
2
2
  import * as React from 'react';
3
- import { GridEvents } from '../../models/events';
4
3
  import { isFunction } from '../../utils/utils';
5
4
  import { useGridLogger } from './useGridLogger';
6
5
  export var useGridNativeEventListener = function useGridNativeEventListener(apiRef, ref, eventName, handler, options) {
@@ -38,7 +37,7 @@ export var useGridNativeEventListener = function useGridNativeEventListener(apiR
38
37
  boundElem.removeEventListener(eventName, wrapHandler, options);
39
38
  };
40
39
 
41
- apiRef.current.subscribeEvent(GridEvents.unmount, unsubscribe);
40
+ apiRef.current.subscribeEvent('unmount', unsubscribe);
42
41
  }
43
42
  }, [ref, wrapHandler, eventName, added, logger, options, apiRef]);
44
43
  };
@@ -1,7 +1,7 @@
1
1
  import { buildWarning } from '../../utils/warning';
2
2
 
3
3
  function isOutputSelector(selector) {
4
- return selector.cache;
4
+ return selector.acceptsApiRef;
5
5
  }
6
6
 
7
7
  var stateNotInitializedWarning = buildWarning(['MUI: `useGridSelector` has been called before the initialization of the state.', 'This hook can only be used inside the context of the grid.']);