@mui/x-data-grid 5.8.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 (626) hide show
  1. package/CHANGELOG.md +333 -66
  2. package/DataGrid/DataGrid.js +36 -2
  3. package/DataGrid/useDataGridComponent.js +3 -1
  4. package/DataGrid/useDataGridProps.js +2 -1
  5. package/LICENSE +21 -0
  6. package/README.md +7 -5
  7. package/colDef/gridActionsColDef.js +2 -1
  8. package/colDef/gridBooleanColDef.js +2 -1
  9. package/colDef/gridCheckboxSelectionColDef.js +1 -0
  10. package/colDef/gridDateColDef.js +4 -2
  11. package/colDef/gridNumericColDef.js +3 -2
  12. package/colDef/gridNumericOperators.d.ts +2 -0
  13. package/colDef/gridNumericOperators.js +11 -0
  14. package/colDef/gridSingleSelectColDef.js +3 -2
  15. package/colDef/gridSingleSelectOperators.d.ts +3 -0
  16. package/colDef/gridSingleSelectOperators.js +52 -0
  17. package/colDef/gridStringColDef.js +3 -2
  18. package/colDef/gridStringOperators.d.ts +2 -0
  19. package/colDef/gridStringOperators.js +12 -0
  20. package/components/GridFooter.d.ts +4 -2
  21. package/components/GridFooter.js +11 -2
  22. package/components/GridRow.d.ts +4 -0
  23. package/components/GridRow.js +58 -28
  24. package/components/GridRowCount.d.ts +4 -1
  25. package/components/GridRowCount.js +1 -0
  26. package/components/GridScrollArea.js +3 -4
  27. package/components/GridSelectedRowCount.d.ts +4 -1
  28. package/components/GridSelectedRowCount.js +2 -1
  29. package/components/base/GridBody.js +1 -2
  30. package/components/base/GridOverlays.js +5 -5
  31. package/components/cell/GridActionsCell.d.ts +5 -1
  32. package/components/cell/GridActionsCell.js +179 -21
  33. package/components/cell/GridActionsCellItem.d.ts +66 -4
  34. package/components/cell/GridActionsCellItem.js +7 -5
  35. package/components/cell/GridCell.d.ts +1 -0
  36. package/components/cell/GridCell.js +36 -15
  37. package/components/cell/GridEditBooleanCell.d.ts +15 -3
  38. package/components/cell/GridEditBooleanCell.js +101 -6
  39. package/components/cell/GridEditDateCell.d.ts +16 -4
  40. package/components/cell/GridEditDateCell.js +99 -5
  41. package/components/cell/GridEditInputCell.d.ts +11 -5
  42. package/components/cell/GridEditInputCell.js +30 -6
  43. package/components/cell/GridEditSingleSelectCell.d.ts +12 -4
  44. package/components/cell/GridEditSingleSelectCell.js +50 -18
  45. package/components/cell/index.d.ts +2 -0
  46. package/components/cell/index.js +2 -0
  47. package/components/columnHeaders/GridColumnHeaderItem.js +19 -23
  48. package/components/columnHeaders/GridColumnHeaders.d.ts +2 -1
  49. package/components/columnHeaders/GridColumnHeaders.js +1 -1
  50. package/components/columnHeaders/GridColumnHeadersInner.d.ts +2 -0
  51. package/components/columnSelection/GridCellCheckboxRenderer.d.ts +3 -3
  52. package/components/columnSelection/GridCellCheckboxRenderer.js +22 -6
  53. package/components/columnSelection/GridHeaderCheckbox.js +4 -5
  54. package/components/containers/GridFooterContainer.d.ts +8 -2
  55. package/components/containers/GridFooterContainer.js +11 -2
  56. package/components/containers/GridRootStyles.js +36 -1
  57. package/components/containers/GridToolbarContainer.d.ts +8 -2
  58. package/components/containers/GridToolbarContainer.js +12 -2
  59. package/components/menu/GridMenu.js +1 -0
  60. package/components/panel/GridPanel.js +1 -0
  61. package/components/panel/GridPanelContent.d.ts +8 -1
  62. package/components/panel/GridPanelContent.js +13 -2
  63. package/components/panel/GridPanelFooter.d.ts +8 -1
  64. package/components/panel/GridPanelFooter.js +13 -2
  65. package/components/panel/GridPanelHeader.d.ts +8 -1
  66. package/components/panel/GridPanelHeader.js +13 -2
  67. package/components/panel/filterPanel/GridFilterForm.js +14 -10
  68. package/components/panel/filterPanel/GridFilterInputBoolean.js +13 -8
  69. package/components/panel/filterPanel/GridFilterInputSingleSelect.js +22 -15
  70. package/components/panel/filterPanel/GridFilterInputValue.js +22 -15
  71. package/components/toolbar/GridToolbar.d.ts +12 -2
  72. package/components/toolbar/GridToolbar.js +30 -7
  73. package/components/toolbar/GridToolbarDensitySelector.js +1 -1
  74. package/components/toolbar/GridToolbarExport.d.ts +5 -4
  75. package/components/toolbar/GridToolbarExport.js +15 -20
  76. package/components/toolbar/GridToolbarFilterButton.d.ts +1 -1
  77. package/components/toolbar/GridToolbarQuickFilter.d.ts +20 -0
  78. package/components/toolbar/GridToolbarQuickFilter.js +88 -0
  79. package/components/toolbar/index.d.ts +3 -1
  80. package/components/toolbar/index.js +3 -2
  81. package/components/virtualization/GridVirtualScroller.d.ts +4 -1
  82. package/components/virtualization/GridVirtualScroller.js +2 -0
  83. package/components/virtualization/GridVirtualScrollerContent.d.ts +4 -1
  84. package/components/virtualization/GridVirtualScrollerContent.js +1 -3
  85. package/components/virtualization/GridVirtualScrollerRenderZone.d.ts +4 -1
  86. package/constants/defaultGridSlotsComponents.js +3 -2
  87. package/constants/gridClasses.d.ts +20 -0
  88. package/constants/gridClasses.js +1 -1
  89. package/constants/gridDetailPanelToggleField.d.ts +1 -0
  90. package/constants/gridDetailPanelToggleField.js +2 -0
  91. package/constants/localeTextConstants.js +8 -1
  92. package/hooks/core/pipeProcessing/gridPipeProcessingApi.d.ts +39 -15
  93. package/hooks/core/pipeProcessing/index.d.ts +1 -0
  94. package/hooks/core/pipeProcessing/index.js +2 -1
  95. package/hooks/core/pipeProcessing/useGridPipeProcessing.d.ts +8 -3
  96. package/hooks/core/pipeProcessing/useGridPipeProcessing.js +53 -19
  97. package/hooks/core/pipeProcessing/useGridRegisterPipeApplier.d.ts +3 -0
  98. package/hooks/core/pipeProcessing/useGridRegisterPipeApplier.js +27 -0
  99. package/hooks/core/pipeProcessing/useGridRegisterPipeProcessor.d.ts +0 -3
  100. package/hooks/core/pipeProcessing/useGridRegisterPipeProcessor.js +0 -4
  101. package/hooks/core/strategyProcessing/useGridStrategyProcessing.d.ts +4 -4
  102. package/hooks/core/strategyProcessing/useGridStrategyProcessing.js +6 -7
  103. package/hooks/core/useGridApiInitialization.js +3 -3
  104. package/hooks/core/useGridErrorHandler.js +1 -2
  105. package/hooks/core/useGridStateInitialization.js +1 -2
  106. package/hooks/features/columnHeaders/useGridColumnHeaders.d.ts +0 -1
  107. package/hooks/features/columnHeaders/useGridColumnHeaders.js +81 -16
  108. package/hooks/features/columnMenu/useGridColumnMenu.js +3 -3
  109. package/hooks/features/columns/gridColumnsInterfaces.d.ts +3 -1
  110. package/hooks/features/columns/gridColumnsUtils.d.ts +19 -1
  111. package/hooks/features/columns/gridColumnsUtils.js +61 -8
  112. package/hooks/features/columns/useGridColumnSpanning.d.ts +7 -0
  113. package/hooks/features/columns/useGridColumnSpanning.js +108 -0
  114. package/hooks/features/columns/useGridColumns.d.ts +1 -1
  115. package/hooks/features/columns/useGridColumns.js +30 -25
  116. package/hooks/features/dimensions/useGridDimensions.d.ts +1 -1
  117. package/hooks/features/dimensions/useGridDimensions.js +10 -11
  118. package/hooks/features/editRows/useGridCellEditing.new.d.ts +1 -1
  119. package/hooks/features/editRows/useGridCellEditing.new.js +151 -42
  120. package/hooks/features/editRows/useGridCellEditing.old.js +20 -21
  121. package/hooks/features/editRows/useGridEditing.new.js +7 -3
  122. package/hooks/features/editRows/useGridEditing.old.js +4 -5
  123. package/hooks/features/editRows/useGridRowEditing.new.d.ts +1 -1
  124. package/hooks/features/editRows/useGridRowEditing.new.js +145 -57
  125. package/hooks/features/editRows/useGridRowEditing.old.js +21 -22
  126. package/hooks/features/events/useGridEvents.js +17 -18
  127. package/hooks/features/export/serializers/csvSerializer.js +5 -5
  128. package/hooks/features/export/useGridCsvExport.js +23 -16
  129. package/hooks/features/export/useGridPrintExport.js +22 -0
  130. package/hooks/features/export/utils.d.ts +3 -1
  131. package/hooks/features/export/utils.js +13 -0
  132. package/hooks/features/filter/gridFilterState.d.ts +1 -2
  133. package/hooks/features/filter/gridFilterState.js +3 -1
  134. package/hooks/features/filter/gridFilterUtils.d.ts +8 -0
  135. package/hooks/features/filter/gridFilterUtils.js +84 -2
  136. package/hooks/features/filter/useGridFilter.js +32 -15
  137. package/hooks/features/focus/useGridFocus.d.ts +1 -1
  138. package/hooks/features/focus/useGridFocus.js +48 -42
  139. package/hooks/features/keyboardNavigation/useGridKeyboardNavigation.d.ts +1 -0
  140. package/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +43 -12
  141. package/hooks/features/pagination/useGridPage.js +3 -4
  142. package/hooks/features/pagination/useGridPageSize.js +2 -3
  143. package/hooks/features/preferencesPanel/useGridPreferencesPanel.js +4 -6
  144. package/hooks/features/rows/gridRowsSelector.d.ts +2 -0
  145. package/hooks/features/rows/gridRowsSelector.js +2 -0
  146. package/hooks/features/rows/gridRowsState.d.ts +7 -7
  147. package/hooks/features/rows/gridRowsUtils.d.ts +2 -1
  148. package/hooks/features/rows/gridRowsUtils.js +25 -1
  149. package/hooks/features/rows/useGridRows.d.ts +2 -2
  150. package/hooks/features/rows/useGridRows.js +121 -61
  151. package/hooks/features/rows/useGridRowsMeta.js +6 -13
  152. package/hooks/features/rows/useGridRowsPreProcessors.js +2 -0
  153. package/hooks/features/scroll/useGridScroll.d.ts +2 -0
  154. package/hooks/features/scroll/useGridScroll.js +31 -4
  155. package/hooks/features/selection/useGridSelection.d.ts +1 -1
  156. package/hooks/features/selection/useGridSelection.js +15 -11
  157. package/hooks/features/sorting/useGridSorting.js +17 -18
  158. package/hooks/features/virtualization/useGridVirtualScroller.d.ts +9 -0
  159. package/hooks/features/virtualization/useGridVirtualScroller.js +68 -32
  160. package/hooks/utils/useGridApiEventHandler.d.ts +4 -1
  161. package/hooks/utils/useGridApiEventHandler.js +22 -9
  162. package/hooks/utils/useGridNativeEventListener.js +1 -2
  163. package/hooks/utils/useGridSelector.js +1 -1
  164. package/index.d.ts +2 -0
  165. package/index.js +1 -1
  166. package/internals/index.d.ts +5 -1
  167. package/internals/index.js +6 -2
  168. package/legacy/DataGrid/DataGrid.js +36 -2
  169. package/legacy/DataGrid/useDataGridComponent.js +3 -1
  170. package/legacy/DataGrid/useDataGridProps.js +2 -1
  171. package/legacy/colDef/gridActionsColDef.js +2 -1
  172. package/legacy/colDef/gridBooleanColDef.js +2 -1
  173. package/legacy/colDef/gridCheckboxSelectionColDef.js +1 -0
  174. package/legacy/colDef/gridDateColDef.js +4 -2
  175. package/legacy/colDef/gridNumericColDef.js +3 -2
  176. package/legacy/colDef/gridNumericOperators.js +28 -18
  177. package/legacy/colDef/gridSingleSelectColDef.js +3 -2
  178. package/legacy/colDef/gridSingleSelectOperators.js +55 -6
  179. package/legacy/colDef/gridStringColDef.js +3 -2
  180. package/legacy/colDef/gridStringOperators.js +25 -14
  181. package/legacy/components/GridFooter.js +11 -2
  182. package/legacy/components/GridRow.js +56 -28
  183. package/legacy/components/GridRowCount.js +1 -0
  184. package/legacy/components/GridScrollArea.js +3 -4
  185. package/legacy/components/GridSelectedRowCount.js +2 -1
  186. package/legacy/components/base/GridBody.js +1 -2
  187. package/legacy/components/base/GridOverlays.js +5 -5
  188. package/legacy/components/cell/GridActionsCell.js +197 -27
  189. package/legacy/components/cell/GridActionsCellItem.js +7 -5
  190. package/legacy/components/cell/GridCell.js +37 -15
  191. package/legacy/components/cell/GridEditBooleanCell.js +132 -11
  192. package/legacy/components/cell/GridEditDateCell.js +148 -42
  193. package/legacy/components/cell/GridEditInputCell.js +62 -13
  194. package/legacy/components/cell/GridEditSingleSelectCell.js +65 -28
  195. package/legacy/components/cell/index.js +2 -0
  196. package/legacy/components/columnHeaders/GridColumnHeaderItem.js +19 -23
  197. package/legacy/components/columnHeaders/GridColumnHeaders.js +2 -3
  198. package/legacy/components/columnSelection/GridCellCheckboxRenderer.js +23 -6
  199. package/legacy/components/columnSelection/GridHeaderCheckbox.js +4 -5
  200. package/legacy/components/containers/GridFooterContainer.js +11 -2
  201. package/legacy/components/containers/GridRootStyles.js +26 -5
  202. package/legacy/components/containers/GridToolbarContainer.js +12 -2
  203. package/legacy/components/menu/GridMenu.js +1 -0
  204. package/legacy/components/panel/GridPanel.js +1 -0
  205. package/legacy/components/panel/GridPanelContent.js +13 -2
  206. package/legacy/components/panel/GridPanelFooter.js +13 -2
  207. package/legacy/components/panel/GridPanelHeader.js +13 -2
  208. package/legacy/components/panel/filterPanel/GridFilterForm.js +14 -10
  209. package/legacy/components/panel/filterPanel/GridFilterInputBoolean.js +13 -8
  210. package/legacy/components/panel/filterPanel/GridFilterInputSingleSelect.js +22 -17
  211. package/legacy/components/panel/filterPanel/GridFilterInputValue.js +22 -17
  212. package/legacy/components/toolbar/GridToolbar.js +31 -6
  213. package/legacy/components/toolbar/GridToolbarDensitySelector.js +1 -1
  214. package/legacy/components/toolbar/GridToolbarExport.js +18 -19
  215. package/legacy/components/toolbar/GridToolbarQuickFilter.js +103 -0
  216. package/legacy/components/toolbar/index.js +3 -2
  217. package/legacy/components/virtualization/GridVirtualScroller.js +2 -0
  218. package/legacy/components/virtualization/GridVirtualScrollerContent.js +1 -3
  219. package/legacy/constants/defaultGridSlotsComponents.js +3 -2
  220. package/legacy/constants/gridClasses.js +1 -1
  221. package/legacy/constants/gridDetailPanelToggleField.js +2 -0
  222. package/legacy/constants/localeTextConstants.js +8 -1
  223. package/legacy/hooks/core/pipeProcessing/index.js +2 -1
  224. package/legacy/hooks/core/pipeProcessing/useGridPipeProcessing.js +60 -24
  225. package/legacy/hooks/core/pipeProcessing/useGridRegisterPipeApplier.js +27 -0
  226. package/legacy/hooks/core/pipeProcessing/useGridRegisterPipeProcessor.js +0 -4
  227. package/legacy/hooks/core/strategyProcessing/useGridStrategyProcessing.js +6 -7
  228. package/legacy/hooks/core/useGridApiInitialization.js +3 -3
  229. package/legacy/hooks/core/useGridErrorHandler.js +1 -2
  230. package/legacy/hooks/core/useGridStateInitialization.js +1 -2
  231. package/legacy/hooks/features/columnHeaders/useGridColumnHeaders.js +94 -16
  232. package/legacy/hooks/features/columnMenu/useGridColumnMenu.js +3 -3
  233. package/legacy/hooks/features/columns/gridColumnsUtils.js +79 -22
  234. package/legacy/hooks/features/columns/useGridColumnSpanning.js +106 -0
  235. package/legacy/hooks/features/columns/useGridColumns.js +30 -25
  236. package/legacy/hooks/features/dimensions/useGridDimensions.js +10 -11
  237. package/legacy/hooks/features/editRows/useGridCellEditing.new.js +225 -89
  238. package/legacy/hooks/features/editRows/useGridCellEditing.old.js +20 -21
  239. package/legacy/hooks/features/editRows/useGridEditing.new.js +7 -3
  240. package/legacy/hooks/features/editRows/useGridEditing.old.js +4 -5
  241. package/legacy/hooks/features/editRows/useGridRowEditing.new.js +157 -65
  242. package/legacy/hooks/features/editRows/useGridRowEditing.old.js +20 -21
  243. package/legacy/hooks/features/events/useGridEvents.js +17 -18
  244. package/legacy/hooks/features/export/serializers/csvSerializer.js +5 -5
  245. package/legacy/hooks/features/export/useGridCsvExport.js +24 -17
  246. package/legacy/hooks/features/export/useGridPrintExport.js +22 -0
  247. package/legacy/hooks/features/export/utils.js +14 -0
  248. package/legacy/hooks/features/filter/gridFilterState.js +3 -1
  249. package/legacy/hooks/features/filter/gridFilterUtils.js +96 -2
  250. package/legacy/hooks/features/filter/useGridFilter.js +32 -15
  251. package/legacy/hooks/features/focus/useGridFocus.js +50 -44
  252. package/legacy/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +43 -11
  253. package/legacy/hooks/features/pagination/useGridPage.js +3 -4
  254. package/legacy/hooks/features/pagination/useGridPageSize.js +2 -3
  255. package/legacy/hooks/features/preferencesPanel/useGridPreferencesPanel.js +4 -6
  256. package/legacy/hooks/features/rows/gridRowsSelector.js +6 -0
  257. package/legacy/hooks/features/rows/gridRowsUtils.js +27 -1
  258. package/legacy/hooks/features/rows/useGridRows.js +131 -61
  259. package/legacy/hooks/features/rows/useGridRowsMeta.js +6 -13
  260. package/legacy/hooks/features/rows/useGridRowsPreProcessors.js +2 -0
  261. package/legacy/hooks/features/scroll/useGridScroll.js +31 -4
  262. package/legacy/hooks/features/selection/useGridSelection.js +15 -11
  263. package/legacy/hooks/features/sorting/useGridSorting.js +12 -15
  264. package/legacy/hooks/features/virtualization/useGridVirtualScroller.js +79 -42
  265. package/legacy/hooks/utils/useGridApiEventHandler.js +20 -9
  266. package/legacy/hooks/utils/useGridNativeEventListener.js +1 -2
  267. package/legacy/hooks/utils/useGridSelector.js +1 -1
  268. package/legacy/index.js +1 -1
  269. package/legacy/internals/index.js +6 -2
  270. package/legacy/locales/arSD.js +8 -1
  271. package/legacy/locales/bgBG.js +8 -1
  272. package/legacy/locales/csCZ.js +7 -0
  273. package/legacy/locales/daDK.js +8 -1
  274. package/legacy/locales/deDE.js +10 -3
  275. package/legacy/locales/elGR.js +7 -0
  276. package/legacy/locales/esES.js +7 -0
  277. package/legacy/locales/faIR.js +8 -1
  278. package/legacy/locales/fiFI.js +7 -0
  279. package/legacy/locales/frFR.js +7 -0
  280. package/legacy/locales/heIL.js +8 -1
  281. package/legacy/locales/huHU.js +127 -0
  282. package/legacy/locales/index.js +1 -0
  283. package/legacy/locales/itIT.js +7 -0
  284. package/legacy/locales/jaJP.js +7 -0
  285. package/legacy/locales/koKR.js +7 -0
  286. package/legacy/locales/nlNL.js +7 -0
  287. package/legacy/locales/plPL.js +8 -1
  288. package/legacy/locales/ptBR.js +8 -1
  289. package/legacy/locales/ruRU.js +7 -0
  290. package/legacy/locales/skSK.js +7 -0
  291. package/legacy/locales/trTR.js +8 -1
  292. package/legacy/locales/ukUA.js +7 -0
  293. package/legacy/locales/viVN.js +7 -0
  294. package/legacy/locales/zhCN.js +7 -0
  295. package/legacy/models/api/gridColumnSpanning.js +1 -0
  296. package/legacy/models/events/gridEvents.js +10 -3
  297. package/legacy/models/gridColumnSpanning.js +1 -0
  298. package/legacy/models/index.js +4 -3
  299. package/legacy/utils/createSelector.js +18 -2
  300. package/legacy/utils/exportAs.js +1 -1
  301. package/locales/arSD.js +8 -1
  302. package/locales/bgBG.js +8 -1
  303. package/locales/csCZ.js +7 -0
  304. package/locales/daDK.js +8 -1
  305. package/locales/deDE.js +10 -3
  306. package/locales/elGR.js +7 -0
  307. package/locales/esES.js +7 -0
  308. package/locales/faIR.js +8 -1
  309. package/locales/fiFI.js +7 -0
  310. package/locales/frFR.js +7 -0
  311. package/locales/heIL.js +8 -1
  312. package/locales/huHU.d.ts +2 -0
  313. package/locales/huHU.js +115 -0
  314. package/locales/index.d.ts +1 -0
  315. package/locales/index.js +1 -0
  316. package/locales/itIT.js +7 -0
  317. package/locales/jaJP.js +7 -0
  318. package/locales/koKR.js +7 -0
  319. package/locales/nlNL.js +7 -0
  320. package/locales/plPL.js +8 -1
  321. package/locales/ptBR.js +8 -1
  322. package/locales/ruRU.js +7 -0
  323. package/locales/skSK.js +7 -0
  324. package/locales/trTR.js +8 -1
  325. package/locales/ukUA.js +7 -0
  326. package/locales/viVN.js +7 -0
  327. package/locales/zhCN.js +7 -0
  328. package/models/api/gridApiCommon.d.ts +2 -1
  329. package/models/api/gridColumnSpanning.d.ts +28 -0
  330. package/models/api/gridColumnSpanning.js +1 -0
  331. package/models/api/gridCoreApi.d.ts +10 -0
  332. package/models/api/gridEditingApi.d.ts +72 -7
  333. package/models/api/gridFilterApi.d.ts +5 -0
  334. package/models/api/gridFocusApi.d.ts +1 -0
  335. package/models/api/gridLocaleTextApi.d.ts +5 -0
  336. package/models/api/gridRowApi.d.ts +34 -0
  337. package/models/api/index.d.ts +1 -1
  338. package/models/colDef/gridColDef.d.ts +18 -0
  339. package/models/events/gridEventLookup.d.ts +296 -11
  340. package/models/events/gridEvents.d.ts +10 -258
  341. package/models/events/gridEvents.js +10 -3
  342. package/models/gridColumnSpanning.d.ts +12 -0
  343. package/models/gridColumnSpanning.js +1 -0
  344. package/models/gridEditRowModel.d.ts +1 -1
  345. package/models/gridExport.d.ts +29 -2
  346. package/models/gridFilterModel.d.ts +11 -0
  347. package/models/gridFilterOperator.d.ts +1 -1
  348. package/models/gridIconSlotsComponent.d.ts +5 -0
  349. package/models/gridStateCommunity.d.ts +0 -2
  350. package/models/index.d.ts +1 -1
  351. package/models/index.js +4 -3
  352. package/models/params/gridCellParams.d.ts +12 -2
  353. package/models/params/gridRowParams.d.ts +5 -0
  354. package/models/props/DataGridProps.d.ts +57 -29
  355. package/modern/DataGrid/DataGrid.js +36 -2
  356. package/modern/DataGrid/useDataGridComponent.js +3 -1
  357. package/modern/DataGrid/useDataGridProps.js +2 -1
  358. package/modern/colDef/gridActionsColDef.js +2 -1
  359. package/modern/colDef/gridBooleanColDef.js +2 -1
  360. package/modern/colDef/gridCheckboxSelectionColDef.js +1 -0
  361. package/modern/colDef/gridDateColDef.js +4 -2
  362. package/modern/colDef/gridNumericColDef.js +3 -2
  363. package/modern/colDef/gridNumericOperators.js +11 -0
  364. package/modern/colDef/gridSingleSelectColDef.js +3 -2
  365. package/modern/colDef/gridSingleSelectOperators.js +52 -0
  366. package/modern/colDef/gridStringColDef.js +3 -2
  367. package/modern/colDef/gridStringOperators.js +12 -0
  368. package/modern/components/GridFooter.js +11 -2
  369. package/modern/components/GridRow.js +56 -26
  370. package/modern/components/GridRowCount.js +1 -0
  371. package/modern/components/GridScrollArea.js +3 -4
  372. package/modern/components/GridSelectedRowCount.js +2 -1
  373. package/modern/components/base/GridBody.js +1 -2
  374. package/modern/components/base/GridOverlays.js +5 -5
  375. package/modern/components/cell/GridActionsCell.js +179 -21
  376. package/modern/components/cell/GridActionsCellItem.js +7 -5
  377. package/modern/components/cell/GridCell.js +36 -15
  378. package/modern/components/cell/GridEditBooleanCell.js +101 -6
  379. package/modern/components/cell/GridEditDateCell.js +99 -5
  380. package/modern/components/cell/GridEditInputCell.js +30 -6
  381. package/modern/components/cell/GridEditSingleSelectCell.js +48 -16
  382. package/modern/components/cell/index.js +2 -0
  383. package/modern/components/columnHeaders/GridColumnHeaderItem.js +19 -23
  384. package/modern/components/columnHeaders/GridColumnHeaders.js +1 -1
  385. package/modern/components/columnSelection/GridCellCheckboxRenderer.js +22 -6
  386. package/modern/components/columnSelection/GridHeaderCheckbox.js +4 -5
  387. package/modern/components/containers/GridFooterContainer.js +11 -2
  388. package/modern/components/containers/GridRootStyles.js +36 -1
  389. package/modern/components/containers/GridToolbarContainer.js +12 -2
  390. package/modern/components/menu/GridMenu.js +1 -0
  391. package/modern/components/panel/GridPanel.js +1 -0
  392. package/modern/components/panel/GridPanelContent.js +13 -2
  393. package/modern/components/panel/GridPanelFooter.js +13 -2
  394. package/modern/components/panel/GridPanelHeader.js +13 -2
  395. package/modern/components/panel/filterPanel/GridFilterForm.js +10 -6
  396. package/modern/components/panel/filterPanel/GridFilterInputBoolean.js +11 -6
  397. package/modern/components/panel/filterPanel/GridFilterInputSingleSelect.js +20 -13
  398. package/modern/components/panel/filterPanel/GridFilterInputValue.js +20 -13
  399. package/modern/components/toolbar/GridToolbar.js +30 -7
  400. package/modern/components/toolbar/GridToolbarDensitySelector.js +1 -1
  401. package/modern/components/toolbar/GridToolbarExport.js +15 -20
  402. package/modern/components/toolbar/GridToolbarQuickFilter.js +86 -0
  403. package/modern/components/toolbar/index.js +3 -2
  404. package/modern/components/virtualization/GridVirtualScroller.js +2 -0
  405. package/modern/components/virtualization/GridVirtualScrollerContent.js +1 -3
  406. package/modern/constants/defaultGridSlotsComponents.js +3 -2
  407. package/modern/constants/gridClasses.js +1 -1
  408. package/modern/constants/gridDetailPanelToggleField.js +2 -0
  409. package/modern/constants/localeTextConstants.js +8 -1
  410. package/modern/hooks/core/pipeProcessing/index.js +2 -1
  411. package/modern/hooks/core/pipeProcessing/useGridPipeProcessing.js +53 -19
  412. package/modern/hooks/core/pipeProcessing/useGridRegisterPipeApplier.js +27 -0
  413. package/modern/hooks/core/pipeProcessing/useGridRegisterPipeProcessor.js +0 -4
  414. package/modern/hooks/core/strategyProcessing/useGridStrategyProcessing.js +6 -7
  415. package/modern/hooks/core/useGridApiInitialization.js +3 -3
  416. package/modern/hooks/core/useGridErrorHandler.js +1 -2
  417. package/modern/hooks/core/useGridStateInitialization.js +1 -2
  418. package/modern/hooks/features/columnHeaders/useGridColumnHeaders.js +81 -16
  419. package/modern/hooks/features/columnMenu/useGridColumnMenu.js +3 -3
  420. package/modern/hooks/features/columns/gridColumnsUtils.js +61 -8
  421. package/modern/hooks/features/columns/useGridColumnSpanning.js +106 -0
  422. package/modern/hooks/features/columns/useGridColumns.js +30 -25
  423. package/modern/hooks/features/dimensions/useGridDimensions.js +10 -11
  424. package/modern/hooks/features/editRows/useGridCellEditing.new.js +149 -42
  425. package/modern/hooks/features/editRows/useGridCellEditing.old.js +20 -21
  426. package/modern/hooks/features/editRows/useGridEditing.new.js +7 -3
  427. package/modern/hooks/features/editRows/useGridEditing.old.js +4 -5
  428. package/modern/hooks/features/editRows/useGridRowEditing.new.js +143 -57
  429. package/modern/hooks/features/editRows/useGridRowEditing.old.js +21 -22
  430. package/modern/hooks/features/events/useGridEvents.js +17 -18
  431. package/modern/hooks/features/export/serializers/csvSerializer.js +5 -5
  432. package/modern/hooks/features/export/useGridCsvExport.js +21 -16
  433. package/modern/hooks/features/export/useGridPrintExport.js +20 -0
  434. package/modern/hooks/features/export/utils.js +13 -0
  435. package/modern/hooks/features/filter/gridFilterState.js +3 -1
  436. package/modern/hooks/features/filter/gridFilterUtils.js +80 -2
  437. package/modern/hooks/features/filter/useGridFilter.js +32 -15
  438. package/modern/hooks/features/focus/useGridFocus.js +48 -42
  439. package/modern/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +41 -12
  440. package/modern/hooks/features/pagination/useGridPage.js +3 -4
  441. package/modern/hooks/features/pagination/useGridPageSize.js +2 -3
  442. package/modern/hooks/features/preferencesPanel/useGridPreferencesPanel.js +4 -6
  443. package/modern/hooks/features/rows/gridRowsSelector.js +2 -0
  444. package/modern/hooks/features/rows/gridRowsUtils.js +23 -1
  445. package/modern/hooks/features/rows/useGridRows.js +121 -61
  446. package/modern/hooks/features/rows/useGridRowsMeta.js +6 -13
  447. package/modern/hooks/features/rows/useGridRowsPreProcessors.js +2 -0
  448. package/modern/hooks/features/scroll/useGridScroll.js +29 -4
  449. package/modern/hooks/features/selection/useGridSelection.js +15 -11
  450. package/modern/hooks/features/sorting/useGridSorting.js +17 -18
  451. package/modern/hooks/features/virtualization/useGridVirtualScroller.js +68 -28
  452. package/modern/hooks/utils/useGridApiEventHandler.js +20 -9
  453. package/modern/hooks/utils/useGridNativeEventListener.js +1 -2
  454. package/modern/hooks/utils/useGridSelector.js +1 -1
  455. package/modern/index.js +1 -1
  456. package/modern/internals/index.js +6 -2
  457. package/modern/locales/arSD.js +8 -1
  458. package/modern/locales/bgBG.js +8 -1
  459. package/modern/locales/csCZ.js +7 -0
  460. package/modern/locales/daDK.js +8 -1
  461. package/modern/locales/deDE.js +10 -3
  462. package/modern/locales/elGR.js +7 -0
  463. package/modern/locales/esES.js +7 -0
  464. package/modern/locales/faIR.js +8 -1
  465. package/modern/locales/fiFI.js +7 -0
  466. package/modern/locales/frFR.js +7 -0
  467. package/modern/locales/heIL.js +8 -1
  468. package/modern/locales/huHU.js +115 -0
  469. package/modern/locales/index.js +1 -0
  470. package/modern/locales/itIT.js +7 -0
  471. package/modern/locales/jaJP.js +7 -0
  472. package/modern/locales/koKR.js +7 -0
  473. package/modern/locales/nlNL.js +7 -0
  474. package/modern/locales/plPL.js +8 -1
  475. package/modern/locales/ptBR.js +8 -1
  476. package/modern/locales/ruRU.js +7 -0
  477. package/modern/locales/skSK.js +7 -0
  478. package/modern/locales/trTR.js +8 -1
  479. package/modern/locales/ukUA.js +7 -0
  480. package/modern/locales/viVN.js +7 -0
  481. package/modern/locales/zhCN.js +7 -0
  482. package/modern/models/api/gridColumnSpanning.js +1 -0
  483. package/modern/models/events/gridEvents.js +10 -3
  484. package/modern/models/gridColumnSpanning.js +1 -0
  485. package/modern/models/index.js +4 -3
  486. package/modern/utils/createSelector.js +20 -2
  487. package/modern/utils/exportAs.js +1 -1
  488. package/node/DataGrid/DataGrid.js +36 -2
  489. package/node/DataGrid/useDataGridComponent.js +4 -1
  490. package/node/DataGrid/useDataGridProps.js +2 -1
  491. package/node/colDef/gridActionsColDef.js +2 -1
  492. package/node/colDef/gridBooleanColDef.js +2 -1
  493. package/node/colDef/gridCheckboxSelectionColDef.js +1 -0
  494. package/node/colDef/gridDateColDef.js +4 -2
  495. package/node/colDef/gridNumericColDef.js +2 -1
  496. package/node/colDef/gridNumericOperators.js +15 -1
  497. package/node/colDef/gridSingleSelectColDef.js +2 -1
  498. package/node/colDef/gridSingleSelectOperators.js +56 -1
  499. package/node/colDef/gridStringColDef.js +2 -1
  500. package/node/colDef/gridStringOperators.js +16 -1
  501. package/node/components/GridFooter.js +10 -1
  502. package/node/components/GridRow.js +59 -29
  503. package/node/components/GridRowCount.js +1 -0
  504. package/node/components/GridScrollArea.js +3 -5
  505. package/node/components/GridSelectedRowCount.js +2 -1
  506. package/node/components/base/GridBody.js +1 -3
  507. package/node/components/base/GridOverlays.js +4 -5
  508. package/node/components/cell/GridActionsCell.js +181 -21
  509. package/node/components/cell/GridActionsCellItem.js +7 -4
  510. package/node/components/cell/GridCell.js +35 -14
  511. package/node/components/cell/GridEditBooleanCell.js +100 -5
  512. package/node/components/cell/GridEditDateCell.js +98 -4
  513. package/node/components/cell/GridEditInputCell.js +30 -6
  514. package/node/components/cell/GridEditSingleSelectCell.js +50 -18
  515. package/node/components/cell/index.js +26 -0
  516. package/node/components/columnHeaders/GridColumnHeaderItem.js +19 -24
  517. package/node/components/columnHeaders/GridColumnHeaders.js +1 -1
  518. package/node/components/columnSelection/GridCellCheckboxRenderer.js +22 -7
  519. package/node/components/columnSelection/GridHeaderCheckbox.js +4 -6
  520. package/node/components/containers/GridFooterContainer.js +10 -1
  521. package/node/components/containers/GridRootStyles.js +36 -1
  522. package/node/components/containers/GridToolbarContainer.js +11 -1
  523. package/node/components/menu/GridMenu.js +1 -0
  524. package/node/components/panel/GridPanel.js +1 -0
  525. package/node/components/panel/GridPanelContent.js +11 -1
  526. package/node/components/panel/GridPanelFooter.js +11 -1
  527. package/node/components/panel/GridPanelHeader.js +11 -1
  528. package/node/components/panel/filterPanel/GridFilterForm.js +15 -10
  529. package/node/components/panel/filterPanel/GridFilterInputBoolean.js +14 -8
  530. package/node/components/panel/filterPanel/GridFilterInputSingleSelect.js +23 -15
  531. package/node/components/panel/filterPanel/GridFilterInputValue.js +23 -15
  532. package/node/components/toolbar/GridToolbar.js +32 -7
  533. package/node/components/toolbar/GridToolbarDensitySelector.js +1 -1
  534. package/node/components/toolbar/GridToolbarExport.js +14 -19
  535. package/node/components/toolbar/GridToolbarQuickFilter.js +111 -0
  536. package/node/components/toolbar/index.js +42 -11
  537. package/node/components/virtualization/GridVirtualScroller.js +2 -0
  538. package/node/components/virtualization/GridVirtualScrollerContent.js +1 -3
  539. package/node/constants/defaultGridSlotsComponents.js +2 -1
  540. package/node/constants/gridClasses.js +1 -1
  541. package/node/constants/gridDetailPanelToggleField.js +9 -0
  542. package/node/constants/localeTextConstants.js +8 -1
  543. package/node/hooks/core/pipeProcessing/index.js +13 -0
  544. package/node/hooks/core/pipeProcessing/useGridPipeProcessing.js +51 -20
  545. package/node/hooks/core/pipeProcessing/useGridRegisterPipeApplier.js +42 -0
  546. package/node/hooks/core/pipeProcessing/useGridRegisterPipeProcessor.js +0 -3
  547. package/node/hooks/core/strategyProcessing/useGridStrategyProcessing.js +6 -8
  548. package/node/hooks/core/useGridApiInitialization.js +3 -4
  549. package/node/hooks/core/useGridErrorHandler.js +1 -3
  550. package/node/hooks/core/useGridStateInitialization.js +1 -3
  551. package/node/hooks/features/columnHeaders/useGridColumnHeaders.js +85 -17
  552. package/node/hooks/features/columnMenu/useGridColumnMenu.js +3 -4
  553. package/node/hooks/features/columns/gridColumnsUtils.js +65 -9
  554. package/node/hooks/features/columns/useGridColumnSpanning.js +128 -0
  555. package/node/hooks/features/columns/useGridColumns.js +29 -25
  556. package/node/hooks/features/dimensions/useGridDimensions.js +10 -12
  557. package/node/hooks/features/editRows/useGridCellEditing.new.js +151 -42
  558. package/node/hooks/features/editRows/useGridCellEditing.old.js +20 -22
  559. package/node/hooks/features/editRows/useGridEditing.new.js +6 -2
  560. package/node/hooks/features/editRows/useGridEditing.old.js +4 -6
  561. package/node/hooks/features/editRows/useGridRowEditing.new.js +143 -57
  562. package/node/hooks/features/editRows/useGridRowEditing.old.js +21 -23
  563. package/node/hooks/features/events/useGridEvents.js +17 -19
  564. package/node/hooks/features/export/serializers/csvSerializer.js +5 -5
  565. package/node/hooks/features/export/useGridCsvExport.js +26 -17
  566. package/node/hooks/features/export/useGridPrintExport.js +25 -0
  567. package/node/hooks/features/export/utils.js +19 -2
  568. package/node/hooks/features/filter/gridFilterState.js +3 -1
  569. package/node/hooks/features/filter/gridFilterUtils.js +92 -3
  570. package/node/hooks/features/filter/useGridFilter.js +33 -16
  571. package/node/hooks/features/focus/useGridFocus.js +48 -43
  572. package/node/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +44 -13
  573. package/node/hooks/features/pagination/useGridPage.js +3 -5
  574. package/node/hooks/features/pagination/useGridPageSize.js +2 -4
  575. package/node/hooks/features/preferencesPanel/useGridPreferencesPanel.js +4 -8
  576. package/node/hooks/features/rows/gridRowsSelector.js +5 -1
  577. package/node/hooks/features/rows/gridRowsUtils.js +29 -1
  578. package/node/hooks/features/rows/useGridRows.js +122 -61
  579. package/node/hooks/features/rows/useGridRowsMeta.js +6 -14
  580. package/node/hooks/features/rows/useGridRowsPreProcessors.js +2 -0
  581. package/node/hooks/features/scroll/useGridScroll.js +32 -3
  582. package/node/hooks/features/selection/useGridSelection.js +16 -12
  583. package/node/hooks/features/sorting/useGridSorting.js +17 -19
  584. package/node/hooks/features/virtualization/useGridVirtualScroller.js +73 -33
  585. package/node/hooks/utils/useGridApiEventHandler.js +22 -10
  586. package/node/hooks/utils/useGridNativeEventListener.js +1 -3
  587. package/node/hooks/utils/useGridSelector.js +1 -1
  588. package/node/index.js +1 -1
  589. package/node/internals/index.js +47 -3
  590. package/node/locales/arSD.js +8 -1
  591. package/node/locales/bgBG.js +8 -1
  592. package/node/locales/csCZ.js +7 -0
  593. package/node/locales/daDK.js +8 -1
  594. package/node/locales/deDE.js +10 -3
  595. package/node/locales/elGR.js +7 -0
  596. package/node/locales/esES.js +7 -0
  597. package/node/locales/faIR.js +8 -1
  598. package/node/locales/fiFI.js +7 -0
  599. package/node/locales/frFR.js +7 -0
  600. package/node/locales/heIL.js +8 -1
  601. package/node/locales/huHU.js +125 -0
  602. package/node/locales/index.js +13 -0
  603. package/node/locales/itIT.js +7 -0
  604. package/node/locales/jaJP.js +7 -0
  605. package/node/locales/koKR.js +7 -0
  606. package/node/locales/nlNL.js +7 -0
  607. package/node/locales/plPL.js +8 -1
  608. package/node/locales/ptBR.js +8 -1
  609. package/node/locales/ruRU.js +7 -0
  610. package/node/locales/skSK.js +7 -0
  611. package/node/locales/trTR.js +8 -1
  612. package/node/locales/ukUA.js +7 -0
  613. package/node/locales/viVN.js +7 -0
  614. package/node/locales/zhCN.js +7 -0
  615. package/node/models/api/gridColumnSpanning.js +5 -0
  616. package/node/models/events/gridEvents.js +10 -3
  617. package/node/models/gridColumnSpanning.js +5 -0
  618. package/node/models/index.js +0 -13
  619. package/node/utils/createSelector.js +25 -4
  620. package/node/utils/exportAs.js +1 -1
  621. package/package.json +4 -4
  622. package/utils/createSelector.d.ts +2 -1
  623. package/utils/createSelector.js +20 -2
  624. package/utils/domUtils.d.ts +2 -2
  625. package/utils/exportAs.d.ts +2 -2
  626. package/utils/exportAs.js +1 -1
