@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,8 +11,6 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
11
11
 
12
12
  var React = _interopRequireWildcard(require("react"));
13
13
 
14
- var _events = require("../../../models/events");
15
-
16
14
  var _useGridApiMethod = require("../../utils/useGridApiMethod");
17
15
 
18
16
  var _useGridLogger = require("../../utils/useGridLogger");
@@ -23,83 +21,31 @@ var _useGridApiEventHandler = require("../../utils/useGridApiEventHandler");
23
21
 
24
22
  var _useGridVisibleRows = require("../../utils/useGridVisibleRows");
25
23
 
26
- var _gridRowsUtils = require("./gridRowsUtils");
24
+ var _gridSortingSelector = require("../sorting/gridSortingSelector");
27
25
 
28
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
26
+ var _gridFilterSelector = require("../filter/gridFilterSelector");
29
27
 
30
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
28
+ var _gridRowsUtils = require("./gridRowsUtils");
31
29
 
32
- function getGridRowId(rowModel, getRowId, detailErrorMessage) {
33
- const id = getRowId ? getRowId(rowModel) : rowModel.id;
34
- (0, _gridRowsUtils.checkGridRowIdIsValid)(id, rowModel, detailErrorMessage);
35
- return id;
36
- }
37
-
38
- const convertGridRowsPropToState = ({
39
- prevState,
40
- rows,
41
- getRowId
42
- }) => {
43
- let value;
44
-
45
- if (rows) {
46
- value = {
47
- idRowsLookup: {},
48
- ids: []
49
- };
30
+ var _pipeProcessing = require("../../core/pipeProcessing");
50
31
 
51
- for (let i = 0; i < rows.length; i += 1) {
52
- const row = rows[i];
53
- const id = getGridRowId(row, getRowId);
54
- value.idRowsLookup[id] = row;
55
- value.ids.push(id);
56
- }
57
- } else {
58
- value = prevState.value;
59
- }
60
-
61
- return {
62
- value,
63
- rowsBeforePartialUpdates: rows != null ? rows : prevState.rowsBeforePartialUpdates
64
- };
65
- };
32
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
66
33
 
67
- const getRowsStateFromCache = (rowsCache, previousTree, apiRef, rowCountProp, loadingProp) => {
68
- const {
69
- value
70
- } = rowsCache.state;
71
- const rowCount = rowCountProp != null ? rowCountProp : 0;
72
- const groupingResponse = apiRef.current.unstable_applyStrategyProcessor('rowTreeCreation', (0, _extends2.default)({}, value, {
73
- previousTree
74
- }));
75
- const dataTopLevelRowCount = groupingResponse.treeDepth === 1 ? groupingResponse.ids.length : Object.values(groupingResponse.tree).filter(node => node.parent == null).length;
76
- return (0, _extends2.default)({}, groupingResponse, {
77
- loading: loadingProp,
78
- totalRowCount: Math.max(rowCount, groupingResponse.ids.length),
79
- totalTopLevelRowCount: Math.max(rowCount, dataTopLevelRowCount)
80
- });
81
- };
34
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
82
35
 
83
36
  const rowsStateInitializer = (state, props, apiRef) => {
84
- const rowsCache = {
85
- state: convertGridRowsPropToState({
86
- rows: props.rows,
87
- getRowId: props.getRowId,
88
- prevState: {
89
- value: {
90
- idRowsLookup: {},
91
- ids: []
92
- },
93
- rowsBeforePartialUpdates: []
94
- }
95
- }),
96
- timeout: null,
97
- lastUpdateMs: Date.now()
98
- };
37
+ apiRef.current.unstable_caches.rows = (0, _gridRowsUtils.createRowsInternalCache)({
38
+ rows: props.rows,
39
+ getRowId: props.getRowId,
40
+ loading: props.loading
41
+ });
99
42
  return (0, _extends2.default)({}, state, {
100
- rows: getRowsStateFromCache(rowsCache, null, apiRef, props.rowCount, props.loading),
101
- rowsCache // TODO remove from state
102
-
43
+ rows: (0, _gridRowsUtils.getRowsStateFromCache)({
44
+ apiRef,
45
+ previousTree: null,
46
+ rowCountProp: props.rowCount,
47
+ loadingProp: props.loading
48
+ })
103
49
  });
104
50
  };
