@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,6 +1,7 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import { GridLinkOperator } from '../../../models';
3
3
  import { buildWarning } from '../../../utils/warning';
4
+ import { gridColumnFieldsSelector } from '../columns';
4
5
 
5
6
  /**
6
7
  * Adds default values to the optional fields of a filter items.
@@ -76,7 +77,7 @@ export const mergeStateWithFilterModel = (filterModel, disableMultipleColumnsFil
76
77
  * @returns {GridAggregatedFilterItemApplier | null} A method that checks if a row is matching the current filter model. If `null`, we consider that all the rows are matching the filters.
77
78
  */
78
79
 
79
- export const buildAggregatedFilterApplier = (filterModel, apiRef) => {
80
+ export const buildAggregatedFilterItemsApplier = (filterModel, apiRef) => {
80
81
  const {
81
82
  items,
82
83
  linkOperator = GridLinkOperator.And
@@ -142,7 +143,7 @@ export const buildAggregatedFilterApplier = (filterModel, apiRef) => {
142
143
  }
143
144
 
144
145
  return (rowId, shouldApplyFilter) => {
145
- const filteredAppliers = shouldApplyFilter ? appliers.filter(applier => shouldApplyFilter(applier.item)) : appliers; // Return `false` as soon as we have a failing filter
146
+ const filteredAppliers = shouldApplyFilter ? appliers.filter(applier => shouldApplyFilter(applier.item.columnField)) : appliers; // Return `false` as soon as we have a failing filter
146
147
 
147
148
  if (linkOperator === GridLinkOperator.And) {
148
149
  return filteredAppliers.every(applier => applier.fn(rowId));
@@ -151,4 +152,81 @@ export const buildAggregatedFilterApplier = (filterModel, apiRef) => {
151
152
 
152
153
  return filteredAppliers.some(applier => applier.fn(rowId));
153
154
  };
155
+ };
156
+ /**
157
+ * Generates a method to easily check if a row is matching the current quick filter.
158
+ * @param {any[]} values The model with which we want to filter the rows.
159
+ * @param {React.MutableRefObject<GridApiCommunity>} apiRef The API of the grid.
160
+ * @returns {GridAggregatedFilterItemApplier | null} A method that checks if a row is matching the current filter model. If `null`, we consider that all the rows are matching the filters.
161
+ */
162
+
163
+ export const buildAggregatedQuickFilterApplier = (filterModel, apiRef) => {
164
+ const {
165
+ quickFilterValues = [],
166
+ quickFilterLogicOperator = GridLinkOperator.And
167
+ } = filterModel;
168
+
169
+ if (quickFilterValues.length === 0) {
170
+ return null;
171
+ }
172
+
173
+ const columnsFields = gridColumnFieldsSelector(apiRef);
174
+ const appliersPerColumnField = {};
175
+ columnsFields.forEach(field => {
176
+ const column = apiRef.current.getColumn(field);
177
+ const getApplyQuickFilterFn = column?.getApplyQuickFilterFn;
178
+
179
+ if (!getApplyQuickFilterFn) {
180
+ return;
181
+ }
182
+
183
+ appliersPerColumnField[field] = quickFilterValues.map(value => getApplyQuickFilterFn(value, column, apiRef));
184
+ }); // If some value does not have an applier we ignore them
185
+
186
+ const sanitizedQuickFilterValues = quickFilterValues.filter((value, index) => Object.keys(appliersPerColumnField).some(field => appliersPerColumnField[field][index] != null));
187
+ return (rowId, shouldApplyFilter) => {
188
+ const usedCellParams = {};
189
+ Object.keys(appliersPerColumnField).forEach(columnField => {
190
+ if (!shouldApplyFilter || shouldApplyFilter(columnField)) {
191
+ usedCellParams[columnField] = apiRef.current.getCellParams(rowId, columnField);
192
+ }
193
+ }); // Return `false` as soon as we have a quick filter value that does not match any column
194
+
195
+ if (quickFilterLogicOperator === GridLinkOperator.And) {
196
+ return sanitizedQuickFilterValues.every((value, index) => Object.keys(appliersPerColumnField).some(field => {
197
+ if (appliersPerColumnField[field][index] == null) {
198
+ return false;
199
+ }
200
+
201
+ return appliersPerColumnField[field][index]?.(usedCellParams[field]);
202
+ }));
203
+ } // Return `true` as soon as we have have a quick filter value that match any column
204
+
205
+
206
+ return sanitizedQuickFilterValues.some((value, index) => Object.keys(appliersPerColumnField).some(field => {
207
+ if (appliersPerColumnField[field][index] == null) {
208
+ return false;
209
+ }
210
+
211
+ return appliersPerColumnField[field][index]?.(usedCellParams[field]);
212
+ }));
213
+ };
214
+ };
215
+ export const buildAggregatedFilterApplier = (filterModel, apiRef) => {
216
+ const isRowMatchingFilterItems = buildAggregatedFilterItemsApplier(filterModel, apiRef);
217
+ const isRowMatchingQuickFilter = buildAggregatedQuickFilterApplier(filterModel, apiRef);
218
+
219
+ if (isRowMatchingFilterItems == null && isRowMatchingQuickFilter == null) {
220
+ return null;
221
+ }
222
+
223
+ if (isRowMatchingFilterItems == null) {
224
+ return isRowMatchingQuickFilter;
225
+ }
226
+
227
+ if (isRowMatchingQuickFilter == null) {
228
+ return isRowMatchingFilterItems;
229
+ }
230
+
231
+ return (rowId, shouldApplyFilter) => isRowMatchingFilterItems(rowId, shouldApplyFilter) && isRowMatchingQuickFilter(rowId, shouldApplyFilter);
154
232
  };
@@ -1,6 +1,5 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import * as React from 'react';
3
- import { GridEvents } from '../../../models/events';
4
3
  import { GridFeatureModeConstant } from '../../../models/gridFeatureMode';
5
4
  import { useGridApiEventHandler } from '../../utils/useGridApiEventHandler';
6
5
  import { useGridApiMethod } from '../../utils/useGridApiMethod';
@@ -14,6 +13,7 @@ import { gridRowIdsSelector } from '../rows';
14
13
  import { useGridRegisterPipeProcessor } from '../../core/pipeProcessing';
15
14
  import { GRID_DEFAULT_STRATEGY, useGridRegisterStrategyProcessor } from '../../core/strategyProcessing';
16
15
  import { buildAggregatedFilterApplier, sanitizeFilterModel, mergeStateWithFilterModel } from './gridFilterUtils';
16
+ import { isDeepEqual } from '../../../utils/utils';
17
17
  import { jsx as _jsx } from "react/jsx-runtime";
18
18
  export const filterStateInitializer = (state, props, apiRef) => {
19
19
  const filterModel = props.filterModel ?? props.initialState?.filter?.filterModel ?? getDefaultGridFilterModel();
@@ -38,13 +38,9 @@ export const useGridFilter = (apiRef, props) => {
38
38
  propModel: props.filterModel,
39
39
  propOnChange: props.onFilterModelChange,
40
40
  stateSelector: gridFilterModelSelector,
41
- changeEvent: GridEvents.filterModelChange
41
+ changeEvent: 'filterModelChange'
42
42
  });
43
- /**
44
- * API METHODS
45
- */
46
-
47
- const applyFilters = React.useCallback(() => {
43
+ const updateFilteredRows = React.useCallback(() => {
48
44
  apiRef.current.setState(state => {
49
45
  const filterModel = gridFilterModelSelector(state, apiRef.current.instanceId);
50
46
  const isRowMatchingFilters = props.filterMode === GridFeatureModeConstant.client ? buildAggregatedFilterApplier(filterModel, apiRef) : null;
@@ -55,9 +51,16 @@ export const useGridFilter = (apiRef, props) => {
55
51
  filter: _extends({}, state.filter, filteringResult)
56
52
  });
57
53
  });
58
- apiRef.current.publishEvent(GridEvents.visibleRowsSet);
54
+ apiRef.current.publishEvent('filteredRowsSet');
55
+ }, [props.filterMode, apiRef]);
56
+ /**
57
+ * API METHODS
58
+ */
59
+
60
+ const applyFilters = React.useCallback(() => {
61
+ updateFilteredRows();
59
62
  apiRef.current.forceUpdate();
60
- }, [apiRef, props.filterMode]);
63
+ }, [apiRef, updateFilteredRows]);
61
64
  const upsertFilterItem = React.useCallback(item => {
62
65
  const filterModel = gridFilterModelSelector(apiRef);
63
66
  const items = [...filterModel.items];
@@ -128,6 +131,17 @@ export const useGridFilter = (apiRef, props) => {
128
131
  linkOperator
129
132
  }));
130
133
  }, [apiRef]);
134
+ const setQuickFilterValues = React.useCallback(values => {
135
+ const filterModel = gridFilterModelSelector(apiRef);
136
+
137
+ if (isDeepEqual(filterModel.quickFilterValues, values)) {
138
+ return;
139
+ }
140
+
141
+ apiRef.current.setFilterModel(_extends({}, filterModel, {
142
+ quickFilterValues: [...values]
143
+ }));
144
+ }, [apiRef]);
131
145
  const setFilterModel = React.useCallback(model => {
132
146
  const currentModel = gridFilterModelSelector(apiRef);
133
147
 
@@ -149,7 +163,8 @@ export const useGridFilter = (apiRef, props) => {
149
163
  setFilterModel,
150
164
  showFilterPanel,
151
165
  hideFilterPanel,
152
- getVisibleRowModels
166
+ getVisibleRowModels,
167
+ setQuickFilterValues
153
168
  };
154
169
  useGridApiMethod(apiRef, filterApi, 'GridFilterApi');
155
170
  /**
@@ -237,11 +252,13 @@ export const useGridFilter = (apiRef, props) => {
237
252
  if (methodName === 'filtering') {
238
253
  apiRef.current.unstable_applyFilters();
239
254
  }
240
- }, [apiRef]);
241
- useGridApiEventHandler(apiRef, GridEvents.rowsSet, apiRef.current.unstable_applyFilters);
242
- useGridApiEventHandler(apiRef, GridEvents.rowExpansionChange, apiRef.current.unstable_applyFilters);
243
- useGridApiEventHandler(apiRef, GridEvents.columnsChange, handleColumnsChange);
244
- useGridApiEventHandler(apiRef, GridEvents.activeStrategyProcessorChange, handleStrategyProcessorChange);
255
+ }, [apiRef]); // Do not call `apiRef.current.forceUpdate` to avoid re-render before updating the sorted rows.
256
+ // Otherwise, the state is not consistent during the render
257
+
258
+ useGridApiEventHandler(apiRef, 'rowsSet', updateFilteredRows);
259
+ useGridApiEventHandler(apiRef, 'rowExpansionChange', apiRef.current.unstable_applyFilters);
260
+ useGridApiEventHandler(apiRef, 'columnsChange', handleColumnsChange);
261
+ useGridApiEventHandler(apiRef, 'activeStrategyProcessorChange', handleStrategyProcessorChange);
245
262
  /**
246
263
  * 1ST RENDER
247
264
  */
@@ -1,7 +1,6 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import * as React from 'react';
3
3
  import { ownerDocument } from '@mui/material/utils';
4
- import { GridEvents } from '../../../models/events';
5
4
  import { useGridApiMethod } from '../../utils/useGridApiMethod';
6
5
  import { useGridLogger } from '../../utils/useGridLogger';
7
6
  import { useGridApiEventHandler } from '../../utils/useGridApiEventHandler';
@@ -30,14 +29,9 @@ export const useGridFocus = (apiRef, props) => {
30
29
  const logger = useGridLogger(apiRef, 'useGridFocus');
31
30
  const lastClickedCell = React.useRef(null);
32
31
  const setCellFocus = React.useCallback((id, field) => {
33
- // The row might have been deleted
34
- if (!apiRef.current.getRow(id)) {
35
- return;
36
- }
37
-
38
32
  const focusedCell = gridFocusCellSelector(apiRef);
39
33
 
40
- if (focusedCell?.id === id && focusedCell.field === field) {
34
+ if (focusedCell?.id === id && focusedCell?.field === field) {
41
35
  return;
42
36
  }
43
37
 
@@ -60,14 +54,19 @@ export const useGridFocus = (apiRef, props) => {
60
54
  }
61
55
  });
62
56
  });
63
- apiRef.current.forceUpdate();
64
- apiRef.current.publishEvent(GridEvents.cellFocusIn, apiRef.current.getCellParams(id, field));
57
+ apiRef.current.forceUpdate(); // The row might have been deleted
58
+
59
+ if (!apiRef.current.getRow(id)) {
60
+ return;
61
+ }
62
+
63
+ apiRef.current.publishEvent('cellFocusIn', apiRef.current.getCellParams(id, field));
65
64
  }, [apiRef, logger]);
66
65
  const setColumnHeaderFocus = React.useCallback((field, event = {}) => {
67
66
  const cell = gridFocusCellSelector(apiRef);
68
67
 
69
68
  if (cell) {
70
- apiRef.current.publishEvent(GridEvents.cellFocusOut, apiRef.current.getCellParams(cell.id, cell.field), event);
69
+ apiRef.current.publishEvent('cellFocusOut', apiRef.current.getCellParams(cell.id, cell.field), event);
71
70
  }
72
71
 
73
72
  apiRef.current.setState(state => {
@@ -102,21 +101,31 @@ export const useGridFocus = (apiRef, props) => {
102
101
  rowIndexToFocus += 1;
103
102
  }
104
103
 
104
+ const currentPage = getVisibleRows(apiRef, {
105
+ pagination: props.pagination,
106
+ paginationMode: props.paginationMode
107
+ });
108
+
105
109
  if (columnIndexToFocus >= visibleColumns.length) {
106
- // Go to next row if we are at the last column
110
+ // Go to next row if we are after the last column
107
111
  rowIndexToFocus += 1;
108
- columnIndexToFocus = 0;
112
+
113
+ if (rowIndexToFocus < currentPage.rows.length) {
114
+ // Go to first column of the next row if there's one more row
115
+ columnIndexToFocus = 0;
116
+ }
109
117
  } else if (columnIndexToFocus < 0) {
110
- // Go to previous row if we are at the first column
118
+ // Go to previous row if we are before the first column
111
119
  rowIndexToFocus -= 1;
112
- columnIndexToFocus = visibleColumns.length - 1;
120
+
121
+ if (rowIndexToFocus >= 0) {
122
+ // Go to last column of the previous if there's one more row
123
+ columnIndexToFocus = visibleColumns.length - 1;
124
+ }
113
125
  }
114
126
 
115
- const currentPage = getVisibleRows(apiRef, {
116
- pagination: props.pagination,
117
- paginationMode: props.paginationMode
118
- });
119
- rowIndexToFocus = clamp(rowIndexToFocus, currentPage.range.firstRowIndex, currentPage.range.lastRowIndex);
127
+ rowIndexToFocus = clamp(rowIndexToFocus, 0, currentPage.rows.length - 1);
128
+ columnIndexToFocus = clamp(columnIndexToFocus, 0, visibleColumns.length - 1);
120
129
  const rowToFocus = currentPage.rows[rowIndexToFocus];
121
130
  const columnToFocus = visibleColumns[columnIndexToFocus];
122
131
  apiRef.current.setCellFocus(rowToFocus.id, columnToFocus.field);
@@ -186,7 +195,7 @@ export const useGridFocus = (apiRef, props) => {
186
195
  // Publishes an event to notify that the focus was lost
187
196
 
188
197
 
189
- apiRef.current.publishEvent(GridEvents.cellFocusOut, apiRef.current.getCellParams(focusedCell.id, focusedCell.field), event);
198
+ apiRef.current.publishEvent('cellFocusOut', apiRef.current.getCellParams(focusedCell.id, focusedCell.field), event);
190
199
 
191
200
  if (cellParams) {
192
201
  apiRef.current.setCellFocus(cellParams.id, cellParams.field);
@@ -211,27 +220,23 @@ export const useGridFocus = (apiRef, props) => {
211
220
  apiRef.current.setCellFocus(params.id, params.field);
212
221
  }
213
222
  }, [apiRef]);
223
+ const handleRowSet = React.useCallback(() => {
224
+ const cell = gridFocusCellSelector(apiRef); // If the focused cell is in a row which does not exist anymore, then remove the focus
225
+
226
+ if (cell && !apiRef.current.getRow(cell.id)) {
227
+ apiRef.current.setState(state => _extends({}, state, {
228
+ focus: {
229
+ cell: null,
230
+ columnHeader: null
231
+ }
232
+ }));
233
+ }
234
+ }, [apiRef]);
214
235
  useGridApiMethod(apiRef, {
215
236
  setCellFocus,
216
237
  setColumnHeaderFocus,
217
238
  unstable_moveFocusToRelativeCell: moveFocusToRelativeCell
218
239
  }, 'GridFocusApi');
219
- React.useEffect(() => {
220
- const cell = gridFocusCellSelector(apiRef);
221
-
222
- if (cell) {
223
- const updatedRow = apiRef.current.getRow(cell.id);
224
-
225
- if (!updatedRow) {
226
- apiRef.current.setState(state => _extends({}, state, {
227
- focus: {
228
- cell: null,
229
- columnHeader: null
230
- }
231
- }));
232
- }
233
- }
234
- }, [apiRef, props.rows]);
235
240
  React.useEffect(() => {
236
241
  const doc = ownerDocument(apiRef.current.rootElementRef.current);
237
242
  doc.addEventListener('click', handleDocumentClick);
@@ -239,10 +244,11 @@ export const useGridFocus = (apiRef, props) => {
239
244
  doc.removeEventListener('click', handleDocumentClick);
240
245
  };
241
246
  }, [apiRef, handleDocumentClick]);
242
- useGridApiEventHandler(apiRef, GridEvents.columnHeaderBlur, handleBlur);
243
- useGridApiEventHandler(apiRef, GridEvents.cellDoubleClick, handleCellDoubleClick);
244
- useGridApiEventHandler(apiRef, GridEvents.cellMouseUp, handleCellMouseUp);
245
- useGridApiEventHandler(apiRef, GridEvents.cellKeyDown, handleCellKeyDown);
246
- useGridApiEventHandler(apiRef, GridEvents.cellModeChange, handleCellModeChange);
247
- useGridApiEventHandler(apiRef, GridEvents.columnHeaderFocus, handleColumnHeaderFocus);
247
+ useGridApiEventHandler(apiRef, 'columnHeaderBlur', handleBlur);
248
+ useGridApiEventHandler(apiRef, 'cellDoubleClick', handleCellDoubleClick);
249
+ useGridApiEventHandler(apiRef, 'cellMouseUp', handleCellMouseUp);
250
+ useGridApiEventHandler(apiRef, 'cellKeyDown', handleCellKeyDown);
251
+ useGridApiEventHandler(apiRef, 'cellModeChange', handleCellModeChange);
252
+ useGridApiEventHandler(apiRef, 'columnHeaderFocus', handleColumnHeaderFocus);
253
+ useGridApiEventHandler(apiRef, 'rowsSet', handleRowSet);
248
254
  };
@@ -1,5 +1,4 @@
1
1
  import * as React from 'react';
2
- import { GridEvents } from '../../../models/events';
3
2
  import { gridVisibleColumnDefinitionsSelector } from '../columns/gridColumnsSelector';
4
3
  import { useGridLogger } from '../../utils/useGridLogger';
5
4
  import { useGridApiEventHandler } from '../../utils/useGridApiEventHandler';
@@ -9,6 +8,7 @@ import { GRID_CHECKBOX_SELECTION_COL_DEF } from '../../../colDef/gridCheckboxSel
9
8
  import { gridClasses } from '../../../constants/gridClasses';
10
9
  import { GridCellModes } from '../../../models/gridEditRowModel';
11
10
  import { isNavigationKey } from '../../../utils/keyboardUtils';
11
+ import { GRID_DETAIL_PANEL_TOGGLE_FIELD } from '../../../constants/gridDetailPanelToggleField';
12
12
  /**
13
13
  * @requires useGridSorting (method) - can be after
14
14
  * @requires useGridFilter (state) - can be after
@@ -16,21 +16,38 @@ import { isNavigationKey } from '../../../utils/keyboardUtils';
16
16
  * @requires useGridDimensions (method) - can be after
17
17
  * @requires useGridFocus (method) - can be after
18
18
  * @requires useGridScroll (method) - can be after
19
+ * @requires useGridColumnSpanning (method) - can be after
19
20
  */
20
21
 
21
22
  export const useGridKeyboardNavigation = (apiRef, props) => {
22
23
  const logger = useGridLogger(apiRef, 'useGridKeyboardNavigation');
23
24
  const currentPage = useGridVisibleRows(apiRef, props);
24
- const goToCell = React.useCallback((colIndex, rowIndex) => {
25
+ /**
26
+ * @param {number} colIndex Index of the column to focus
27
+ * @param {number} rowIndex index of the row to focus
28
+ * @param {string} closestColumnToUse Which closest column cell to use when the cell is spanned by `colSpan`.
29
+ */
30
+
31
+ const goToCell = React.useCallback((colIndex, rowIndex, closestColumnToUse = 'left') => {
32
+ const visibleSortedRows = gridVisibleSortedRowEntriesSelector(apiRef);
33
+ const rowId = visibleSortedRows[rowIndex]?.id;
34
+ const nextCellColSpanInfo = apiRef.current.unstable_getCellColSpanInfo(rowId, colIndex);
35
+
36
+ if (nextCellColSpanInfo && nextCellColSpanInfo.spannedByColSpan) {
37
+ if (closestColumnToUse === 'left') {
38
+ colIndex = nextCellColSpanInfo.leftVisibleCellIndex;
39
+ } else if (closestColumnToUse === 'right') {
40
+ colIndex = nextCellColSpanInfo.rightVisibleCellIndex;
41
+ }
42
+ }
43
+
25
44
  logger.debug(`Navigating to cell row ${rowIndex}, col ${colIndex}`);
26
45
  apiRef.current.scrollToIndexes({
27
46
  colIndex,
28
47
  rowIndex
29
48
  });
30
49
  const field = apiRef.current.getVisibleColumns()[colIndex].field;
31
- const visibleSortedRows = gridVisibleSortedRowEntriesSelector(apiRef);
32
- const node = visibleSortedRows[rowIndex];
33
- apiRef.current.setCellFocus(node.id, field);
50
+ apiRef.current.setCellFocus(rowId, field);
34
51
  }, [apiRef, logger]);
35
52
  const goToHeader = React.useCallback((colIndex, event) => {
36
53
  logger.debug(`Navigating to header col ${colIndex}`);
@@ -83,7 +100,7 @@ export const useGridKeyboardNavigation = (apiRef, props) => {
83
100
  case 'ArrowRight':
84
101
  {
85
102
  if (colIndexBefore < lastColIndex) {
86
- goToCell(colIndexBefore + 1, rowIndexBefore);
103
+ goToCell(colIndexBefore + 1, rowIndexBefore, 'right');
87
104
  }
88
105
 
89
106
  break;
@@ -102,9 +119,9 @@ export const useGridKeyboardNavigation = (apiRef, props) => {
102
119
  {
103
120
  // "Tab" is only triggered by the row / cell editing feature
104
121
  if (event.shiftKey && colIndexBefore > firstColIndex) {
105
- goToCell(colIndexBefore - 1, rowIndexBefore);
122
+ goToCell(colIndexBefore - 1, rowIndexBefore, 'left');
106
123
  } else if (!event.shiftKey && colIndexBefore < lastColIndex) {
107
- goToCell(colIndexBefore + 1, rowIndexBefore);
124
+ goToCell(colIndexBefore + 1, rowIndexBefore, 'right');
108
125
  }
109
126
 
110
127
  break;
@@ -112,6 +129,18 @@ export const useGridKeyboardNavigation = (apiRef, props) => {
112
129
 
113
130
  case ' ':
114
131
  {
132
+ const field = params.field;
133
+
134
+ if (field === GRID_DETAIL_PANEL_TOGGLE_FIELD) {
135
+ break;
136
+ }
137
+
138
+ const colDef = params.colDef;
139
+
140
+ if (colDef && colDef.type === 'treeDataGroup') {
141
+ break;
142
+ }
143
+
115
144
  if (!event.shiftKey && rowIndexBefore < lastRowIndexInPage) {
116
145
  goToCell(colIndexBefore, Math.min(rowIndexBefore + viewportPageSize, lastRowIndexInPage));
117
146
  }
@@ -282,10 +311,10 @@ export const useGridKeyboardNavigation = (apiRef, props) => {
282
311
  const cellParams = apiRef.current.getCellParams(params.id, params.field);
283
312
 
284
313
  if (cellParams.cellMode !== GridCellModes.Edit && isNavigationKey(event.key)) {
285
- apiRef.current.publishEvent(GridEvents.cellNavigationKeyDown, cellParams, event);
314
+ apiRef.current.publishEvent('cellNavigationKeyDown', cellParams, event);
286
315
  }
287
316
  }, [apiRef]);
288
- useGridApiEventHandler(apiRef, GridEvents.cellNavigationKeyDown, handleCellNavigationKeyDown);
289
- useGridApiEventHandler(apiRef, GridEvents.columnHeaderKeyDown, handleColumnHeaderKeyDown);
290
- useGridApiEventHandler(apiRef, GridEvents.cellKeyDown, handleCellKeyDown);
317
+ useGridApiEventHandler(apiRef, 'cellNavigationKeyDown', handleCellNavigationKeyDown);
318
+ useGridApiEventHandler(apiRef, 'columnHeaderKeyDown', handleColumnHeaderKeyDown);
319
+ useGridApiEventHandler(apiRef, 'cellKeyDown', handleCellKeyDown);
291
320
  };
@@ -1,7 +1,6 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import * as React from 'react';
3
3
  import { useGridLogger, useGridSelector, useGridApiMethod, useGridApiEventHandler } from '../../utils';
4
- import { GridEvents } from '../../../models/events';
5
4
  import { gridVisibleTopLevelRowCountSelector } from '../filter';
6
5
  import { gridPageSelector, gridPageSizeSelector } from './gridPaginationSelector';
7
6
  import { useGridRegisterPipeProcessor } from '../../core/pipeProcessing';
@@ -43,7 +42,7 @@ export const useGridPage = (apiRef, props) => {
43
42
  propModel: props.page,
44
43
  propOnChange: props.onPageChange,
45
44
  stateSelector: gridPageSelector,
46
- changeEvent: GridEvents.pageChange
45
+ changeEvent: 'pageChange'
47
46
  });
48
47
  /**
49
48
  * API METHODS
@@ -108,8 +107,8 @@ export const useGridPage = (apiRef, props) => {
108
107
  rowIndex: gridPageSelector(apiRef) * gridPageSizeSelector(apiRef)
109
108
  });
110
109
 
111
- useGridApiEventHandler(apiRef, GridEvents.pageSizeChange, handlePageSizeChange);
112
- useGridApiEventHandler(apiRef, GridEvents.pageChange, handlePageChange);
110
+ useGridApiEventHandler(apiRef, 'pageSizeChange', handlePageSizeChange);
111
+ useGridApiEventHandler(apiRef, 'pageChange', handlePageChange);
113
112
  /**
114
113
  * EFFECTS
115
114
  */
@@ -1,6 +1,5 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import * as React from 'react';
3
- import { GridEvents } from '../../../models/events';
4
3
  import { useGridLogger, useGridApiMethod, useGridApiEventHandler, useGridSelector } from '../../utils';
5
4
  import { gridPageSizeSelector } from './gridPaginationSelector';
6
5
  import { gridDensityRowHeightSelector } from '../density';
@@ -25,7 +24,7 @@ export const useGridPageSize = (apiRef, props) => {
25
24
  propModel: props.pageSize,
26
25
  propOnChange: props.onPageSizeChange,
27
26
  stateSelector: gridPageSizeSelector,
28
- changeEvent: GridEvents.pageSizeChange
27
+ changeEvent: 'pageSizeChange'
29
28
  });
30
29
  /**
31
30
  * API METHODS
@@ -94,7 +93,7 @@ export const useGridPageSize = (apiRef, props) => {
94
93
  const maximumPageSizeWithoutScrollBar = Math.floor(dimensions.viewportInnerSize.height / rowHeight);
95
94
  apiRef.current.setPageSize(maximumPageSizeWithoutScrollBar);
96
95
  }, [apiRef, props.autoPageSize, rowHeight]);
97
- useGridApiEventHandler(apiRef, GridEvents.viewportInnerSizeChange, handleUpdateAutoPageSize);
96
+ useGridApiEventHandler(apiRef, 'viewportInnerSizeChange', handleUpdateAutoPageSize);
98
97
  /**
99
98
  * EFFECTS
100
99
  */
@@ -1,11 +1,9 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import * as React from 'react';
3
- import { GridEvents } from '../../../models/events';
4
3
  import { useGridApiMethod } from '../../utils/useGridApiMethod';
5
4
  import { useGridLogger } from '../../utils/useGridLogger';
6
5
  import { useGridRegisterPipeProcessor } from '../../core/pipeProcessing';
7
6
  import { gridPreferencePanelStateSelector } from './gridPreferencePanelSelector';
8
- import { useGridSelector } from '../../utils/useGridSelector';
9
7
  export const preferencePanelStateInitializer = (state, props) => _extends({}, state, {
10
8
  preferencePanel: props.initialState?.preferencePanel ?? {
11
9
  open: false
@@ -17,7 +15,6 @@ export const preferencePanelStateInitializer = (state, props) => _extends({}, st
17
15
 
18
16
  export const useGridPreferencesPanel = apiRef => {
19
17
  const logger = useGridLogger(apiRef, 'useGridPreferencesPanel');
20
- const preferencePanelState = useGridSelector(apiRef, gridPreferencePanelStateSelector);
21
18
  const hideTimeout = React.useRef();
22
19
  const immediateTimeout = React.useRef();
23
20
  /**
@@ -26,9 +23,10 @@ export const useGridPreferencesPanel = apiRef => {
26
23
 
27
24
  const hidePreferences = React.useCallback(() => {
28
25
  logger.debug('Hiding Preferences Panel');
26
+ const preferencePanelState = gridPreferencePanelStateSelector(apiRef.current.state);
29
27
 
30
28
  if (preferencePanelState.openedPanelValue) {
31
- apiRef.current.publishEvent(GridEvents.preferencePanelClose, {
29
+ apiRef.current.publishEvent('preferencePanelClose', {
32
30
  openedPanelValue: preferencePanelState.openedPanelValue
33
31
  });
34
32
  }
@@ -39,7 +37,7 @@ export const useGridPreferencesPanel = apiRef => {
39
37
  }
40
38
  }));
41
39
  apiRef.current.forceUpdate();
42
- }, [apiRef, logger, preferencePanelState.openedPanelValue]); // This is to prevent the preferences from closing when you open a select box or another panel,
40
+ }, [apiRef, logger]); // This is to prevent the preferences from closing when you open a select box or another panel,
43
41
  // The issue is in MUI core V4 => Fixed in V5
44
42
 
45
43
  const doNotHidePanel = React.useCallback(() => {
@@ -59,7 +57,7 @@ export const useGridPreferencesPanel = apiRef => {
59
57
  openedPanelValue: newValue
60
58
  })
61
59
  }));
62
- apiRef.current.publishEvent(GridEvents.preferencePanelOpen, {
60
+ apiRef.current.publishEvent('preferencePanelOpen', {
63
61
  openedPanelValue: newValue
64
62
  });
65
63
  apiRef.current.forceUpdate();
@@ -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);
@@ -8,4 +8,26 @@ 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
+ const children = tree[parentId]?.children;
14
+
15
+ if (children == null) {
16
+ return [];
17
+ }
18
+
19
+ const validDescendants = [];
20
+
21
+ for (let i = 0; i < children.length; i += 1) {
22
+ const child = children[i];
23
+ const childNode = tree[child];
24
+
25
+ if (!skipAutoGeneratedRows || !childNode.isAutoGenerated) {
26
+ validDescendants.push(child);
27
+ }
28
+
29
+ validDescendants.push(...getTreeNodeDescendants(tree, childNode.id, skipAutoGeneratedRows));
30
+ }
31
+
32
+ return validDescendants;
33
+ };