@@ -1,8 +1,10 @@
1
1
  import { GridStateCommunity } from '../../../models/gridStateCommunity';
2
2
  export declare const gridRowsStateSelector: (state: GridStateCommunity) => import("./gridRowsState").GridRowsState;
3
3
  export declare const gridRowCountSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, number>;
4
+ export declare const gridRowsLoadingSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, boolean | undefined>;
4
5
  export declare const gridTopLevelRowCountSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, number>;
5
6
  export declare const gridRowsLookupSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, import("../../..").GridRowsLookup<any>>;
7
+ export declare const gridRowsIdToIdLookupSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, Record<string, import("../../..").GridRowId>>;
6
8
  export declare const gridRowTreeSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, import("../../..").GridRowTreeConfig>;
7
9
  export declare const gridRowGroupingNameSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, string>;
8
10
  export declare const gridRowTreeDepthSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, number>;
@@ -1,8 +1,10 @@
1
1
  import { createSelector } from '../../../utils/createSelector';
2
2
  export const gridRowsStateSelector = state => state.rows;
3
3
  export const gridRowCountSelector = createSelector(gridRowsStateSelector, rows => rows.totalRowCount);
4
+ export const gridRowsLoadingSelector = createSelector(gridRowsStateSelector, rows => rows.loading);
4
5
  export const gridTopLevelRowCountSelector = createSelector(gridRowsStateSelector, rows => rows.totalTopLevelRowCount);