105
51
 
@@ -112,9 +58,9 @@ const useGridRows = (apiRef, props) => {
112
58
  }
113
59
 
114
60
  const logger = (0, _useGridLogger.useGridLogger)(apiRef, 'useGridRows');
115
- const rowsCache = React.useRef(apiRef.current.state.rowsCache); // To avoid listing rowsCache as useEffect dep
116
-
117
61
  const currentPage = (0, _useGridVisibleRows.useGridVisibleRows)(apiRef, props);
62
+ const lastUpdateMs = React.useRef(Date.now());
63
+ const timeout = React.useRef(null);
118
64
  const getRow = React.useCallback(id => {
119
65
  var _ref;
120
66
 
@@ -126,33 +72,38 @@ const useGridRows = (apiRef, props) => {
126
72
  acc[id] = index;
127
73
  return acc;
128
74
  }, {}), [currentPage.rows]);
129
- const throttledRowsChange = React.useCallback((newState, throttle) => {
75
+ const throttledRowsChange = React.useCallback((newCache, throttle) => {
130
76
  const run = () => {
131
- rowsCache.current.timeout = null;
132
- rowsCache.current.lastUpdateMs = Date.now();
77
+ timeout.current = null;
78
+ lastUpdateMs.current = Date.now();
133
79
  apiRef.current.setState(state => (0, _extends2.default)({}, state, {
134
- rows: getRowsStateFromCache(rowsCache.current, (0, _gridRowsSelector.gridRowTreeSelector)(apiRef), apiRef, props.rowCount, props.loading)
80
+ rows: (0, _gridRowsUtils.getRowsStateFromCache)({
81
+ apiRef,
82
+ previousTree: (0, _gridRowsSelector.gridRowTreeSelector)(apiRef),
83
+ rowCountProp: props.rowCount,
84
+ loadingProp: props.loading
85
+ })
135
86
  }));
136
- apiRef.current.publishEvent(_events.GridEvents.rowsSet);
87
+ apiRef.current.publishEvent('rowsSet');
137
88
  apiRef.current.forceUpdate();
138
89
  };
139
90
 
140
- if (rowsCache.current.timeout) {
141
- clearTimeout(rowsCache.current.timeout);
91
+ if (timeout.current) {
92
+ clearTimeout(timeout.current);
93
+ timeout.current = null;
142
94
  }
143
95
 
144
- rowsCache.current.state = newState;
145
- rowsCache.current.timeout = null;
96
+ apiRef.current.unstable_caches.rows = newCache;
146
97
 
147
98
  if (!throttle) {
148
99
  run();
149
100
  return;
150
101
  }
151
102
 
152
- const throttleRemainingTimeMs = props.throttleRowsMs - (Date.now() - rowsCache.current.lastUpdateMs);
103
+ const throttleRemainingTimeMs = props.throttleRowsMs - (Date.now() - lastUpdateMs.current);
153
104
 
154
105
  if (throttleRemainingTimeMs > 0) {
155
- rowsCache.current.timeout = setTimeout(run, throttleRemainingTimeMs);
106
+ timeout.current = setTimeout(run, throttleRemainingTimeMs);
156
107
  return;
157
108
  }
158
109
 
@@ -164,12 +115,12 @@ const useGridRows = (apiRef, props) => {
164
115
 
165
116
  const setRows = React.useCallback(rows => {
166
117
  logger.debug(`Updating all rows, new length ${rows.length}`);
167
- throttledRowsChange(convertGridRowsPropToState({
118
+ throttledRowsChange((0, _gridRowsUtils.createRowsInternalCache)({
168
119
  rows,
169
- prevState: rowsCache.current.state,
170
- getRowId: props.getRowId
120
+ getRowId: props.getRowId,
121
+ loading: props.loading
171
122
  }), true);
172
- }, [logger, props.getRowId, throttledRowsChange]);
123
+ }, [logger, props.getRowId, props.loading, throttledRowsChange]);
173
124
  const updateRows = React.useCallback(updates => {
174
125
  if (props.signature === _useGridApiEventHandler.GridSignature.DataGrid && updates.length > 1) {
175
126
  // TODO: Add test with direct call to `apiRef.current.updateRows` in DataGrid after enabling the `apiRef` on the free plan.
@@ -179,7 +130,7 @@ const useGridRows = (apiRef, props) => {
179
130
 
180
131
  const uniqUpdates = new Map();
181
132
  updates.forEach(update => {
182
- const id = getGridRowId(update, props.getRowId, 'A row was provided without id when calling updateRows():');
133
+ const id = (0, _gridRowsUtils.getRowIdFromRowModel)(update, props.getRowId, 'A row was provided without id when calling updateRows():');
183
134
 
184
135
  if (uniqUpdates.has(id)) {
185
136
  uniqUpdates.set(id, (0, _extends2.default)({}, uniqUpdates.get(id), update));
@@ -188,14 +139,19 @@ const useGridRows = (apiRef, props) => {
188
139
  }
189
140
  });
190
141
  const deletedRowIds = [];
191
- const newStateValue = {
192
- idRowsLookup: (0, _extends2.default)({}, rowsCache.current.state.value.idRowsLookup),
193
- ids: [...rowsCache.current.state.value.ids]
142
+ const prevCache = apiRef.current.unstable_caches.rows;
143
+ const newCache = {
144
+ rowsBeforePartialUpdates: prevCache.rowsBeforePartialUpdates,
145
+ loadingPropBeforePartialUpdates: prevCache.loadingPropBeforePartialUpdates,
146
+ idRowsLookup: (0, _extends2.default)({}, prevCache.idRowsLookup),
147
+ idToIdLookup: (0, _extends2.default)({}, prevCache.idToIdLookup),
148
+ ids: [...prevCache.ids]
194
149
  };
195
150
  uniqUpdates.forEach((partialRow, id) => {
196
151
  // eslint-disable-next-line no-underscore-dangle
197
152
  if (partialRow._action === 'delete') {
198
- delete newStateValue.idRowsLookup[id];
153
+ delete newCache.idRowsLookup[id];
154
+ delete newCache.idToIdLookup[id];
199
155
  deletedRowIds.push(id);
200
156
  return;
201
157
  }
@@ -203,23 +159,21 @@ const useGridRows = (apiRef, props) => {
203
159
  const oldRow = apiRef.current.getRow(id);
204
160
 
205
161
  if (!oldRow) {
206
- newStateValue.idRowsLookup[id] = partialRow;
207
- newStateValue.ids.push(id);
162
+ newCache.idRowsLookup[id] = partialRow;
163
+ newCache.idToIdLookup[id] = id;
164
+ newCache.ids.push(id);
208
165
  return;
209
166
  }
210
167
 
211
- newStateValue.idRowsLookup[id] = (0, _extends2.default)({}, apiRef.current.getRow(id), partialRow);
168
+ newCache.idRowsLookup[id] = (0, _extends2.default)({}, apiRef.current.getRow(id), partialRow);
212
169
  });
213
170
 
214
171
  if (deletedRowIds.length > 0) {
215
- newStateValue.ids = newStateValue.ids.filter(id => !deletedRowIds.includes(id));
172
+ newCache.ids = newCache.ids.filter(id => !deletedRowIds.includes(id));
216
173
  }
217
174
 
218
- const state = (0, _extends2.default)({}, rowsCache.current.state, {
219
- value: newStateValue
220
- });
221
- throttledRowsChange(state, true);
222
- }, [apiRef, props.getRowId, throttledRowsChange, props.signature]);
175
+ throttledRowsChange(newCache, true);
176
+ }, [props.signature, props.getRowId, throttledRowsChange, apiRef]);
223
177
  const getRowModels = React.useCallback(() => {
224
178
  const allRows = (0, _gridRowsSelector.gridRowIdsSelector)(apiRef);
225
179
  const idRowsLookup = (0, _gridRowsSelector.gridRowsLookupSelector)(apiRef);
@@ -248,23 +202,82 @@ const useGridRows = (apiRef, props) => {
248
202
  });
249
203
  });
250
204
  apiRef.current.forceUpdate();
251
- apiRef.current.publishEvent(_events.GridEvents.rowExpansionChange, newNode);
205
+ apiRef.current.publishEvent('rowExpansionChange', newNode);
252
206
  }, [apiRef]);
253
207
  const getRowNode = React.useCallback(id => {
254
208
  var _gridRowTreeSelector$;
255
209
 
256
210
  return (_gridRowTreeSelector$ = (0, _gridRowsSelector.gridRowTreeSelector)(apiRef)[id]) != null ? _gridRowTreeSelector$ : null;
257
211
  }, [apiRef]);
212
+ const getRowGroupChildren = React.useCallback(({
213
+ skipAutoGeneratedRows = true,
214
+ groupId,
215
+ applySorting,
216
+ applyFiltering
217
+ }) => {
218
+ const tree = (0, _gridRowsSelector.gridRowTreeSelector)(apiRef);
219
+ let children;
220
+
221
+ if (applySorting) {
222
+ const groupNode = tree[groupId];
223
+
224
+ if (!groupNode) {
225
+ return [];
226
+ }
227
+
228
+ const sortedRowIds = (0, _gridSortingSelector.gridSortedRowIdsSelector)(apiRef);
229
+ children = [];
230
+ const startIndex = sortedRowIds.findIndex(id => id === groupId) + 1;
231
+
232
+ for (let index = startIndex; index < sortedRowIds.length && tree[sortedRowIds[index]].depth > groupNode.depth; index += 1) {
233
+ const id = sortedRowIds[index];
234
+ const node = tree[id];
235
+
236
+ if (!skipAutoGeneratedRows || !node.isAutoGenerated) {
237
+ children.push(id);
238
+ }
239
+ }
240
+ } else {
241
+ children = (0, _gridRowsUtils.getTreeNodeDescendants)(tree, groupId, skipAutoGeneratedRows);
242
+ }
243
+
244
+ if (applyFiltering) {
245
+ const filteredRowsLookup = (0, _gridFilterSelector.gridFilteredRowsLookupSelector)(apiRef);
246
+ children = children.filter(childId => filteredRowsLookup[childId] !== false);
247
+ }
248
+
249
+ return children;
250
+ }, [apiRef]);
251
+ const setRowIndex = React.useCallback((rowId, targetIndex) => {
252
+ const allRows = (0, _gridRowsSelector.gridRowIdsSelector)(apiRef);
253
+ const oldIndex = allRows.findIndex(row => row === rowId);
254
+
255
+ if (oldIndex === -1 || oldIndex === targetIndex) {
256
+ return;
257
+ }
258
+
259
+ logger.debug(`Moving row ${rowId} to index ${targetIndex}`);
260
+ const updatedRows = [...allRows];
261
+ updatedRows.splice(targetIndex, 0, updatedRows.splice(oldIndex, 1)[0]);
262
+ apiRef.current.setState(state => (0, _extends2.default)({}, state, {
263
+ rows: (0, _extends2.default)({}, state.rows, {
264
+ ids: updatedRows
265
+ })
266
+ }));
267
+ apiRef.current.applySorting();
268
+ }, [apiRef, logger]);
258
269
  const rowApi = {
259
270
  getRow,
260
271
  getRowModels,
261
272
  getRowsCount,
262
273
  getAllRowIds,
263
274
  setRows,
275
+ setRowIndex,
264
276
  updateRows,
265
277
  setRowChildrenExpansion,
266
278
  getRowNode,
267
- getRowIndexRelativeToVisibleRows
279
+ getRowIndexRelativeToVisibleRows,
280
+ getRowGroupChildren
268
281
  };
269
282
  /**
270
283
  * EVENTS
@@ -272,25 +285,25 @@ const useGridRows = (apiRef, props) => {
272
285
 
273
286
  const groupRows = React.useCallback(() => {
274
287
  logger.info(`Row grouping pre-processing have changed, regenerating the row tree`);
275
- let rows;
288
+ let cache;
276
289
 
277
- if (rowsCache.current.state.rowsBeforePartialUpdates === props.rows) {
278
- // The `props.rows` has not changed since the last row grouping
279
- // We can keep the potential updates stored in `inputRowsAfterUpdates` on the new grouping
280
- rows = undefined;
290
+ if (apiRef.current.unstable_caches.rows.rowsBeforePartialUpdates === props.rows) {
291
+ // The `props.rows` did not change since the last row grouping
292
+ // We can use the current rows cache which contains the partial updates done recently.
293
+ cache = apiRef.current.unstable_caches.rows;
281
294
  } else {
282
295
  // The `props.rows` has changed since the last row grouping
283
296
  // We must use the new `props.rows` on the new grouping
284
297
  // This occurs because this event is triggered before the `useEffect` on the rows when both the grouping pre-processing and the rows changes on the same render
285
- rows = props.rows;
298
+ cache = (0, _gridRowsUtils.createRowsInternalCache)({
299
+ rows: props.rows,
300
+ getRowId: props.getRowId,
301
+ loading: props.loading
302
+ });
286
303
  }
287
304
 
288
- throttledRowsChange(convertGridRowsPropToState({
289
- rows,
290
- getRowId: props.getRowId,
291
- prevState: rowsCache.current.state
292
- }), false);
293
- }, [logger, throttledRowsChange, props.getRowId, props.rows]);
305
+ throttledRowsChange(cache, false);
306
+ }, [logger, apiRef, props.rows, props.getRowId, props.loading, throttledRowsChange]);
294
307
  const handleStrategyProcessorChange = React.useCallback(methodName => {
295
308
  if (methodName === 'rowTreeCreation') {
296
309
  groupRows();
@@ -303,8 +316,20 @@ const useGridRows = (apiRef, props) => {
303
316
  groupRows();
304
317
  }
305
318
  }, [apiRef, groupRows]);
306
- (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, _events.GridEvents.activeStrategyProcessorChange, handleStrategyProcessorChange);
307
- (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, _events.GridEvents.strategyAvailabilityChange, handleStrategyActivityChange);
319
+ (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'activeStrategyProcessorChange', handleStrategyProcessorChange);
320
+ (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'strategyAvailabilityChange', handleStrategyActivityChange);
321
+ /**
322
+ * APPLIERS
323
+ */
324
+
325
+ const applyHydrateRowsProcessor = React.useCallback(() => {
326
+ apiRef.current.setState(state => (0, _extends2.default)({}, state, {
327
+ rows: (0, _extends2.default)({}, state.rows, apiRef.current.unstable_applyPipeProcessors('hydrateRows', state.rows.groupingResponseBeforeRowHydration))
328
+ }));
329
+ apiRef.current.publishEvent('rowsSet');
330
+ apiRef.current.forceUpdate();
331
+ }, [apiRef]);
332
+ (0, _pipeProcessing.useGridRegisterPipeApplier)(apiRef, 'hydrateRows', applyHydrateRowsProcessor);
308
333
  (0, _useGridApiMethod.useGridApiMethod)(apiRef, rowApi, 'GridRowApi');
309
334
  /**
310
335
  * EFFECTS
@@ -312,9 +337,8 @@ const useGridRows = (apiRef, props) => {
312
337
 
313
338
  React.useEffect(() => {
314
339
  return () => {
315
- if (rowsCache.current.timeout !== null) {
316
- // eslint-disable-next-line react-hooks/exhaustive-deps
317
- clearTimeout(rowsCache.current.timeout);
340
+ if (timeout.current !== null) {
341
+ clearTimeout(timeout.current);
318
342
  }
319
343
  };
320
344
  }, []); // The effect do not track any value defined synchronously during the 1st render by hooks called after `useGridRows`
@@ -325,20 +349,20 @@ const useGridRows = (apiRef, props) => {
325
349
  if (isFirstRender.current) {
326
350
  isFirstRender.current = false;
327
351
  return;
328
- } // The new rows have already been applied (most likely in the `GridEvents.rowGroupsPreProcessingChange` listener)
352
+ } // The new rows have already been applied (most likely in the `'rowGroupsPreProcessingChange'` listener)
329
353
 
330
354
 
331
- if (rowsCache.current.state.rowsBeforePartialUpdates === props.rows) {
355
+ if (apiRef.current.unstable_caches.rows.rowsBeforePartialUpdates === props.rows && apiRef.current.unstable_caches.rows.loadingPropBeforePartialUpdates === props.loading) {
332
356
  return;
333
357
  }
334
358
 
335
359
  logger.debug(`Updating all rows, new length ${props.rows.length}`);
336
- throttledRowsChange(convertGridRowsPropToState({
360
+ throttledRowsChange((0, _gridRowsUtils.createRowsInternalCache)({
337
361
  rows: props.rows,
338
362
  getRowId: props.getRowId,
339
- prevState: rowsCache.current.state
363
+ loading: props.loading
340
364
  }), false);
341
- }, [props.rows, props.rowCount, props.getRowId, logger, throttledRowsChange]);
365
+ }, [props.rows, props.rowCount, props.getRowId, props.loading, logger, throttledRowsChange, apiRef]);
342
366
  };
343
367
 
344
368
  exports.useGridRows = useGridRows;
@@ -10,6 +10,7 @@ var _strategyProcessing = require("../../core/strategyProcessing");
10
10
  const flatRowTreeCreationMethod = ({
11
11
  ids,
12
12
  idRowsLookup,
13
+ idToIdLookup,
13
14
  previousTree
14
15
  }) => {
15
16
  const tree = {};
@@ -35,6 +36,7 @@ const flatRowTreeCreationMethod = ({
35
36
  tree,
36
37
  treeDepth: 1,
37
38
  idRowsLookup,
39
+ idToIdLookup,
38
40
  ids
39
41
  };
40
42
  };
@@ -36,7 +36,12 @@ function scrollIntoView(dimensions) {
36
36
  offsetHeight,
37
37
  offsetTop
38
38
  } = dimensions;
39
- const elementBottom = offsetTop + offsetHeight;
39
+ const elementBottom = offsetTop + offsetHeight; // Always scroll to top when cell is higher than viewport to avoid scroll jump
40
+ // See https://github.com/mui/mui-x/issues/4513 and https://github.com/mui/mui-x/issues/4514
41
+
42
+ if (offsetHeight > clientHeight) {
43
+ return offsetTop;
44
+ }
40
45
 
41
46
  if (elementBottom - clientHeight > scrollTop) {
42
47
  return elementBottom - clientHeight;
@@ -11,8 +11,6 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
11
11
 
12
12
  var React = _interopRequireWildcard(require("react"));
13
13
 
14
- var _events = require("../../../models/events");
15
-
16
14
  var _useGridApiEventHandler = require("../../utils/useGridApiEventHandler");
17
15
 
18
16
  var _useGridApiMethod = require("../../utils/useGridApiMethod");
@@ -87,7 +85,7 @@ const useGridSelection = (apiRef, props) => {
87
85
  propModel: propSelectionModel,
88
86
  propOnChange: props.onSelectionModelChange,
89
87
  stateSelector: _gridSelectionSelector.gridSelectionStateSelector,
90
- changeEvent: _events.GridEvents.selectionChange
88
+ changeEvent: 'selectionChange'
91
89
  });
92
90
  const {
93
91
  checkboxSelection,
@@ -228,6 +226,10 @@ const useGridSelection = (apiRef, props) => {
228
226
  */
229
227
 
230
228
  const removeOutdatedSelection = React.useCallback(() => {
229
+ if (props.keepNonExistentRowsSelected) {
230
+ return;
231
+ }
232
+
231
233
  const currentSelection = (0, _gridSelectionSelector.gridSelectionStateSelector)(apiRef.current.state);
232
234
  const rowsLookup = (0, _gridRowsSelector.gridRowsLookupSelector)(apiRef); // We clone the existing object to avoid mutating the same object returned by the selector to others part of the project
233
235
 
@@ -243,12 +245,12 @@ const useGridSelection = (apiRef, props) => {
243
245
  if (hasChanged) {
244
246
  apiRef.current.setSelectionModel(Object.values(selectionLookup));
245
247
  }
246
- }, [apiRef]);
248
+ }, [apiRef, props.keepNonExistentRowsSelected]);
247
249
  const handleSingleRowSelection = React.useCallback((id, event) => {
248
250
  const hasCtrlKey = event.metaKey || event.ctrlKey; // multiple selection is only allowed if:
249
251
  // - it is a checkboxSelection
250
252
  // - it is a keyboard selection
251
- // - CTRL is pressed
253
+ // - Ctrl is pressed
252
254
 
253
255
  const isMultipleSelectionDisabled = !checkboxSelection && !hasCtrlKey && !(0, _keyboardUtils.isKeyboardEvent)(event);
254
256
  const resetSelection = !canHaveMultipleSelection || isMultipleSelectionDisabled;
@@ -378,12 +380,12 @@ const useGridSelection = (apiRef, props) => {
378
380
  selectRows(apiRef.current.getAllRowIds(), true);
379
381
  }
380
382
  }, [apiRef, handleSingleRowSelection, selectRows, visibleRows.rows, canHaveMultipleSelection]);
381
- (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, _events.GridEvents.sortedRowsSet, removeOutdatedSelection);
382
- (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, _events.GridEvents.cellClick, handleCellClick);
383
- (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, _events.GridEvents.rowSelectionCheckboxChange, handleRowSelectionCheckboxChange);
384
- (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, _events.GridEvents.headerSelectionCheckboxChange, handleHeaderSelectionCheckboxChange);
385
- (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, _events.GridEvents.cellMouseDown, preventSelectionOnShift);
386
- (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, _events.GridEvents.cellKeyDown, handleCellKeyDown);
383
+ (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'sortedRowsSet', removeOutdatedSelection);
384
+ (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'cellClick', handleCellClick);
385
+ (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'rowSelectionCheckboxChange', handleRowSelectionCheckboxChange);
386
+ (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'headerSelectionCheckboxChange', handleHeaderSelectionCheckboxChange);
387
+ (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'cellMouseDown', preventSelectionOnShift);
388
+ (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'cellKeyDown', handleCellKeyDown);
387
389
  /**
388
390
  * EFFECTS
389
391
  */
@@ -11,8 +11,6 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
11
11
 
12
12
  var React = _interopRequireWildcard(require("react"));
13
13
 
14
- var _events = require("../../../models/events");
15
-
16
14
  var _gridFeatureMode = require("../../../models/gridFeatureMode");
17
15
 
18
16
  var _keyboardUtils = require("../../../utils/keyboardUtils");
@@ -67,7 +65,7 @@ const useGridSorting = (apiRef, props) => {
67
65
  propModel: props.sortModel,
68
66
  propOnChange: props.onSortModelChange,
69
67
  stateSelector: _gridSortingSelector.gridSortModelSelector,
70
- changeEvent: _events.GridEvents.sortModelChange
68
+ changeEvent: 'sortModelChange'
71
69
  });
72
70
  const upsertSortModel = React.useCallback((field, sortItem) => {
73
71
  const sortModel = (0, _gridSortingSelector.gridSortModelSelector)(apiRef);
@@ -132,7 +130,7 @@ const useGridSorting = (apiRef, props) => {
132
130
  })
133
131
  });
134
132
  });
135
- apiRef.current.publishEvent(_events.GridEvents.sortedRowsSet);
133
+ apiRef.current.publishEvent('sortedRowsSet');
136
134
  apiRef.current.forceUpdate();
137
135
  }, [apiRef, logger, props.sortingMode]);
