@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,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 ?? 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 => gridRowsLookupSelector(apiRef)[id] ?? null, [apiRef]);
94
93
  const lookup = React.useMemo(() => currentPage.rows.reduce((acc, {
95
94
  id
@@ -97,50 +96,50 @@ export const useGridRows = (apiRef, props) => {
97
96
  acc[id] = index;
98
97
  return acc;
99
98
  }, {}), [currentPage.rows]);
100
- const throttledRowsChange = React.useCallback((newState, throttle) => {
99
+ const throttledRowsChange = React.useCallback((newCache, throttle) => {
101
100
  const run = () => {
102
- rowsCache.current.timeout = null;
103
- rowsCache.current.lastUpdateMs = Date.now();
101
+ timeout.current = null;
102
+ lastUpdateMs.current = Date.now();
104
103
  apiRef.current.setState(state => _extends({}, state, {
105
- rows: getRowsStateFromCache(rowsCache.current, gridRowTreeSelector(apiRef), apiRef, props.rowCount)
104
+ rows: getRowsStateFromCache(apiRef.current.unstable_caches.rows, gridRowTreeSelector(apiRef), apiRef, props.rowCount, props.loading)
106
105
  }));
107
- apiRef.current.publishEvent(GridEvents.rowsSet);
106
+ apiRef.current.publishEvent('rowsSet');
108
107
  apiRef.current.forceUpdate();
109
108
  };
110
109
 
111
- if (rowsCache.current.timeout) {
112
- clearTimeout(rowsCache.current.timeout);
110
+ if (timeout.current) {
111
+ clearTimeout(timeout.current);
112
+ timeout.current = null;
113
113
  }
114
114
 
115
- rowsCache.current.state = newState;
116
- rowsCache.current.timeout = null;
115
+ apiRef.current.unstable_caches.rows = newCache;
117
116
 
118
117
  if (!throttle) {
119
118
  run();
120
119
  return;
121
120
  }
122
121
 
123
- const throttleRemainingTimeMs = props.throttleRowsMs - (Date.now() - rowsCache.current.lastUpdateMs);
122
+ const throttleRemainingTimeMs = props.throttleRowsMs - (Date.now() - lastUpdateMs.current);
124
123
 
125
124
  if (throttleRemainingTimeMs > 0) {
126
- rowsCache.current.timeout = setTimeout(run, throttleRemainingTimeMs);
125
+ timeout.current = setTimeout(run, throttleRemainingTimeMs);
127
126
  return;
128
127
  }
129
128
 
130
129
  run();
131
- }, [props.throttleRowsMs, props.rowCount, apiRef]);
130
+ }, [props.throttleRowsMs, props.rowCount, props.loading, apiRef]);
132
131
  /**
133
132
  * API METHODS
134
133
  */
135
134
 
136
135
  const setRows = React.useCallback(rows => {
137
136
  logger.debug(`Updating all rows, new length ${rows.length}`);
138
- throttledRowsChange(convertGridRowsPropToState({
137
+ throttledRowsChange(convertRowsPropToState({
139
138
  rows,
140
- prevState: rowsCache.current.state,
139
+ prevCache: apiRef.current.unstable_caches.rows,
141
140
  getRowId: props.getRowId
142
141
  }), true);
143
- }, [logger, props.getRowId, throttledRowsChange]);
142
+ }, [apiRef, logger, props.getRowId, throttledRowsChange]);
144
143
  const updateRows = React.useCallback(updates => {
145
144
  if (props.signature === GridSignature.DataGrid && updates.length > 1) {
146
145
  // TODO: Add test with direct call to `apiRef.current.updateRows` in DataGrid after enabling the `apiRef` on the free plan.
@@ -160,13 +159,15 @@ export const useGridRows = (apiRef, props) => {
160
159
  });
161
160
  const deletedRowIds = [];
162
161
  const newStateValue = {
163
- idRowsLookup: _extends({}, rowsCache.current.state.value.idRowsLookup),
164
- ids: [...rowsCache.current.state.value.ids]
162
+ idRowsLookup: _extends({}, apiRef.current.unstable_caches.rows.value.idRowsLookup),
163
+ idToIdLookup: _extends({}, apiRef.current.unstable_caches.rows.value.idToIdLookup),
164
+ ids: [...apiRef.current.unstable_caches.rows.value.ids]
165
165
  };
166
166
  uniqUpdates.forEach((partialRow, id) => {
167
167
  // eslint-disable-next-line no-underscore-dangle
168
168
  if (partialRow._action === 'delete') {
169
169
  delete newStateValue.idRowsLookup[id];
170
+ delete newStateValue.idToIdLookup[id];
170
171
  deletedRowIds.push(id);
171
172
  return;
172
173
  }
@@ -175,6 +176,7 @@ export const useGridRows = (apiRef, props) => {
175
176
 
176
177
  if (!oldRow) {
177
178
  newStateValue.idRowsLookup[id] = partialRow;
179
+ newStateValue.idToIdLookup[id] = id;
178
180
  newStateValue.ids.push(id);
179
181
  return;
180
182
  }
@@ -186,12 +188,12 @@ export const useGridRows = (apiRef, props) => {
186
188
  newStateValue.ids = newStateValue.ids.filter(id => !deletedRowIds.includes(id));
187
189
  }
188
190
 
189
- const state = _extends({}, rowsCache.current.state, {
191
+ const state = _extends({}, apiRef.current.unstable_caches.rows, {
190
192
  value: newStateValue
191
193
  });
192
194
 
193
195
  throttledRowsChange(state, true);
194
- }, [apiRef, props.getRowId, throttledRowsChange, props.signature]);
196
+ }, [props.signature, props.getRowId, throttledRowsChange, apiRef]);
195
197
  const getRowModels = React.useCallback(() => {
196
198
  const allRows = gridRowIdsSelector(apiRef);
197
199
  const idRowsLookup = gridRowsLookupSelector(apiRef);
@@ -221,19 +223,78 @@ export const useGridRows = (apiRef, props) => {
221
223
  });
222
224
  });
223
225
  apiRef.current.forceUpdate();
224
- apiRef.current.publishEvent(GridEvents.rowExpansionChange, newNode);
226
+ apiRef.current.publishEvent('rowExpansionChange', newNode);
225
227
  }, [apiRef]);
226
228
  const getRowNode = React.useCallback(id => gridRowTreeSelector(apiRef)[id] ?? null, [apiRef]);
229
+ const getRowGroupChildren = React.useCallback(({
230
+ skipAutoGeneratedRows = true,
231
+ groupId,
232
+ applySorting,
233
+ applyFiltering
234
+ }) => {
235
+ const tree = gridRowTreeSelector(apiRef);
236
+ let children;
237
+
238
+ if (applySorting) {
239
+ const groupNode = tree[groupId];
240
+
241
+ if (!groupNode) {
242
+ return [];
243
+ }
244
+
245
+ const sortedRowIds = gridSortedRowIdsSelector(apiRef);
246
+ children = [];
247
+ const startIndex = sortedRowIds.findIndex(id => id === groupId) + 1;
248
+
249
+ for (let index = startIndex; index < sortedRowIds.length && tree[sortedRowIds[index]].depth > groupNode.depth; index += 1) {
250
+ const id = sortedRowIds[index];
251
+ const node = tree[id];
252
+
253
+ if (!skipAutoGeneratedRows || !node.isAutoGenerated) {
254
+ children.push(id);
255
+ }
256
+ }
257
+ } else {
258
+ children = getTreeNodeDescendants(tree, groupId, skipAutoGeneratedRows);
259
+ }
260
+
261
+ if (applyFiltering) {
262
+ const filteredRowsLookup = gridFilteredRowsLookupSelector(apiRef);
263
+ children = children.filter(childId => filteredRowsLookup[childId] !== false);
264
+ }
265
+
266
+ return children;
267
+ }, [apiRef]);
268
+ const setRowIndex = React.useCallback((rowId, targetIndex) => {
269
+ const allRows = gridRowIdsSelector(apiRef);
270
+ const oldIndex = allRows.findIndex(row => row === rowId);
271
+
272
+ if (oldIndex === -1 || oldIndex === targetIndex) {
273
+ return;
274
+ }
275
+
276
+ logger.debug(`Moving row ${rowId} to index ${targetIndex}`);
277
+ const updatedRows = [...allRows];
278
+ updatedRows.splice(targetIndex, 0, updatedRows.splice(oldIndex, 1)[0]);
279
+ apiRef.current.setState(state => _extends({}, state, {
280
+ rows: _extends({}, state.rows, {
281
+ ids: updatedRows
282
+ })
283
+ }));
284
+ apiRef.current.applySorting();
285
+ }, [apiRef, logger]);
227
286
  const rowApi = {
228
287
  getRow,
229
288
  getRowModels,
230
289
  getRowsCount,
231
290
  getAllRowIds,
232
291
  setRows,
292
+ setRowIndex,
233
293
  updateRows,
234
294
  setRowChildrenExpansion,
235
295
  getRowNode,
236
- getRowIndexRelativeToVisibleRows
296
+ getRowIndexRelativeToVisibleRows,
297
+ getRowGroupChildren
237
298
  };
238
299
  /**
239
300
  * EVENTS
@@ -243,7 +304,7 @@ export const useGridRows = (apiRef, props) => {
243
304
  logger.info(`Row grouping pre-processing have changed, regenerating the row tree`);
244
305
  let rows;
245
306
 
246
- if (rowsCache.current.state.rowsBeforePartialUpdates === props.rows) {
307
+ if (apiRef.current.unstable_caches.rows.rowsBeforePartialUpdates === props.rows) {
247
308
  // The `props.rows` has not changed since the last row grouping
248
309
  // We can keep the potential updates stored in `inputRowsAfterUpdates` on the new grouping
249
310
  rows = undefined;
@@ -254,12 +315,12 @@ export const useGridRows = (apiRef, props) => {
254
315
  rows = props.rows;
255
316
  }
256
317
 
257
- throttledRowsChange(convertGridRowsPropToState({
318
+ throttledRowsChange(convertRowsPropToState({
258
319
  rows,
259
320
  getRowId: props.getRowId,
260
- prevState: rowsCache.current.state
321
+ prevCache: apiRef.current.unstable_caches.rows
261
322
  }), false);
262
- }, [logger, throttledRowsChange, props.getRowId, props.rows]);
323
+ }, [logger, apiRef, props.rows, props.getRowId, throttledRowsChange]);
263
324
  const handleStrategyProcessorChange = React.useCallback(methodName => {
264
325
  if (methodName === 'rowTreeCreation') {
265
326
  groupRows();
@@ -272,8 +333,8 @@ export const useGridRows = (apiRef, props) => {
272
333
  groupRows();
273
334
  }
274
335
  }, [apiRef, groupRows]);
275
- useGridApiEventHandler(apiRef, GridEvents.activeStrategyProcessorChange, handleStrategyProcessorChange);
276
- useGridApiEventHandler(apiRef, GridEvents.strategyAvailabilityChange, handleStrategyActivityChange);
336
+ useGridApiEventHandler(apiRef, 'activeStrategyProcessorChange', handleStrategyProcessorChange);
337
+ useGridApiEventHandler(apiRef, 'strategyAvailabilityChange', handleStrategyActivityChange);
277
338
  useGridApiMethod(apiRef, rowApi, 'GridRowApi');
278
339
  /**
279
340
  * EFFECTS
@@ -281,9 +342,8 @@ export const useGridRows = (apiRef, props) => {
281
342
 
282
343
  React.useEffect(() => {
283
344
  return () => {
284
- if (rowsCache.current.timeout !== null) {
285
- // eslint-disable-next-line react-hooks/exhaustive-deps
286
- clearTimeout(rowsCache.current.timeout);
345
+ if (timeout.current !== null) {
346
+ clearTimeout(timeout.current);
287
347
  }
288
348
  };
289
349
  }, []); // The effect do not track any value defined synchronously during the 1st render by hooks called after `useGridRows`
@@ -294,18 +354,18 @@ export const useGridRows = (apiRef, props) => {
294
354
  if (isFirstRender.current) {
295
355
  isFirstRender.current = false;
296
356
  return;
297
- } // The new rows have already been applied (most likely in the `GridEvents.rowGroupsPreProcessingChange` listener)
357
+ } // The new rows have already been applied (most likely in the `'rowGroupsPreProcessingChange'` listener)
298
358
 
299
359
 
300
- if (rowsCache.current.state.rowsBeforePartialUpdates === props.rows) {
360
+ if (apiRef.current.unstable_caches.rows.rowsBeforePartialUpdates === props.rows) {
301
361
  return;
302
362
  }
303
363
 
304
364
  logger.debug(`Updating all rows, new length ${props.rows.length}`);
305
- throttledRowsChange(convertGridRowsPropToState({
365
+ throttledRowsChange(convertRowsPropToState({
306
366
  rows: props.rows,
307
367
  getRowId: props.getRowId,
308
- prevState: rowsCache.current.state
368
+ prevCache: apiRef.current.unstable_caches.rows
309
369
  }), false);
310
- }, [props.rows, props.rowCount, props.getRowId, logger, throttledRowsChange]);
370
+ }, [props.rows, props.rowCount, props.getRowId, logger, throttledRowsChange, apiRef]);
311
371
  };
@@ -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,
@@ -61,10 +60,11 @@ export const useGridRowsMeta = (apiRef, props) => {
61
60
  };
62
61
 
63
62
  if (getRowSpacing) {
64
- const index = apiRef.current.getRowIndexRelativeToVisibleRows(row.id);
63
+ const indexRelativeToCurrentPage = apiRef.current.getRowIndexRelativeToVisibleRows(row.id);
65
64
  const spacing = getRowSpacing(_extends({}, row, {
66
- isFirstVisible: index === 0,
67
- isLastVisible: index === currentPage.rows.length - 1
65
+ isFirstVisible: indexRelativeToCurrentPage === 0,
66
+ isLastVisible: indexRelativeToCurrentPage === currentPage.rows.length - 1,
67
+ indexRelativeToCurrentPage
68
68
  }));
69
69
  initialHeights.spacingTop = spacing.top ?? 0;
70
70
  initialHeights.spacingBottom = spacing.bottom ?? 0;
@@ -108,14 +108,7 @@ export const useGridRowsMeta = (apiRef, props) => {
108
108
  React.useEffect(() => {
109
109
  hydrateRowsMeta();
110
110
  }, [rowHeight, filterState, paginationState, sortingState, hydrateRowsMeta]);
111
- const handlepipeProcessorRegister = React.useCallback(name => {
112
- if (name !== 'rowHeight') {
113
- return;
114
- }
115
-
116
- hydrateRowsMeta();
117
- }, [hydrateRowsMeta]);
118
- useGridApiEventHandler(apiRef, GridEvents.pipeProcessorRegister, handlepipeProcessorRegister);
111
+ useGridRegisterPipeApplier(apiRef, 'rowHeight', hydrateRowsMeta);
119
112
  const rowsMetaApi = {
120
113
  unstable_getRowHeight: getTargetRowHeight,
121
114
  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
  };
@@ -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,25 @@ 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
+ const rowId = visibleSortedRows[params.rowIndex]?.id;
69
+ const cellColSpanInfo = apiRef.current.unstable_getCellColSpanInfo(rowId, params.colIndex);
70
+
71
+ if (cellColSpanInfo && !cellColSpanInfo.spannedByColSpan) {
72
+ cellWidth = cellColSpanInfo.cellProps.width;
73
+ }
74
+ }
75
+
76
+ if (typeof cellWidth === 'undefined') {
77
+ cellWidth = visibleColumns[params.colIndex].computedWidth;
78
+ }
79
+
55
80
  scrollCoordinates.left = scrollIntoView({
56
81
  clientHeight: windowRef.current.clientWidth,
57
82
  scrollTop: windowRef.current.scrollLeft,
58
- offsetHeight: visibleColumns[params.colIndex].computedWidth,
83
+ offsetHeight: cellWidth,
59
84
  offsetTop: columnPositions[params.colIndex]
60
85
  });
61
86
  }
@@ -82,7 +107,7 @@ export const useGridScroll = (apiRef, props) => {
82
107
  }
83
108
 
84
109
  return false;
85
- }, [logger, apiRef, windowRef, props.pagination]);
110
+ }, [logger, apiRef, windowRef, props.pagination, visibleSortedRows]);
86
111
  const scroll = React.useCallback(params => {
87
112
  if (windowRef.current && params.left != null && colRef.current) {
88
113
  colRef.current.scrollLeft = params.left;
@@ -1,6 +1,5 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import * as React from 'react';
3
- import { GridEvents } from '../../../models/events';
4
3
  import { useGridApiEventHandler } from '../../utils/useGridApiEventHandler';
5
4
  import { useGridApiMethod } from '../../utils/useGridApiMethod';
6
5
  import { useGridLogger } from '../../utils/useGridLogger';
@@ -13,6 +12,7 @@ import { GRID_CHECKBOX_SELECTION_COL_DEF, GRID_ACTIONS_COLUMN_TYPE } from '../..
13
12
  import { GridCellModes } from '../../../models/gridEditRowModel';
14
13
  import { isKeyboardEvent, isNavigationKey } from '../../../utils/keyboardUtils';
15
14
  import { getVisibleRows, useGridVisibleRows } from '../../utils/useGridVisibleRows';
15
+ import { GRID_DETAIL_PANEL_TOGGLE_FIELD } from '../../../constants/gridDetailPanelToggleField';
16
16
 
17
17
  const getSelectionModelPropValue = (selectionModelProp, prevSelectionModel) => {
18
18
  if (selectionModelProp == null) {
@@ -51,7 +51,7 @@ export const useGridSelection = (apiRef, props) => {
51
51
  propModel: propSelectionModel,
52
52
  propOnChange: props.onSelectionModelChange,
53
53
  stateSelector: gridSelectionStateSelector,
54
- changeEvent: GridEvents.selectionChange
54
+ changeEvent: 'selectionChange'
55
55
  });
56
56
  const {
57
57
  checkboxSelection,
@@ -191,6 +191,10 @@ export const useGridSelection = (apiRef, props) => {
191
191
  */
192
192
 
193
193
  const removeOutdatedSelection = React.useCallback(() => {
194
+ if (props.keepNonExistentRowsSelected) {
195
+ return;
196
+ }
197
+
194
198
  const currentSelection = gridSelectionStateSelector(apiRef.current.state);
195
199
  const rowsLookup = gridRowsLookupSelector(apiRef); // We clone the existing object to avoid mutating the same object returned by the selector to others part of the project
196
200
 
@@ -207,12 +211,12 @@ export const useGridSelection = (apiRef, props) => {
207
211
  if (hasChanged) {
208
212
  apiRef.current.setSelectionModel(Object.values(selectionLookup));
209
213
  }
210
- }, [apiRef]);
214
+ }, [apiRef, props.keepNonExistentRowsSelected]);
211
215
  const handleSingleRowSelection = React.useCallback((id, event) => {
212
216
  const hasCtrlKey = event.metaKey || event.ctrlKey; // multiple selection is only allowed if:
213
217
  // - it is a checkboxSelection
214
218
  // - it is a keyboard selection
215
- // - CTRL is pressed
219
+ // - Ctrl is pressed
216
220
 
217
221
  const isMultipleSelectionDisabled = !checkboxSelection && !hasCtrlKey && !isKeyboardEvent(event);
218
222
  const resetSelection = !canHaveMultipleSelection || isMultipleSelectionDisabled;
@@ -234,7 +238,7 @@ export const useGridSelection = (apiRef, props) => {
234
238
  return;
235
239
  }
236
240
 
237
- if (params.field === '__detail_panel_toggle__') {
241
+ if (params.field === GRID_DETAIL_PANEL_TOGGLE_FIELD) {
238
242
  // click to open the detail panel should not select the row
239
243
  return;
240
244
  }
@@ -340,12 +344,12 @@ export const useGridSelection = (apiRef, props) => {
340
344
  selectRows(apiRef.current.getAllRowIds(), true);
341
345
  }
342
346
  }, [apiRef, handleSingleRowSelection, selectRows, visibleRows.rows, canHaveMultipleSelection]);
343
- useGridApiEventHandler(apiRef, GridEvents.visibleRowsSet, removeOutdatedSelection);
344
- useGridApiEventHandler(apiRef, GridEvents.cellClick, handleCellClick);
345
- useGridApiEventHandler(apiRef, GridEvents.rowSelectionCheckboxChange, handleRowSelectionCheckboxChange);
346
- useGridApiEventHandler(apiRef, GridEvents.headerSelectionCheckboxChange, handleHeaderSelectionCheckboxChange);
347
- useGridApiEventHandler(apiRef, GridEvents.cellMouseDown, preventSelectionOnShift);
348
- useGridApiEventHandler(apiRef, GridEvents.cellKeyDown, handleCellKeyDown);
347
+ useGridApiEventHandler(apiRef, 'sortedRowsSet', removeOutdatedSelection);
348
+ useGridApiEventHandler(apiRef, 'cellClick', handleCellClick);
349
+ useGridApiEventHandler(apiRef, 'rowSelectionCheckboxChange', handleRowSelectionCheckboxChange);
350
+ useGridApiEventHandler(apiRef, 'headerSelectionCheckboxChange', handleHeaderSelectionCheckboxChange);
351
+ useGridApiEventHandler(apiRef, 'cellMouseDown', preventSelectionOnShift);
352
+ useGridApiEventHandler(apiRef, 'cellKeyDown', handleCellKeyDown);
349
353
  /**
350
354
  * EFFECTS
351
355
  */
@@ -1,6 +1,5 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import * as React from 'react';
3
- import { GridEvents } from '../../../models/events';
4
3
  import { GridFeatureModeConstant } from '../../../models/gridFeatureMode';
5
4
  import { isEnterKey } from '../../../utils/keyboardUtils';
6
5
  import { useGridApiEventHandler } from '../../utils/useGridApiEventHandler';
@@ -34,7 +33,7 @@ export const useGridSorting = (apiRef, props) => {
34
33
  propModel: props.sortModel,
35
34
  propOnChange: props.onSortModelChange,
36
35
  stateSelector: gridSortModelSelector,
37
- changeEvent: GridEvents.sortModelChange
36
+ changeEvent: 'sortModelChange'
38
37
  });
39
38
  const upsertSortModel = React.useCallback((field, sortItem) => {
40
39
  const sortModel = gridSortModelSelector(apiRef);
@@ -74,17 +73,16 @@ export const useGridSorting = (apiRef, props) => {
74
73
  */
75
74
 
76
75
  const applySorting = React.useCallback(() => {
77
- if (props.sortingMode === GridFeatureModeConstant.server) {
78
- logger.debug('Skipping sorting rows as sortingMode = server');
79
- apiRef.current.setState(state => _extends({}, state, {
80
- sorting: _extends({}, state.sorting, {
81
- sortedRows: gridRowIdsSelector(state, apiRef.current.instanceId)
82
- })
83
- }));
84
- return;
85
- }
86
-
87
76
  apiRef.current.setState(state => {
77
+ if (props.sortingMode === GridFeatureModeConstant.server) {
78
+ logger.debug('Skipping sorting rows as sortingMode = server');
79
+ return _extends({}, state, {
80
+ sorting: _extends({}, state.sorting, {
81
+ sortedRows: gridRowIdsSelector(state, apiRef.current.instanceId)
82
+ })
83
+ });
84
+ }
85
+
88
86
  const sortModel = gridSortModelSelector(state, apiRef.current.instanceId);
89
87
  const sortRowList = buildAggregatedSortingApplier(sortModel, apiRef);
90
88
  const sortedRows = apiRef.current.unstable_applyStrategyProcessor('sorting', {
@@ -96,6 +94,7 @@ export const useGridSorting = (apiRef, props) => {
96
94
  })
97
95
  });
98
96
  });
97
+ apiRef.current.publishEvent('sortedRowsSet');
99
98
  apiRef.current.forceUpdate();
100
99
  }, [apiRef, logger, props.sortingMode]);
101
100
  const setSortModel = React.useCallback(model => {
@@ -196,7 +195,7 @@ export const useGridSorting = (apiRef, props) => {
196
195
  const handleColumnHeaderKeyDown = React.useCallback(({
197
196
  colDef
198
197
  }, event) => {
199
- // CTRL + Enter opens the column menu
198
+ // Ctrl + Enter opens the column menu
200
199
  if (isEnterKey(event.key) && !event.ctrlKey && !event.metaKey) {
201
200
  sortColumn(colDef, undefined, event.shiftKey);
202
201
  }
@@ -219,11 +218,11 @@ export const useGridSorting = (apiRef, props) => {
219
218
  apiRef.current.applySorting();
220
219
  }
221
220
  }, [apiRef]);
222
- useGridApiEventHandler(apiRef, GridEvents.columnHeaderClick, handleColumnHeaderClick);
223
- useGridApiEventHandler(apiRef, GridEvents.columnHeaderKeyDown, handleColumnHeaderKeyDown);
224
- useGridApiEventHandler(apiRef, GridEvents.rowsSet, apiRef.current.applySorting);
225
- useGridApiEventHandler(apiRef, GridEvents.columnsChange, handleColumnsChange);
226
- useGridApiEventHandler(apiRef, GridEvents.activeStrategyProcessorChange, handleStrategyProcessorChange);
221
+ useGridApiEventHandler(apiRef, 'columnHeaderClick', handleColumnHeaderClick);
222
+ useGridApiEventHandler(apiRef, 'columnHeaderKeyDown', handleColumnHeaderKeyDown);
223
+ useGridApiEventHandler(apiRef, 'rowsSet', apiRef.current.applySorting);
224
+ useGridApiEventHandler(apiRef, 'columnsChange', handleColumnsChange);
225
+ useGridApiEventHandler(apiRef, 'activeStrategyProcessorChange', handleStrategyProcessorChange);
227
226
  /**
228
227
  * 1ST RENDER
229
228
  */