5
6
  export const gridRowsLookupSelector = createSelector(gridRowsStateSelector, rows => rows.idRowsLookup);
7
+ export const gridRowsIdToIdLookupSelector = createSelector(gridRowsStateSelector, rows => rows.idToIdLookup);
6
8
  export const gridRowTreeSelector = createSelector(gridRowsStateSelector, rows => rows.tree);
7
9
  export const gridRowGroupingNameSelector = createSelector(gridRowsStateSelector, rows => rows.groupingName);
8
10
  export const gridRowTreeDepthSelector = createSelector(gridRowsStateSelector, rows => rows.treeDepth);
@@ -1,8 +1,8 @@
1
- /// <reference types="node" />
2
1
  import { GridRowId, GridRowsLookup, GridRowsProp, GridRowTreeConfig } from '../../../models/gridRows';
3
2
  export interface GridRowTreeCreationParams {
4
3
  ids: GridRowId[];
5
4
  idRowsLookup: GridRowsLookup;
5
+ idToIdLookup: Record<string, GridRowId>;
6
6
  previousTree: GridRowTreeConfig | null;
7
7
  }
8
8
  export interface GridRowTreeCreationValue {
@@ -15,9 +15,10 @@ export interface GridRowTreeCreationValue {
15
15
  treeDepth: number;
16
16
  ids: GridRowId[];
17
17
  idRowsLookup: GridRowsLookup;
18
+ idToIdLookup: Record<string, GridRowId>;
18
19
  }
19
20
  export declare type GridRowInternalCacheValue = Omit<GridRowTreeCreationParams, 'previousTree'>;
20
- export interface GridRowsInternalCacheState {
21
+ export interface GridRowsInternalCache {
21
22
  value: GridRowInternalCacheValue;
22
23
  /**
23
24
  * The rows as they were the last time all the rows have been updated at once
@@ -25,12 +26,11 @@ export interface GridRowsInternalCacheState {
25
26
  */
26
27
  rowsBeforePartialUpdates: GridRowsProp;
27
28
  }
28
- export interface GridRowsInternalCache {
29
- state: GridRowsInternalCacheState;
30
- timeout: NodeJS.Timeout | null;
31
- lastUpdateMs: number;
32
- }
33
29
  export interface GridRowsState extends GridRowTreeCreationValue {
30
+ /**
31
+ * Matches the value of the `loading` prop.
32
+ */
33
+ loading?: boolean;
34
34
  /**
35
35
  * Amount of rows before applying the filtering.
36
36
  * It also counts the expanded and collapsed children rows.
@@ -1,4 +1,4 @@
1
- import { GridRowId, GridRowModel } from '../../../models';
1
+ import { GridRowId, GridRowModel, GridRowTreeConfig } from '../../../models';
2
2
  /**
3
3
  * A helper function to check if the id provided is valid.
4
4
  * @param {GridRowId} id Id as [[GridRowId]].
@@ -6,3 +6,4 @@ import { GridRowId, GridRowModel } from '../../../models';
6
6
  * @param {string} detailErrorMessage A custom error message to display for invalid IDs
7
7
  */
8
8
  export declare function checkGridRowIdIsValid(id: GridRowId, row: GridRowModel | Partial<GridRowModel>, detailErrorMessage?: string): void;
9
+ export declare const getTreeNodeDescendants: (tree: GridRowTreeConfig, parentId: GridRowId, skipAutoGeneratedRows: boolean) => GridRowId[];
@@ -8,4 +8,28 @@ export function checkGridRowIdIsValid(id, row, detailErrorMessage = 'A row was p
8
8
  if (id == null) {
9
9
  throw new Error(['MUI: The data grid component requires all rows to have a unique `id` property.', 'Alternatively, you can use the `getRowId` prop to specify a custom id for each row.', detailErrorMessage, JSON.stringify(row)].join('\n'));
10
10
  }
11
- }
11
+ }
12
+ export const getTreeNodeDescendants = (tree, parentId, skipAutoGeneratedRows) => {
13
+ var _tree$parentId;
14
+
15
+ const children = (_tree$parentId = tree[parentId]) == null ? void 0 : _tree$parentId.children;
16
+
17
+ if (children == null) {
18
+ return [];
19
+ }
20
+
21
+ const validDescendants = [];
22
+
23
+ for (let i = 0; i < children.length; i += 1) {
24
+ const child = children[i];
25
+ const childNode = tree[child];
26
+
27
+ if (!skipAutoGeneratedRows || !childNode.isAutoGenerated) {
28
+ validDescendants.push(child);
29
+ }
30
+
31
+ validDescendants.push(...getTreeNodeDescendants(tree, childNode.id, skipAutoGeneratedRows));
32
+ }
33
+
34
+ return validDescendants;
35
+ };
@@ -2,5 +2,5 @@ import * as React from 'react';
2
2
  import { DataGridProcessedProps } from '../../../models/props/DataGridProps';
3
3
  import { GridApiCommunity } from '../../../models/api/gridApiCommunity';
4
4
  import { GridStateInitializer } from '../../utils/useGridInitializeState';
5
- export declare const rowsStateInitializer: GridStateInitializer<Pick<DataGridProcessedProps, 'rows' | 'rowCount' | 'getRowId'>>;
6
- export declare const useGridRows: (apiRef: React.MutableRefObject<GridApiCommunity>, props: Pick<DataGridProcessedProps, 'rows' | 'getRowId' | 'rowCount' | 'throttleRowsMs' | 'signature' | 'pagination' | 'paginationMode'>) => void;
5
+ export declare const rowsStateInitializer: GridStateInitializer<Pick<DataGridProcessedProps, 'rows' | 'rowCount' | 'getRowId' | 'loading'>>;
6
+ export declare const useGridRows: (apiRef: React.MutableRefObject<GridApiCommunity>, props: Pick<DataGridProcessedProps, 'rows' | 'getRowId' | 'rowCount' | 'throttleRowsMs' | 'signature' | 'pagination' | 'paginationMode' | 'loading'>) => void;
@@ -1,12 +1,13 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import * as React from 'react';
3
- import { GridEvents } from '../../../models/events';
4
3
  import { useGridApiMethod } from '../../utils/useGridApiMethod';
5
4
  import { useGridLogger } from '../../utils/useGridLogger';
6
5
  import { gridRowCountSelector, gridRowsLookupSelector, gridRowTreeSelector, gridRowIdsSelector, gridRowGroupingNameSelector } from './gridRowsSelector';
7
6
  import { GridSignature, useGridApiEventHandler } from '../../utils/useGridApiEventHandler';
8
7
  import { useGridVisibleRows } from '../../utils/useGridVisibleRows';
9
- import { checkGridRowIdIsValid } from './gridRowsUtils';
8
+ import { gridSortedRowIdsSelector } from '../sorting/gridSortingSelector';
9
+ import { gridFilteredRowsLookupSelector } from '../filter/gridFilterSelector';
10
+ import { checkGridRowIdIsValid, getTreeNodeDescendants } from './gridRowsUtils';
10
11
 
11
12
  function getGridRowId(rowModel, getRowId, detailErrorMessage) {
12
13
  const id = getRowId ? getRowId(rowModel) : rowModel.id;
@@ -14,8 +15,8 @@ function getGridRowId(rowModel, getRowId, detailErrorMessage) {
14
15
  return id;
15
16
  }
16
17
 
17
- const convertGridRowsPropToState = ({
18
- prevState,
18
+ const convertRowsPropToState = ({
19
+ prevCache: prevState,
19
20
  rows,
20
21
  getRowId
21
22
  }) => {
@@ -24,6 +25,7 @@ const convertGridRowsPropToState = ({
24
25
  if (rows) {
25
26
  value = {
26
27
  idRowsLookup: {},
28
+ idToIdLookup: {},
27
29
  ids: []
28
30
  };
29
31
 
@@ -31,6 +33,7 @@ const convertGridRowsPropToState = ({
31
33
  const row = rows[i];
32
34
  const id = getGridRowId(row, getRowId);
33
35
  value.idRowsLookup[id] = row;
36
+ value.idToIdLookup[id] = id;
34
37
  value.ids.push(id);
35
38
  }
36
39
  } else {
@@ -43,41 +46,37 @@ const convertGridRowsPropToState = ({
43
46
  };
44
47
  };
45
48
 
46
- const getRowsStateFromCache = (rowsCache, previousTree, apiRef, rowCountProp) => {
49
+ const getRowsStateFromCache = (rowsCache, previousTree, apiRef, rowCountProp, loadingProp) => {
47
50
  const {
48
51
  value
49
- } = rowsCache.state;
52
+ } = rowsCache;
50
53
  const rowCount = rowCountProp != null ? rowCountProp : 0;
51
54
  const groupingResponse = apiRef.current.unstable_applyStrategyProcessor('rowTreeCreation', _extends({}, value, {
52
55
  previousTree
53
56
  }));
54
57
  const dataTopLevelRowCount = groupingResponse.treeDepth === 1 ? groupingResponse.ids.length : Object.values(groupingResponse.tree).filter(node => node.parent == null).length;
55
58
  return _extends({}, groupingResponse, {
59
+ loading: loadingProp,
56
60
  totalRowCount: Math.max(rowCount, groupingResponse.ids.length),
57
61
  totalTopLevelRowCount: Math.max(rowCount, dataTopLevelRowCount)
58
62
  });
59
63
  };
60
64
 
61
65
  export const rowsStateInitializer = (state, props, apiRef) => {
62
- const rowsCache = {
63
- state: convertGridRowsPropToState({
64
- rows: props.rows,
65
- getRowId: props.getRowId,
66
- prevState: {
67
- value: {
68
- idRowsLookup: {},
69
- ids: []
70
- },
71
- rowsBeforePartialUpdates: []
72
- }
73
- }),
74
- timeout: null,
75
- lastUpdateMs: Date.now()
76
- };
66
+ apiRef.current.unstable_caches.rows = convertRowsPropToState({
67
+ rows: props.rows,
68
+ getRowId: props.getRowId,
69
+ prevCache: {
70
+ value: {
71
+ idRowsLookup: {},
72
+ idToIdLookup: {},
73
+ ids: []
74
+ },
75
+ rowsBeforePartialUpdates: []
76
+ }
77
+ });
77
78
  return _extends({}, state, {
78
- rows: getRowsStateFromCache(rowsCache, null, apiRef, props.rowCount),
79
- rowsCache // TODO remove from state
80
-
79
+ rows: getRowsStateFromCache(apiRef.current.unstable_caches.rows, null, apiRef, props.rowCount, props.loading)
81
80
  });
82
81
  };
83
82
  export const useGridRows = (apiRef, props) => {
@@ -87,9 +86,9 @@ export const useGridRows = (apiRef, props) => {
87
86
  }
88
87
 
89
88
  const logger = useGridLogger(apiRef, 'useGridRows');
90
- const rowsCache = React.useRef(apiRef.current.state.rowsCache); // To avoid listing rowsCache as useEffect dep
91
-
92
89
  const currentPage = useGridVisibleRows(apiRef, props);
90
+ const lastUpdateMs = React.useRef(Date.now());
91
+ const timeout = React.useRef(null);
93
92
  const getRow = React.useCallback(id => {
94
93
  var _ref;
95
94
 
@@ -101,50 +100,50 @@ export const useGridRows = (apiRef, props) => {
101
100
  acc[id] = index;
102
101
  return acc;
103
102
  }, {}), [currentPage.rows]);
104
- const throttledRowsChange = React.useCallback((newState, throttle) => {
103
+ const throttledRowsChange = React.useCallback((newCache, throttle) => {
105
104
  const run = () => {
106
- rowsCache.current.timeout = null;
107
- rowsCache.current.lastUpdateMs = Date.now();
105
+ timeout.current = null;
106
+ lastUpdateMs.current = Date.now();
108
107
  apiRef.current.setState(state => _extends({}, state, {
109
- rows: getRowsStateFromCache(rowsCache.current, gridRowTreeSelector(apiRef), apiRef, props.rowCount)
108
+ rows: getRowsStateFromCache(apiRef.current.unstable_caches.rows, gridRowTreeSelector(apiRef), apiRef, props.rowCount, props.loading)
110
109
  }));
111
- apiRef.current.publishEvent(GridEvents.rowsSet);
110
+ apiRef.current.publishEvent('rowsSet');
112
111
  apiRef.current.forceUpdate();
113
112
  };
114
113
 
115
- if (rowsCache.current.timeout) {
116
- clearTimeout(rowsCache.current.timeout);
114
+ if (timeout.current) {
115
+ clearTimeout(timeout.current);
116
+ timeout.current = null;
117
117
  }
118
118
 
119
- rowsCache.current.state = newState;
120
- rowsCache.current.timeout = null;
119
+ apiRef.current.unstable_caches.rows = newCache;
121
120
 
122
121
  if (!throttle) {
123
122
  run();
124
123
  return;
125
124
  }
126
125
 
127
- const throttleRemainingTimeMs = props.throttleRowsMs - (Date.now() - rowsCache.current.lastUpdateMs);
126
+ const throttleRemainingTimeMs = props.throttleRowsMs - (Date.now() - lastUpdateMs.current);
128
127
 
129
128
  if (throttleRemainingTimeMs > 0) {
130
- rowsCache.current.timeout = setTimeout(run, throttleRemainingTimeMs);
129
+ timeout.current = setTimeout(run, throttleRemainingTimeMs);
131
130
  return;
132
131
  }
133
132
 
134
133
  run();
135
- }, [props.throttleRowsMs, props.rowCount, apiRef]);
134
+ }, [props.throttleRowsMs, props.rowCount, props.loading, apiRef]);
136
135
  /**
137
136
  * API METHODS
138
137
  */
139
138
 
140
139
  const setRows = React.useCallback(rows => {
141
140
  logger.debug(`Updating all rows, new length ${rows.length}`);
142
- throttledRowsChange(convertGridRowsPropToState({
141
+ throttledRowsChange(convertRowsPropToState({
143
142
  rows,
144
- prevState: rowsCache.current.state,
143
+ prevCache: apiRef.current.unstable_caches.rows,
145
144
  getRowId: props.getRowId
146
145
  }), true);
147
- }, [logger, props.getRowId, throttledRowsChange]);
146
+ }, [apiRef, logger, props.getRowId, throttledRowsChange]);
148
147
  const updateRows = React.useCallback(updates => {
149
148
  if (props.signature === GridSignature.DataGrid && updates.length > 1) {
150
149
  // TODO: Add test with direct call to `apiRef.current.updateRows` in DataGrid after enabling the `apiRef` on the free plan.
@@ -164,13 +163,15 @@ export const useGridRows = (apiRef, props) => {
164
163
  });
165
164
  const deletedRowIds = [];
166
165
  const newStateValue = {
167
- idRowsLookup: _extends({}, rowsCache.current.state.value.idRowsLookup),
168
- ids: [...rowsCache.current.state.value.ids]
166
+ idRowsLookup: _extends({}, apiRef.current.unstable_caches.rows.value.idRowsLookup),
167
+ idToIdLookup: _extends({}, apiRef.current.unstable_caches.rows.value.idToIdLookup),
168
+ ids: [...apiRef.current.unstable_caches.rows.value.ids]
169
169
  };
170
170
  uniqUpdates.forEach((partialRow, id) => {
171
171
  // eslint-disable-next-line no-underscore-dangle
172
172
  if (partialRow._action === 'delete') {
173
173
  delete newStateValue.idRowsLookup[id];
174
+ delete newStateValue.idToIdLookup[id];
174
175
  deletedRowIds.push(id);
175
176
  return;
176
177
  }
@@ -179,6 +180,7 @@ export const useGridRows = (apiRef, props) => {
179
180
 
180
181
  if (!oldRow) {
181
182
  newStateValue.idRowsLookup[id] = partialRow;
183
+ newStateValue.idToIdLookup[id] = id;
182
184
  newStateValue.ids.push(id);
183
185
  return;
184
186
  }
@@ -190,12 +192,12 @@ export const useGridRows = (apiRef, props) => {
190
192
  newStateValue.ids = newStateValue.ids.filter(id => !deletedRowIds.includes(id));
191
193
  }
192
194
 
193
- const state = _extends({}, rowsCache.current.state, {
195
+ const state = _extends({}, apiRef.current.unstable_caches.rows, {
194
196
  value: newStateValue
195
197
  });
196
198
 
197
199
  throttledRowsChange(state, true);
198
- }, [apiRef, props.getRowId, throttledRowsChange, props.signature]);
200
+ }, [props.signature, props.getRowId, throttledRowsChange, apiRef]);
199
201
  const getRowModels = React.useCallback(() => {
200
202
  const allRows = gridRowIdsSelector(apiRef);
201
203
  const idRowsLookup = gridRowsLookupSelector(apiRef);
@@ -225,23 +227,82 @@ export const useGridRows = (apiRef, props) => {
225
227
  });
226
228
  });
227
229
  apiRef.current.forceUpdate();
228
- apiRef.current.publishEvent(GridEvents.rowExpansionChange, newNode);
230
+ apiRef.current.publishEvent('rowExpansionChange', newNode);
229
231
  }, [apiRef]);
230
232
  const getRowNode = React.useCallback(id => {
231
233
  var _gridRowTreeSelector$;
232
234
 
233
235
  return (_gridRowTreeSelector$ = gridRowTreeSelector(apiRef)[id]) != null ? _gridRowTreeSelector$ : null;
234
236
  }, [apiRef]);
237
+ const getRowGroupChildren = React.useCallback(({
238
+ skipAutoGeneratedRows = true,
239
+ groupId,
240
+ applySorting,
241
+ applyFiltering
242
+ }) => {
243
+ const tree = gridRowTreeSelector(apiRef);
244
+ let children;
245
+
246
+ if (applySorting) {
247
+ const groupNode = tree[groupId];
248
+
249
+ if (!groupNode) {
250
+ return [];
251
+ }
252
+
253
+ const sortedRowIds = gridSortedRowIdsSelector(apiRef);
254
+ children = [];
255
+ const startIndex = sortedRowIds.findIndex(id => id === groupId) + 1;
256
+
257
+ for (let index = startIndex; index < sortedRowIds.length && tree[sortedRowIds[index]].depth > groupNode.depth; index += 1) {
258
+ const id = sortedRowIds[index];
259
+ const node = tree[id];
260
+
261
+ if (!skipAutoGeneratedRows || !node.isAutoGenerated) {
262
+ children.push(id);
263
+ }
264
+ }
265
+ } else {
266
+ children = getTreeNodeDescendants(tree, groupId, skipAutoGeneratedRows);
267
+ }
268
+
269
+ if (applyFiltering) {
270
+ const filteredRowsLookup = gridFilteredRowsLookupSelector(apiRef);
271
+ children = children.filter(childId => filteredRowsLookup[childId] !== false);
272
+ }
273
+
274
+ return children;
275
+ }, [apiRef]);
276
+ const setRowIndex = React.useCallback((rowId, targetIndex) => {
277
+ const allRows = gridRowIdsSelector(apiRef);
278
+ const oldIndex = allRows.findIndex(row => row === rowId);
279
+
280
+ if (oldIndex === -1 || oldIndex === targetIndex) {
281
+ return;
282
+ }
283
+
284
+ logger.debug(`Moving row ${rowId} to index ${targetIndex}`);
285
+ const updatedRows = [...allRows];
286
+ updatedRows.splice(targetIndex, 0, updatedRows.splice(oldIndex, 1)[0]);
287
+ apiRef.current.setState(state => _extends({}, state, {
288
+ rows: _extends({}, state.rows, {
289
+ ids: updatedRows
290
+ })
291
+ }));
292
+ apiRef.current.applySorting();
293
+ }, [apiRef, logger]);
235
294
  const rowApi = {
236
295
  getRow,
237
296
  getRowModels,
238
297
  getRowsCount,
239
298
  getAllRowIds,
240
299
  setRows,
300
+ setRowIndex,
241
301
  updateRows,
242
302
  setRowChildrenExpansion,
243
303
  getRowNode,
244
- getRowIndexRelativeToVisibleRows
304
+ getRowIndexRelativeToVisibleRows,
305
+ getRowGroupChildren
245
306
  };
246
307
  /**
247
308
  * EVENTS
@@ -251,7 +312,7 @@ export const useGridRows = (apiRef, props) => {
251
312
  logger.info(`Row grouping pre-processing have changed, regenerating the row tree`);
252
313
  let rows;
253
314
 
254
- if (rowsCache.current.state.rowsBeforePartialUpdates === props.rows) {
315
+ if (apiRef.current.unstable_caches.rows.rowsBeforePartialUpdates === props.rows) {
255
316
  // The `props.rows` has not changed since the last row grouping
256
317
  // We can keep the potential updates stored in `inputRowsAfterUpdates` on the new grouping
257
318
  rows = undefined;
@@ -262,12 +323,12 @@ export const useGridRows = (apiRef, props) => {
262
323
  rows = props.rows;
263
324
  }
264
325
 
265
- throttledRowsChange(convertGridRowsPropToState({
326
+ throttledRowsChange(convertRowsPropToState({
266
327
  rows,
267
328
  getRowId: props.getRowId,
268
- prevState: rowsCache.current.state
329
+ prevCache: apiRef.current.unstable_caches.rows
269
330
  }), false);
270
- }, [logger, throttledRowsChange, props.getRowId, props.rows]);
331
+ }, [logger, apiRef, props.rows, props.getRowId, throttledRowsChange]);
271
332
  const handleStrategyProcessorChange = React.useCallback(methodName => {
272
333
  if (methodName === 'rowTreeCreation') {
273
334
  groupRows();
@@ -280,8 +341,8 @@ export const useGridRows = (apiRef, props) => {
280
341
  groupRows();
281
342
  }
282
343
  }, [apiRef, groupRows]);
283
- useGridApiEventHandler(apiRef, GridEvents.activeStrategyProcessorChange, handleStrategyProcessorChange);
284
- useGridApiEventHandler(apiRef, GridEvents.strategyAvailabilityChange, handleStrategyActivityChange);
344
+ useGridApiEventHandler(apiRef, 'activeStrategyProcessorChange', handleStrategyProcessorChange);
345
+ useGridApiEventHandler(apiRef, 'strategyAvailabilityChange', handleStrategyActivityChange);
285
346
  useGridApiMethod(apiRef, rowApi, 'GridRowApi');
286
347
  /**
287
348
  * EFFECTS
@@ -289,9 +350,8 @@ export const useGridRows = (apiRef, props) => {
289
350
 
290
351
  React.useEffect(() => {
291
352
  return () => {
292
- if (rowsCache.current.timeout !== null) {
293
- // eslint-disable-next-line react-hooks/exhaustive-deps
294
- clearTimeout(rowsCache.current.timeout);
353
+ if (timeout.current !== null) {
354
+ clearTimeout(timeout.current);
295
355
  }
296
356
  };
297
357
  }, []); // The effect do not track any value defined synchronously during the 1st render by hooks called after `useGridRows`
@@ -302,18 +362,18 @@ export const useGridRows = (apiRef, props) => {
302
362
  if (isFirstRender.current) {
303
363
  isFirstRender.current = false;
304
364
  return;
305
- } // The new rows have already been applied (most likely in the `GridEvents.rowGroupsPreProcessingChange` listener)
365
+ } // The new rows have already been applied (most likely in the `'rowGroupsPreProcessingChange'` listener)
306
366
 
307
367
 
308
- if (rowsCache.current.state.rowsBeforePartialUpdates === props.rows) {
368
+ if (apiRef.current.unstable_caches.rows.rowsBeforePartialUpdates === props.rows) {
309
369
  return;
310
370
  }
311
371
 
312
372
  logger.debug(`Updating all rows, new length ${props.rows.length}`);
313
- throttledRowsChange(convertGridRowsPropToState({
373
+ throttledRowsChange(convertRowsPropToState({
314
374
  rows: props.rows,
315
375
  getRowId: props.getRowId,
316
- prevState: rowsCache.current.state
376
+ prevCache: apiRef.current.unstable_caches.rows
317
377
  }), false);
318
- }, [props.rows, props.rowCount, props.getRowId, logger, throttledRowsChange]);
378
+ }, [props.rows, props.rowCount, props.getRowId, logger, throttledRowsChange, apiRef]);
319
379
  };
@@ -7,8 +7,7 @@ import { gridDensityRowHeightSelector, gridDensityFactorSelector } from '../dens
7
7
  import { gridFilterStateSelector } from '../filter/gridFilterSelector';
8
8
  import { gridPaginationSelector } from '../pagination/gridPaginationSelector';
9
9
  import { gridSortingStateSelector } from '../sorting/gridSortingSelector';
10
- import { GridEvents } from '../../../models/events/gridEvents';
11
- import { useGridApiEventHandler } from '../../utils/useGridApiEventHandler';
10
+ import { useGridRegisterPipeApplier } from '../../core/pipeProcessing';
12
11
  export const rowsMetaStateInitializer = state => _extends({}, state, {
13
12
  rowsMeta: {
14
13
  currentPageTotalHeight: 0,
@@ -65,10 +64,11 @@ export const useGridRowsMeta = (apiRef, props) => {
65
64
  if (getRowSpacing) {
66
65
  var _spacing$top, _spacing$bottom;
67
66
 
68
- const index = apiRef.current.getRowIndexRelativeToVisibleRows(row.id);
67
+ const indexRelativeToCurrentPage = apiRef.current.getRowIndexRelativeToVisibleRows(row.id);
69
68
  const spacing = getRowSpacing(_extends({}, row, {
70
- isFirstVisible: index === 0,
71
- isLastVisible: index === currentPage.rows.length - 1
69
+ isFirstVisible: indexRelativeToCurrentPage === 0,
70
+ isLastVisible: indexRelativeToCurrentPage === currentPage.rows.length - 1,
71
+ indexRelativeToCurrentPage
72
72
  }));
73
73
  initialHeights.spacingTop = (_spacing$top = spacing.top) != null ? _spacing$top : 0;
74
74
  initialHeights.spacingBottom = (_spacing$bottom = spacing.bottom) != null ? _spacing$bottom : 0;
@@ -120,14 +120,7 @@ export const useGridRowsMeta = (apiRef, props) => {
120
120
  React.useEffect(() => {
121
121
  hydrateRowsMeta();
122
122
  }, [rowHeight, filterState, paginationState, sortingState, hydrateRowsMeta]);
123
- const handlepipeProcessorRegister = React.useCallback(name => {
124
- if (name !== 'rowHeight') {
125
- return;
126
- }
127
-
128
- hydrateRowsMeta();
129
- }, [hydrateRowsMeta]);
130
- useGridApiEventHandler(apiRef, GridEvents.pipeProcessorRegister, handlepipeProcessorRegister);
123
+ useGridRegisterPipeApplier(apiRef, 'rowHeight', hydrateRowsMeta);
131
124
  const rowsMetaApi = {
132
125
  unstable_getRowHeight: getTargetRowHeight,
133
126
  unstable_getRowInternalSizes: getRowInternalSizes,
@@ -3,6 +3,7 @@ import { GRID_DEFAULT_STRATEGY, useGridRegisterStrategyProcessor } from '../../c
3
3
  const flatRowTreeCreationMethod = ({
4
4
  ids,
5
5
  idRowsLookup,
6
+ idToIdLookup,
6
7
  previousTree
7
8
  }) => {
8
9
  const tree = {};
@@ -28,6 +29,7 @@ const flatRowTreeCreationMethod = ({
28
29
  tree,
29
30
  treeDepth: 1,
30
31
  idRowsLookup,
32
+ idToIdLookup,
31
33
  ids
32
34
  };
33
35
  };
@@ -6,5 +6,7 @@ import { DataGridProcessedProps } from '../../../models/props/DataGridProps';
6
6
  * @requires useGridColumns (state) - can be after, async only
7
7
  * @requires useGridRows (state) - can be after, async only
8
8
  * @requires useGridRowsMeta (state) - can be after, async only
9
+ * @requires useGridFilter (state)
10
+ * @requires useGridColumnSpanning (method)
9
11
  */
10
12
  export declare const useGridScroll: (apiRef: React.MutableRefObject<GridApiCommunity>, props: Pick<DataGridProcessedProps, 'pagination'>) => void;
@@ -1,10 +1,12 @@
1
1
  import * as React from 'react';
2
2
  import { useGridLogger } from '../../utils/useGridLogger';
3
3
  import { gridColumnPositionsSelector, gridVisibleColumnDefinitionsSelector } from '../columns/gridColumnsSelector';
4
+ import { useGridSelector } from '../../utils/useGridSelector';
4
5
  import { gridPageSelector, gridPageSizeSelector } from '../pagination/gridPaginationSelector';
5
6
  import { gridRowCountSelector } from '../rows/gridRowsSelector';
6
7
  import { gridRowsMetaSelector } from '../rows/gridRowsMetaSelector';
7
- import { useGridApiMethod } from '../../utils/useGridApiMethod'; // Logic copied from https://www.w3.org/TR/wai-aria-practices/examples/listbox/js/listbox.js
8
+ import { useGridApiMethod } from '../../utils/useGridApiMethod';
9
+ import { gridVisibleSortedRowEntriesSelector } from '../filter/gridFilterSelector'; // Logic copied from https://www.w3.org/TR/wai-aria-practices/examples/listbox/js/listbox.js
8
10
  // Similar to https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView
9
11
 
10
12
  function scrollIntoView(dimensions) {
@@ -14,7 +16,12 @@ function scrollIntoView(dimensions) {
14
16
  offsetHeight,
15
17
  offsetTop
16
18
  } = dimensions;
17
- const elementBottom = offsetTop + offsetHeight;
19
+ const elementBottom = offsetTop + offsetHeight; // Always scroll to top when cell is higher than viewport to avoid scroll jump
20
+ // See https://github.com/mui/mui-x/issues/4513 and https://github.com/mui/mui-x/issues/4514
21
+
22
+ if (offsetHeight > clientHeight) {
23
+ return offsetTop;
24
+ }
18
25
 
19
26
  if (elementBottom - clientHeight > scrollTop) {
20
27
  return elementBottom - clientHeight;
@@ -31,6 +38,8 @@ function scrollIntoView(dimensions) {
31
38
  * @requires useGridColumns (state) - can be after, async only
32
39
  * @requires useGridRows (state) - can be after, async only
33
40
  * @requires useGridRowsMeta (state) - can be after, async only
41
+ * @requires useGridFilter (state)
42
+ * @requires useGridColumnSpanning (method)
34
43
  */
35
44
 
36
45
 
@@ -38,6 +47,7 @@ export const useGridScroll = (apiRef, props) => {
38
47
  const logger = useGridLogger(apiRef, 'useGridScroll');
39
48
  const colRef = apiRef.current.columnHeadersElementRef;
40
49
  const windowRef = apiRef.current.windowRef;
50
+ const visibleSortedRows = useGridSelector(apiRef, gridVisibleSortedRowEntriesSelector);
41
51
  const scrollToIndexes = React.useCallback(params => {
42
52
  const totalRowCount = gridRowCountSelector(apiRef);
43
53
  const visibleColumns = gridVisibleColumnDefinitionsSelector(apiRef);
@@ -52,10 +62,27 @@ export const useGridScroll = (apiRef, props) => {
52
62
 
53
63
  if (params.colIndex != null) {
54
64
  const columnPositions = gridColumnPositionsSelector(apiRef);
65
+ let cellWidth;
66
+
67
+ if (typeof params.rowIndex !== 'undefined') {
68
+ var _visibleSortedRows$pa;
69
+
70
+ const rowId = (_visibleSortedRows$pa = visibleSortedRows[params.rowIndex]) == null ? void 0 : _visibleSortedRows$pa.id;
71
+ const cellColSpanInfo = apiRef.current.unstable_getCellColSpanInfo(rowId, params.colIndex);
72
+
73
+ if (cellColSpanInfo && !cellColSpanInfo.spannedByColSpan) {
74
+ cellWidth = cellColSpanInfo.cellProps.width;
75
+ }
76
+ }
77
+
78
+ if (typeof cellWidth === 'undefined') {
79
+ cellWidth = visibleColumns[params.colIndex].computedWidth;
80
+ }
81
+
55
82
  scrollCoordinates.left = scrollIntoView({
56
83
  clientHeight: windowRef.current.clientWidth,
57
84
  scrollTop: windowRef.current.scrollLeft,
58
- offsetHeight: visibleColumns[params.colIndex].computedWidth,
85
+ offsetHeight: cellWidth,
59
86
  offsetTop: columnPositions[params.colIndex]
60
87
  });
61
88
  }
@@ -82,7 +109,7 @@ export const useGridScroll = (apiRef, props) => {
82
109
  }
83
110
 
84
111
  return false;
85
- }, [logger, apiRef, windowRef, props.pagination]);
112
+ }, [logger, apiRef, windowRef, props.pagination, visibleSortedRows]);
86
113
  const scroll = React.useCallback(params => {
87
114
  if (windowRef.current && params.left != null && colRef.current) {
88
115
  colRef.current.scrollLeft = params.left;
@@ -9,4 +9,4 @@ export declare const selectionStateInitializer: GridStateInitializer<Pick<DataGr
9
9
  * @requires useGridFocus (state) - can be after
10
10
  * @requires useGridKeyboardNavigation (`cellKeyDown` event must first be consumed by it)
11
11
  */
12
- export declare const useGridSelection: (apiRef: React.MutableRefObject<GridApiCommunity>, props: Pick<DataGridProcessedProps, 'checkboxSelection' | 'selectionModel' | 'onSelectionModelChange' | 'disableMultipleSelection' | 'disableSelectionOnClick' | 'isRowSelectable' | 'checkboxSelectionVisibleOnly' | 'pagination' | 'paginationMode' | 'classes'>) => void;
12
+ export declare const useGridSelection: (apiRef: React.MutableRefObject<GridApiCommunity>, props: Pick<DataGridProcessedProps, 'checkboxSelection' | 'selectionModel' | 'onSelectionModelChange' | 'disableMultipleSelection' | 'disableSelectionOnClick' | 'isRowSelectable' | 'checkboxSelectionVisibleOnly' | 'pagination' | 'paginationMode' | 'classes' | 'keepNonExistentRowsSelected'>) => void;