138
136
  const setSortModel = React.useCallback(model => {
@@ -235,7 +233,7 @@ const useGridSorting = (apiRef, props) => {
235
233
  const handleColumnHeaderKeyDown = React.useCallback(({
236
234
  colDef
237
235
  }, event) => {
238
- // CTRL + Enter opens the column menu
236
+ // Ctrl + Enter opens the column menu
239
237
  if ((0, _keyboardUtils.isEnterKey)(event.key) && !event.ctrlKey && !event.metaKey) {
240
238
  sortColumn(colDef, undefined, event.shiftKey);
241
239
  }
@@ -258,11 +256,11 @@ const useGridSorting = (apiRef, props) => {
258
256
  apiRef.current.applySorting();
259
257
  }
260
258
  }, [apiRef]);
261
- (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, _events.GridEvents.columnHeaderClick, handleColumnHeaderClick);
262
- (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, _events.GridEvents.columnHeaderKeyDown, handleColumnHeaderKeyDown);
263
- (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, _events.GridEvents.rowsSet, apiRef.current.applySorting);
264
- (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, _events.GridEvents.columnsChange, handleColumnsChange);
265
- (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, _events.GridEvents.activeStrategyProcessorChange, handleStrategyProcessorChange);
259
+ (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'columnHeaderClick', handleColumnHeaderClick);
260
+ (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'columnHeaderKeyDown', handleColumnHeaderKeyDown);
261
+ (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'rowsSet', apiRef.current.applySorting);
262
+ (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'columnsChange', handleColumnsChange);
263
+ (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'activeStrategyProcessorChange', handleStrategyProcessorChange);
266
264
  /**
267
265
  * 1ST RENDER
268
266
  */
@@ -34,8 +34,6 @@ var _gridEditRowsSelector = require("../editRows/gridEditRowsSelector");
34
34
 
35
35
  var _useGridVisibleRows = require("../../utils/useGridVisibleRows");
36
36
 
37
- var _events = require("../../../models/events");
38
-
39
37
  var _useGridApiEventHandler = require("../../utils/useGridApiEventHandler");
40
38
 
41
39
  var _utils2 = require("../../../utils/utils");
@@ -155,7 +153,7 @@ const useGridVirtualScroller = props => {
155
153
  setContainerWidth(rootRef.current.clientWidth);
156
154
  }
157
155
  }, []);
158
- (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, _events.GridEvents.resize, handleResize);
156
+ (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'resize', handleResize);
159
157
  const updateRenderZonePosition = React.useCallback(nextRenderContext => {
160
158
  const [firstRowToRender, lastRowToRender] = getRenderableIndexes({
161
159
  firstIndex: nextRenderContext.firstRowIndex,
@@ -215,7 +213,7 @@ const useGridVirtualScroller = props => {
215
213
  left,
216
214
  renderContext: initialRenderContext
217
215
  };
218
- apiRef.current.publishEvent(_events.GridEvents.rowsScroll, params);
216
+ apiRef.current.publishEvent('rowsScroll', params);
219
217
  }, [apiRef, computeRenderContext, containerWidth, updateRenderContext]);
220
218
 
221
219
  const handleScroll = event => {
@@ -238,7 +236,7 @@ const useGridVirtualScroller = props => {
238
236
  const bottomColumnsScrolledSincePreviousRender = Math.abs(nextRenderContext.lastColumnIndex - prevRenderContext.current.lastColumnIndex);
239
237
  const 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
240
238
 
241
- apiRef.current.publishEvent(_events.GridEvents.rowsScroll, {
239
+ apiRef.current.publishEvent('rowsScroll', {
242
240
  top: scrollTop,
243
241
  left: scrollLeft,
244
242
  renderContext: shouldSetState ? nextRenderContext : prevRenderContext.current
@@ -253,6 +251,14 @@ const useGridVirtualScroller = props => {
253
251
  }
254
252
  };
255
253
 
254
+ const handleWheel = event => {
255
+ apiRef.current.publishEvent('virtualScrollerWheel', {}, event);
256
+ };
257
+
258
+ const handleTouchMove = event => {
259
+ apiRef.current.publishEvent('virtualScrollerTouchMove', {}, event);
260
+ };
261
+
256
262
  const getRows = (params = {
257
263
  renderContext
258
264
  }) => {
@@ -373,7 +379,7 @@ const useGridVirtualScroller = props => {
373
379
  return size;
374
380
  }, [rootRef, columnsTotalWidth, rowsMeta.currentPageTotalHeight, currentPage.rows.length, needsHorizontalScrollbar, rootProps.autoHeight, rowHeight]);
375
381
  React.useEffect(() => {
376
- apiRef.current.publishEvent(_events.GridEvents.virtualScrollerContentSizeChange);
382
+ apiRef.current.publishEvent('virtualScrollerContentSizeChange');
377
383
  }, [apiRef, contentSize]);
378
384
 
379
385
  if (rootProps.autoHeight && currentPage.rows.length === 0) {
@@ -402,6 +408,8 @@ const useGridVirtualScroller = props => {
402
408
  return (0, _extends2.default)({
403
409
  ref: handleRef,
404
410
  onScroll: handleScroll,
411
+ onWheel: handleWheel,
412
+ onTouchMove: handleTouchMove,
405
413
  style: (0, _extends2.default)({}, style, rootStyle)
406
414
  }, other);
407
415
  },