@mui/x-data-grid-pro 5.5.0 → 5.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (356) hide show
  1. package/CHANGELOG.md +309 -101
  2. package/DataGridPro/DataGridPro.d.ts +3 -0
  3. package/DataGridPro/DataGridPro.js +910 -0
  4. package/DataGridPro/index.d.ts +2 -0
  5. package/DataGridPro/index.js +2 -0
  6. package/DataGridPro/package.json +6 -0
  7. package/DataGridPro/useDataGridProComponent.d.ts +4 -0
  8. package/DataGridPro/useDataGridProComponent.js +82 -0
  9. package/DataGridPro/useDataGridProProps.d.ts +6 -0
  10. package/DataGridPro/useDataGridProProps.js +49 -0
  11. package/components/DataGridProColumnHeaders.d.ts +6 -0
  12. package/components/DataGridProColumnHeaders.js +165 -0
  13. package/components/DataGridProVirtualScroller.d.ts +8 -0
  14. package/components/DataGridProVirtualScroller.js +270 -0
  15. package/components/GridColumnPinningMenuItems.d.ts +11 -0
  16. package/components/GridColumnPinningMenuItems.js +71 -0
  17. package/components/GridDetailPanelToggleCell.d.ts +7 -0
  18. package/components/GridDetailPanelToggleCell.js +125 -0
  19. package/components/GridGroupingColumnLeafCell.d.ts +4 -0
  20. package/components/GridGroupingColumnLeafCell.js +22 -0
  21. package/components/GridGroupingCriteriaCell.d.ts +10 -0
  22. package/components/GridGroupingCriteriaCell.js +150 -0
  23. package/components/GridRowGroupableColumnMenuItems.d.ts +11 -0
  24. package/components/GridRowGroupableColumnMenuItems.js +63 -0
  25. package/components/GridRowGroupingColumnMenuItems.d.ts +11 -0
  26. package/components/GridRowGroupingColumnMenuItems.js +58 -0
  27. package/components/GridTreeDataGroupingCell.d.ts +10 -0
  28. package/components/GridTreeDataGroupingCell.js +160 -0
  29. package/components/Watermark.d.ts +2 -0
  30. package/components/Watermark.js +43 -0
  31. package/components/index.d.ts +3 -0
  32. package/components/index.js +4 -0
  33. package/components/package.json +6 -0
  34. package/hooks/features/columnPinning/gridColumnPinningInterface.d.ts +42 -0
  35. package/hooks/features/columnPinning/gridColumnPinningInterface.js +11 -0
  36. package/hooks/features/columnPinning/gridColumnPinningSelector.d.ts +2 -0
  37. package/hooks/features/columnPinning/gridColumnPinningSelector.js +1 -0
  38. package/hooks/features/columnPinning/index.d.ts +2 -0
  39. package/hooks/features/columnPinning/index.js +2 -0
  40. package/hooks/features/columnPinning/useGridColumnPinning.d.ts +6 -0
  41. package/hooks/features/columnPinning/useGridColumnPinning.js +274 -0
  42. package/hooks/features/columnPinning/useGridColumnPinningPreProcessors.d.ts +4 -0
  43. package/hooks/features/columnPinning/useGridColumnPinningPreProcessors.js +45 -0
  44. package/hooks/features/columnReorder/columnReorderInterfaces.d.ts +6 -0
  45. package/hooks/features/columnReorder/columnReorderInterfaces.js +1 -0
  46. package/hooks/features/columnReorder/columnReorderSelector.d.ts +3 -0
  47. package/hooks/features/columnReorder/columnReorderSelector.js +3 -0
  48. package/hooks/features/columnReorder/index.d.ts +2 -0
  49. package/hooks/features/columnReorder/index.js +2 -0
  50. package/hooks/features/columnReorder/useGridColumnReorder.d.ts +10 -0
  51. package/hooks/features/columnReorder/useGridColumnReorder.js +165 -0
  52. package/hooks/features/columnResize/columnResizeSelector.d.ts +3 -0
  53. package/hooks/features/columnResize/columnResizeSelector.js +3 -0
  54. package/hooks/features/columnResize/columnResizeState.d.ts +3 -0
  55. package/hooks/features/columnResize/columnResizeState.js +1 -0
  56. package/hooks/features/columnResize/index.d.ts +2 -0
  57. package/hooks/features/columnResize/index.js +2 -0
  58. package/hooks/features/columnResize/useGridColumnResize.d.ts +11 -0
  59. package/hooks/features/columnResize/useGridColumnResize.js +305 -0
  60. package/hooks/features/detailPanel/gridDetailPanelInterface.d.ts +28 -0
  61. package/hooks/features/detailPanel/gridDetailPanelInterface.js +1 -0
  62. package/hooks/features/detailPanel/gridDetailPanelSelector.d.ts +5 -0
  63. package/hooks/features/detailPanel/gridDetailPanelSelector.js +3 -0
  64. package/hooks/features/detailPanel/gridDetailPanelToggleColDef.d.ts +3 -0
  65. package/hooks/features/detailPanel/gridDetailPanelToggleColDef.js +26 -0
  66. package/hooks/features/detailPanel/index.d.ts +3 -0
  67. package/hooks/features/detailPanel/index.js +3 -0
  68. package/hooks/features/detailPanel/useGridDetailPanel.d.ts +6 -0
  69. package/hooks/features/detailPanel/useGridDetailPanel.js +109 -0
  70. package/hooks/features/detailPanel/useGridDetailPanelCache.d.ts +4 -0
  71. package/hooks/features/detailPanel/useGridDetailPanelCache.js +57 -0
  72. package/hooks/features/detailPanel/useGridDetailPanelPreProcessors.d.ts +4 -0
  73. package/hooks/features/detailPanel/useGridDetailPanelPreProcessors.js +28 -0
  74. package/hooks/features/index.d.ts +6 -0
  75. package/hooks/features/index.js +7 -0
  76. package/hooks/features/infiniteLoader/useGridInfiniteLoader.d.ts +10 -0
  77. package/hooks/features/infiniteLoader/useGridInfiniteLoader.js +52 -0
  78. package/hooks/features/rowGrouping/createGroupingColDef.d.ts +43 -0
  79. package/hooks/features/rowGrouping/createGroupingColDef.js +318 -0
  80. package/hooks/features/rowGrouping/gridRowGroupingInterfaces.d.ts +31 -0
  81. package/hooks/features/rowGrouping/gridRowGroupingInterfaces.js +1 -0
  82. package/hooks/features/rowGrouping/gridRowGroupingSelector.d.ts +4 -0
  83. package/hooks/features/rowGrouping/gridRowGroupingSelector.js +5 -0
  84. package/hooks/features/rowGrouping/gridRowGroupingUtils.d.ts +24 -0
  85. package/hooks/features/rowGrouping/gridRowGroupingUtils.js +124 -0
  86. package/hooks/features/rowGrouping/index.d.ts +3 -0
  87. package/hooks/features/rowGrouping/index.js +3 -0
  88. package/hooks/features/rowGrouping/useGridRowGrouping.d.ts +13 -0
  89. package/hooks/features/rowGrouping/useGridRowGrouping.js +325 -0
  90. package/hooks/features/rowGrouping/useGridRowGroupingPreProcessors.d.ts +4 -0
  91. package/hooks/features/rowGrouping/useGridRowGroupingPreProcessors.js +76 -0
  92. package/hooks/features/treeData/gridTreeDataGroupColDef.d.ts +7 -0
  93. package/hooks/features/treeData/gridTreeDataGroupColDef.js +22 -0
  94. package/hooks/features/treeData/gridTreeDataUtils.d.ts +14 -0
  95. package/hooks/features/treeData/gridTreeDataUtils.js +86 -0
  96. package/hooks/features/treeData/index.d.ts +1 -0
  97. package/hooks/features/treeData/index.js +1 -0
  98. package/hooks/features/treeData/useGridTreeData.d.ts +10 -0
  99. package/hooks/features/treeData/useGridTreeData.js +108 -0
  100. package/hooks/features/treeData/useGridTreeDataPreProcessors.d.ts +4 -0
  101. package/hooks/features/treeData/useGridTreeDataPreProcessors.js +69 -0
  102. package/hooks/index.d.ts +1 -0
  103. package/hooks/index.js +1 -0
  104. package/hooks/package.json +6 -0
  105. package/hooks/utils/useGridApiContext.d.ts +4 -0
  106. package/hooks/utils/useGridApiContext.js +2 -0
  107. package/hooks/utils/useGridApiRef.d.ts +4 -0
  108. package/hooks/utils/useGridApiRef.js +2 -0
  109. package/hooks/utils/useGridRootProps.d.ts +2 -0
  110. package/hooks/utils/useGridRootProps.js +2 -0
  111. package/index.d.ts +16 -0
  112. package/index.js +20 -0
  113. package/legacy/DataGridPro/DataGridPro.js +910 -0
  114. package/legacy/DataGridPro/index.js +2 -0
  115. package/legacy/DataGridPro/useDataGridProComponent.js +82 -0
  116. package/legacy/DataGridPro/useDataGridProProps.js +58 -0
  117. package/legacy/components/DataGridProColumnHeaders.js +173 -0
  118. package/legacy/components/DataGridProVirtualScroller.js +287 -0
  119. package/legacy/components/GridColumnPinningMenuItems.js +71 -0
  120. package/legacy/components/GridDetailPanelToggleCell.js +121 -0
  121. package/legacy/components/GridGroupingColumnLeafCell.js +20 -0
  122. package/legacy/components/GridGroupingCriteriaCell.js +146 -0
  123. package/legacy/components/GridRowGroupableColumnMenuItems.js +61 -0
  124. package/legacy/components/GridRowGroupingColumnMenuItems.js +56 -0
  125. package/legacy/components/GridTreeDataGroupingCell.js +156 -0
  126. package/legacy/components/Watermark.js +43 -0
  127. package/legacy/components/index.js +4 -0
  128. package/legacy/hooks/features/columnPinning/gridColumnPinningInterface.js +11 -0
  129. package/legacy/hooks/features/columnPinning/gridColumnPinningSelector.js +3 -0
  130. package/legacy/hooks/features/columnPinning/index.js +2 -0
  131. package/legacy/hooks/features/columnPinning/useGridColumnPinning.js +298 -0
  132. package/legacy/hooks/features/columnPinning/useGridColumnPinningPreProcessors.js +48 -0
  133. package/legacy/hooks/features/columnReorder/columnReorderInterfaces.js +1 -0
  134. package/legacy/hooks/features/columnReorder/columnReorderSelector.js +7 -0
  135. package/legacy/hooks/features/columnReorder/index.js +2 -0
  136. package/legacy/hooks/features/columnReorder/useGridColumnReorder.js +171 -0
  137. package/legacy/hooks/features/columnResize/columnResizeSelector.js +7 -0
  138. package/legacy/hooks/features/columnResize/columnResizeState.js +1 -0
  139. package/legacy/hooks/features/columnResize/index.js +2 -0
  140. package/legacy/hooks/features/columnResize/useGridColumnResize.js +310 -0
  141. package/legacy/hooks/features/detailPanel/gridDetailPanelInterface.js +1 -0
  142. package/legacy/hooks/features/detailPanel/gridDetailPanelSelector.js +9 -0
  143. package/legacy/hooks/features/detailPanel/gridDetailPanelToggleColDef.js +28 -0
  144. package/legacy/hooks/features/detailPanel/index.js +3 -0
  145. package/legacy/hooks/features/detailPanel/useGridDetailPanel.js +114 -0
  146. package/legacy/hooks/features/detailPanel/useGridDetailPanelCache.js +57 -0
  147. package/legacy/hooks/features/detailPanel/useGridDetailPanelPreProcessors.js +31 -0
  148. package/legacy/hooks/features/index.js +7 -0
  149. package/legacy/hooks/features/infiniteLoader/useGridInfiniteLoader.js +51 -0
  150. package/legacy/hooks/features/rowGrouping/createGroupingColDef.js +319 -0
  151. package/legacy/hooks/features/rowGrouping/gridRowGroupingInterfaces.js +1 -0
  152. package/legacy/hooks/features/rowGrouping/gridRowGroupingSelector.js +13 -0
  153. package/legacy/hooks/features/rowGrouping/gridRowGroupingUtils.js +130 -0
  154. package/legacy/hooks/features/rowGrouping/index.js +3 -0
  155. package/legacy/hooks/features/rowGrouping/useGridRowGrouping.js +334 -0
  156. package/legacy/hooks/features/rowGrouping/useGridRowGroupingPreProcessors.js +83 -0
  157. package/legacy/hooks/features/treeData/gridTreeDataGroupColDef.js +24 -0
  158. package/legacy/hooks/features/treeData/gridTreeDataUtils.js +84 -0
  159. package/legacy/hooks/features/treeData/index.js +1 -0
  160. package/legacy/hooks/features/treeData/useGridTreeData.js +116 -0
  161. package/legacy/hooks/features/treeData/useGridTreeDataPreProcessors.js +72 -0
  162. package/legacy/hooks/index.js +1 -0
  163. package/legacy/hooks/utils/useGridApiContext.js +2 -0
  164. package/legacy/hooks/utils/useGridApiRef.js +2 -0
  165. package/legacy/hooks/utils/useGridRootProps.js +2 -0
  166. package/legacy/index.js +20 -0
  167. package/legacy/models/dataGridProProps.js +1 -0
  168. package/legacy/models/gridApiPro.js +1 -0
  169. package/legacy/models/gridGroupingColDefOverride.js +1 -0
  170. package/legacy/models/gridGroupingValueGetterParams.js +1 -0
  171. package/legacy/models/gridRowScrollEndParams.js +1 -0
  172. package/legacy/models/gridStatePro.js +1 -0
  173. package/legacy/models/index.js +4 -0
  174. package/legacy/themeAugmentation/index.js +3 -0
  175. package/legacy/themeAugmentation/overrides.js +1 -0
  176. package/legacy/themeAugmentation/props.js +1 -0
  177. package/legacy/typeOverloads/modules.js +1 -0
  178. package/legacy/typeOverloads/reexports.js +6 -0
  179. package/legacy/utils/domUtils.js +19 -0
  180. package/legacy/utils/tree/buildRowTree.js +188 -0
  181. package/legacy/utils/tree/sortRowTree.js +63 -0
  182. package/models/dataGridProProps.d.ts +174 -0
  183. package/models/dataGridProProps.js +1 -0
  184. package/models/gridApiPro.d.ts +12 -0
  185. package/models/gridApiPro.js +1 -0
  186. package/models/gridGroupingColDefOverride.d.ts +30 -0
  187. package/models/gridGroupingColDefOverride.js +1 -0
  188. package/models/gridGroupingValueGetterParams.d.ts +31 -0
  189. package/models/gridGroupingValueGetterParams.js +1 -0
  190. package/models/gridRowScrollEndParams.d.ts +18 -0
  191. package/models/gridRowScrollEndParams.js +1 -0
  192. package/models/gridStatePro.d.ts +20 -0
  193. package/models/gridStatePro.js +1 -0
  194. package/models/index.d.ts +4 -0
  195. package/models/index.js +4 -0
  196. package/models/package.json +6 -0
  197. package/modern/DataGridPro/DataGridPro.js +910 -0
  198. package/modern/DataGridPro/index.js +2 -0
  199. package/modern/DataGridPro/useDataGridProComponent.js +82 -0
  200. package/modern/DataGridPro/useDataGridProProps.js +45 -0
  201. package/modern/components/DataGridProColumnHeaders.js +163 -0
  202. package/modern/components/DataGridProVirtualScroller.js +268 -0
  203. package/modern/components/GridColumnPinningMenuItems.js +71 -0
  204. package/modern/components/GridDetailPanelToggleCell.js +125 -0
  205. package/modern/components/GridGroupingColumnLeafCell.js +20 -0
  206. package/modern/components/GridGroupingCriteriaCell.js +148 -0
  207. package/modern/components/GridRowGroupableColumnMenuItems.js +61 -0
  208. package/modern/components/GridRowGroupingColumnMenuItems.js +56 -0
  209. package/modern/components/GridTreeDataGroupingCell.js +158 -0
  210. package/modern/components/Watermark.js +43 -0
  211. package/modern/components/index.js +4 -0
  212. package/modern/hooks/features/columnPinning/gridColumnPinningInterface.js +11 -0
  213. package/modern/hooks/features/columnPinning/gridColumnPinningSelector.js +1 -0
  214. package/modern/hooks/features/columnPinning/index.js +2 -0
  215. package/modern/hooks/features/columnPinning/useGridColumnPinning.js +268 -0
  216. package/modern/hooks/features/columnPinning/useGridColumnPinningPreProcessors.js +45 -0
  217. package/modern/hooks/features/columnReorder/columnReorderInterfaces.js +1 -0
  218. package/modern/hooks/features/columnReorder/columnReorderSelector.js +3 -0
  219. package/modern/hooks/features/columnReorder/index.js +2 -0
  220. package/modern/hooks/features/columnReorder/useGridColumnReorder.js +165 -0
  221. package/modern/hooks/features/columnResize/columnResizeSelector.js +3 -0
  222. package/modern/hooks/features/columnResize/columnResizeState.js +1 -0
  223. package/modern/hooks/features/columnResize/index.js +2 -0
  224. package/modern/hooks/features/columnResize/useGridColumnResize.js +295 -0
  225. package/modern/hooks/features/detailPanel/gridDetailPanelInterface.js +1 -0
  226. package/modern/hooks/features/detailPanel/gridDetailPanelSelector.js +3 -0
  227. package/modern/hooks/features/detailPanel/gridDetailPanelToggleColDef.js +26 -0
  228. package/modern/hooks/features/detailPanel/index.js +3 -0
  229. package/modern/hooks/features/detailPanel/useGridDetailPanel.js +105 -0
  230. package/modern/hooks/features/detailPanel/useGridDetailPanelCache.js +57 -0
  231. package/modern/hooks/features/detailPanel/useGridDetailPanelPreProcessors.js +28 -0
  232. package/modern/hooks/features/index.js +7 -0
  233. package/modern/hooks/features/infiniteLoader/useGridInfiniteLoader.js +52 -0
  234. package/modern/hooks/features/rowGrouping/createGroupingColDef.js +302 -0
  235. package/modern/hooks/features/rowGrouping/gridRowGroupingInterfaces.js +1 -0
  236. package/modern/hooks/features/rowGrouping/gridRowGroupingSelector.js +5 -0
  237. package/modern/hooks/features/rowGrouping/gridRowGroupingUtils.js +122 -0
  238. package/modern/hooks/features/rowGrouping/index.js +3 -0
  239. package/modern/hooks/features/rowGrouping/useGridRowGrouping.js +317 -0
  240. package/modern/hooks/features/rowGrouping/useGridRowGroupingPreProcessors.js +76 -0
  241. package/modern/hooks/features/treeData/gridTreeDataGroupColDef.js +22 -0
  242. package/modern/hooks/features/treeData/gridTreeDataUtils.js +82 -0
  243. package/modern/hooks/features/treeData/index.js +1 -0
  244. package/modern/hooks/features/treeData/useGridTreeData.js +106 -0
  245. package/modern/hooks/features/treeData/useGridTreeDataPreProcessors.js +67 -0
  246. package/modern/hooks/index.js +1 -0
  247. package/modern/hooks/utils/useGridApiContext.js +2 -0
  248. package/modern/hooks/utils/useGridApiRef.js +2 -0
  249. package/modern/hooks/utils/useGridRootProps.js +2 -0
  250. package/modern/index.js +20 -0
  251. package/modern/models/dataGridProProps.js +1 -0
  252. package/modern/models/gridApiPro.js +1 -0
  253. package/modern/models/gridGroupingColDefOverride.js +1 -0
  254. package/modern/models/gridGroupingValueGetterParams.js +1 -0
  255. package/modern/models/gridRowScrollEndParams.js +1 -0
  256. package/modern/models/gridStatePro.js +1 -0
  257. package/modern/models/index.js +4 -0
  258. package/modern/themeAugmentation/index.js +3 -0
  259. package/modern/themeAugmentation/overrides.js +1 -0
  260. package/modern/themeAugmentation/props.js +1 -0
  261. package/modern/typeOverloads/modules.js +1 -0
  262. package/modern/typeOverloads/reexports.js +6 -0
  263. package/modern/utils/domUtils.js +19 -0
  264. package/modern/utils/tree/buildRowTree.js +167 -0
  265. package/modern/utils/tree/sortRowTree.js +60 -0
  266. package/node/DataGridPro/DataGridPro.js +935 -0
  267. package/node/DataGridPro/index.js +30 -0
  268. package/node/DataGridPro/useDataGridProComponent.js +104 -0
  269. package/node/DataGridPro/useDataGridProProps.js +69 -0
  270. package/node/components/DataGridProColumnHeaders.js +189 -0
  271. package/node/components/DataGridProVirtualScroller.js +297 -0
  272. package/node/components/GridColumnPinningMenuItems.js +88 -0
  273. package/node/components/GridDetailPanelToggleCell.js +146 -0
  274. package/node/components/GridGroupingColumnLeafCell.js +38 -0
  275. package/node/components/GridGroupingCriteriaCell.js +170 -0
  276. package/node/components/GridRowGroupableColumnMenuItems.js +82 -0
  277. package/node/components/GridRowGroupingColumnMenuItems.js +78 -0
  278. package/node/components/GridTreeDataGroupingCell.js +181 -0
  279. package/node/components/Watermark.js +56 -0
  280. package/node/components/index.js +44 -0
  281. package/node/hooks/features/columnPinning/gridColumnPinningInterface.js +17 -0
  282. package/node/hooks/features/columnPinning/gridColumnPinningSelector.js +10 -0
  283. package/node/hooks/features/columnPinning/index.js +31 -0
  284. package/node/hooks/features/columnPinning/useGridColumnPinning.js +297 -0
  285. package/node/hooks/features/columnPinning/useGridColumnPinningPreProcessors.js +66 -0
  286. package/node/hooks/features/columnReorder/columnReorderInterfaces.js +5 -0
  287. package/node/hooks/features/columnReorder/columnReorderSelector.js +14 -0
  288. package/node/hooks/features/columnReorder/index.js +18 -0
  289. package/node/hooks/features/columnReorder/useGridColumnReorder.js +188 -0
  290. package/node/hooks/features/columnResize/columnResizeSelector.js +14 -0
  291. package/node/hooks/features/columnResize/columnResizeState.js +5 -0
  292. package/node/hooks/features/columnResize/index.js +31 -0
  293. package/node/hooks/features/columnResize/useGridColumnResize.js +329 -0
  294. package/node/hooks/features/detailPanel/gridDetailPanelInterface.js +5 -0
  295. package/node/hooks/features/detailPanel/gridDetailPanelSelector.js +18 -0
  296. package/node/hooks/features/detailPanel/gridDetailPanelToggleColDef.js +47 -0
  297. package/node/hooks/features/detailPanel/index.js +44 -0
  298. package/node/hooks/features/detailPanel/useGridDetailPanel.js +133 -0
  299. package/node/hooks/features/detailPanel/useGridDetailPanelCache.js +74 -0
  300. package/node/hooks/features/detailPanel/useGridDetailPanelPreProcessors.js +44 -0
  301. package/node/hooks/features/index.js +83 -0
  302. package/node/hooks/features/infiniteLoader/useGridInfiniteLoader.js +67 -0
  303. package/node/hooks/features/rowGrouping/createGroupingColDef.js +341 -0
  304. package/node/hooks/features/rowGrouping/gridRowGroupingInterfaces.js +5 -0
  305. package/node/hooks/features/rowGrouping/gridRowGroupingSelector.js +18 -0
  306. package/node/hooks/features/rowGrouping/gridRowGroupingUtils.js +153 -0
  307. package/node/hooks/features/rowGrouping/index.js +51 -0
  308. package/node/hooks/features/rowGrouping/useGridRowGrouping.js +355 -0
  309. package/node/hooks/features/rowGrouping/useGridRowGroupingPreProcessors.js +94 -0
  310. package/node/hooks/features/treeData/gridTreeDataGroupColDef.js +35 -0
  311. package/node/hooks/features/treeData/gridTreeDataUtils.js +95 -0
  312. package/node/hooks/features/treeData/index.js +13 -0
  313. package/node/hooks/features/treeData/useGridTreeData.js +132 -0
  314. package/node/hooks/features/treeData/useGridTreeDataPreProcessors.js +92 -0
  315. package/node/hooks/index.js +18 -0
  316. package/node/hooks/utils/useGridApiContext.js +11 -0
  317. package/node/hooks/utils/useGridApiRef.js +11 -0
  318. package/node/hooks/utils/useGridRootProps.js +11 -0
  319. package/node/index.js +214 -0
  320. package/node/models/dataGridProProps.js +5 -0
  321. package/node/models/gridApiPro.js +5 -0
  322. package/node/models/gridGroupingColDefOverride.js +5 -0
  323. package/node/models/gridGroupingValueGetterParams.js +5 -0
  324. package/node/models/gridRowScrollEndParams.js +5 -0
  325. package/node/models/gridStatePro.js +5 -0
  326. package/node/models/index.js +44 -0
  327. package/node/themeAugmentation/index.js +31 -0
  328. package/node/themeAugmentation/overrides.js +5 -0
  329. package/node/themeAugmentation/props.js +5 -0
  330. package/node/typeOverloads/modules.js +5 -0
  331. package/node/typeOverloads/reexports.js +29 -0
  332. package/node/utils/domUtils.js +32 -0
  333. package/node/utils/tree/buildRowTree.js +185 -0
  334. package/node/utils/tree/sortRowTree.js +69 -0
  335. package/package.json +13 -14
  336. package/themeAugmentation/index.d.ts +2 -2
  337. package/themeAugmentation/index.js +3 -0
  338. package/themeAugmentation/overrides.d.ts +8 -8
  339. package/themeAugmentation/overrides.js +1 -0
  340. package/themeAugmentation/package.json +6 -0
  341. package/themeAugmentation/props.d.ts +19 -19
  342. package/themeAugmentation/props.js +1 -0
  343. package/typeOverloads/modules.d.ts +41 -0
  344. package/typeOverloads/modules.js +1 -0
  345. package/typeOverloads/reexports.d.ts +22 -0
  346. package/typeOverloads/reexports.js +6 -0
  347. package/utils/domUtils.d.ts +3 -0
  348. package/utils/domUtils.js +19 -0
  349. package/utils/tree/buildRowTree.d.ts +47 -0
  350. package/utils/tree/buildRowTree.js +179 -0
  351. package/utils/tree/sortRowTree.d.ts +10 -0
  352. package/utils/tree/sortRowTree.js +60 -0
  353. package/LICENSE +0 -12
  354. package/index-cjs.js +0 -15
  355. package/index-esm.js +0 -15
  356. package/x-data-grid-pro.d.ts +0 -5438
@@ -0,0 +1,317 @@
1
+ import _extends from "@babel/runtime/helpers/esm/extends";
2
+ import * as React from 'react';
3
+ import Divider from '@mui/material/Divider';
4
+ import { GridEvents, gridRowIdsSelector, gridRowTreeSelector, useGridApiEventHandler, useGridApiMethod, gridColumnLookupSelector, gridFilteredDescendantCountLookupSelector, useFirstRender } from '@mui/x-data-grid';
5
+ import { useGridRegisterPreProcessor, useGridRegisterSortingMethod, useGridRegisterFilteringMethod, isDeepEqual } from '@mui/x-data-grid/internals';
6
+ import { buildRowTree } from '../../../utils/tree/buildRowTree';
7
+ import { gridRowGroupingModelSelector, gridRowGroupingSanitizedModelSelector } from './gridRowGroupingSelector';
8
+ import { filterRowTreeFromGroupingColumns, getRowGroupingFieldFromGroupingCriteria, GROUPING_COLUMNS_FEATURE_NAME, isGroupingColumn, mergeStateWithRowGroupingModel } from './gridRowGroupingUtils';
9
+ import { sortRowTree } from '../../../utils/tree/sortRowTree';
10
+ import { GridRowGroupableColumnMenuItems } from '../../../components/GridRowGroupableColumnMenuItems';
11
+ import { GridRowGroupingColumnMenuItems } from '../../../components/GridRowGroupingColumnMenuItems';
12
+ import { jsx as _jsx } from "react/jsx-runtime";
13
+ export const rowGroupingStateInitializer = (state, props) => _extends({}, state, {
14
+ rowGrouping: {
15
+ model: props.rowGroupingModel ?? props.initialState?.rowGrouping?.model ?? []
16
+ }
17
+ });
18
+ /**
19
+ * Only available in DataGridPro
20
+ * @requires useGridColumns (state, method) - can be after, async only
21
+ * @requires useGridRows (state, method) - can be after, async only
22
+ * @requires useGridParamsApi (method) - can be after, async only
23
+ * TODO: Move the the Premium plan once available and remove the `experimentalFeatures.rowGrouping` flag
24
+ */
25
+
26
+ export const useGridRowGrouping = (apiRef, props) => {
27
+ apiRef.current.unstable_updateControlState({
28
+ stateId: 'rowGrouping',
29
+ propModel: props.rowGroupingModel,
30
+ propOnChange: props.onRowGroupingModelChange,
31
+ stateSelector: gridRowGroupingModelSelector,
32
+ changeEvent: GridEvents.rowGroupingModelChange
33
+ });
34
+ /**
35
+ * ROW GROUPING
36
+ */
37
+ // Tracks the model on the last pre-processing to check if we need to re-build the grouping columns when the grid upserts a column.
38
+
39
+ const sanitizedModelOnLastRowPreProcessing = React.useRef([]);
40
+ const updateRowGrouping = React.useCallback(() => {
41
+ const groupRows = params => {
42
+ const rowGroupingModel = gridRowGroupingSanitizedModelSelector(apiRef);
43
+ const columnsLookup = gridColumnLookupSelector(apiRef);
44
+ sanitizedModelOnLastRowPreProcessing.current = rowGroupingModel;
45
+
46
+ if (props.disableRowGrouping || rowGroupingModel.length === 0) {
47
+ return null;
48
+ }
49
+
50
+ const distinctValues = Object.fromEntries(rowGroupingModel.map(groupingField => [groupingField, {
51
+ lookup: {},
52
+ list: []
53
+ }]));
54
+
55
+ const getCellGroupingCriteria = ({
56
+ row,
57
+ id,
58
+ colDef
59
+ }) => {
60
+ let key;
61
+
62
+ if (colDef.groupingValueGetter) {
63
+ const groupingValueGetterParams = {
64
+ colDef,
65
+ field: colDef.field,
66
+ value: row[colDef.field],
67
+ id,
68
+ row,
69
+ rowNode: {
70
+ isAutoGenerated: false,
71
+ id
72
+ }
73
+ };
74
+ key = colDef.groupingValueGetter(groupingValueGetterParams);
75
+ } else {
76
+ key = row[colDef.field];
77
+ }
78
+
79
+ return {
80
+ key,
81
+ field: colDef.field
82
+ };
83
+ };
84
+
85
+ params.ids.forEach(rowId => {
86
+ const row = params.idRowsLookup[rowId];
87
+ rowGroupingModel.forEach(groupingCriteria => {
88
+ const {
89
+ key
90
+ } = getCellGroupingCriteria({
91
+ row,
92
+ id: rowId,
93
+ colDef: columnsLookup[groupingCriteria]
94
+ });
95
+ const groupingFieldsDistinctKeys = distinctValues[groupingCriteria];
96
+
97
+ if (key != null && !groupingFieldsDistinctKeys.lookup[key.toString()]) {
98
+ groupingFieldsDistinctKeys.lookup[key.toString()] = true;
99
+ groupingFieldsDistinctKeys.list.push(key);
100
+ }
101
+ });
102
+ });
103
+ const rows = params.ids.map(rowId => {
104
+ const row = params.idRowsLookup[rowId];
105
+ const parentPath = rowGroupingModel.map(groupingField => getCellGroupingCriteria({
106
+ row,
107
+ id: rowId,
108
+ colDef: columnsLookup[groupingField]
109
+ })).filter(cell => cell.key != null);
110
+ const leafGroupingCriteria = {
111
+ key: rowId.toString(),
112
+ field: null
113
+ };
114
+ return {
115
+ path: [...parentPath, leafGroupingCriteria],
116
+ id: rowId
117
+ };
118
+ });
119
+ return buildRowTree(_extends({}, params, {
120
+ rows,
121
+ defaultGroupingExpansionDepth: props.defaultGroupingExpansionDepth,
122
+ isGroupExpandedByDefault: props.isGroupExpandedByDefault,
123
+ groupingName: GROUPING_COLUMNS_FEATURE_NAME
124
+ }));
125
+ };
126
+
127
+ return apiRef.current.unstable_registerRowGroupsBuilder('rowGrouping', groupRows);
128
+ }, [apiRef, props.defaultGroupingExpansionDepth, props.isGroupExpandedByDefault, props.disableRowGrouping]);
129
+ useFirstRender(() => {
130
+ updateRowGrouping();
131
+ });
132
+ const isFirstRender = React.useRef(true);
133
+ React.useEffect(() => {
134
+ if (isFirstRender.current) {
135
+ isFirstRender.current = false;
136
+ return () => {};
137
+ }
138
+
139
+ return updateRowGrouping();
140
+ }, [updateRowGrouping]);
141
+ /**
142
+ * PRE-PROCESSING
143
+ */
144
+
145
+ const addColumnMenuButtons = React.useCallback((initialValue, columns) => {
146
+ if (props.disableRowGrouping) {
147
+ return initialValue;
148
+ }
149
+
150
+ let menuItems;
151
+
152
+ if (isGroupingColumn(columns.field)) {
153
+ menuItems = /*#__PURE__*/_jsx(GridRowGroupingColumnMenuItems, {});
154
+ } else if (columns.groupable) {
155
+ menuItems = /*#__PURE__*/_jsx(GridRowGroupableColumnMenuItems, {});
156
+ } else {
157
+ menuItems = null;
158
+ }
159
+
160
+ if (menuItems == null) {
161
+ return initialValue;
162
+ }
163
+
164
+ return [...initialValue, /*#__PURE__*/_jsx(Divider, {}), menuItems];
165
+ }, [props.disableRowGrouping]);
166
+ const filteringMethod = React.useCallback(params => {
167
+ const rowTree = gridRowTreeSelector(apiRef);
168
+ return filterRowTreeFromGroupingColumns({
169
+ rowTree,
170
+ isRowMatchingFilters: params.isRowMatchingFilters
171
+ });
172
+ }, [apiRef]);
173
+ const sortingMethod = React.useCallback(params => {
174
+ const rowTree = gridRowTreeSelector(apiRef);
175
+ const rowIds = gridRowIdsSelector(apiRef);
176
+ return sortRowTree({
177
+ rowTree,
178
+ rowIds,
179
+ sortRowList: params.sortRowList,
180
+ disableChildrenSorting: false
181
+ });
182
+ }, [apiRef]);
183
+ useGridRegisterPreProcessor(apiRef, 'columnMenu', addColumnMenuButtons);
184
+ useGridRegisterFilteringMethod(apiRef, GROUPING_COLUMNS_FEATURE_NAME, filteringMethod);
185
+ useGridRegisterSortingMethod(apiRef, GROUPING_COLUMNS_FEATURE_NAME, sortingMethod);
186
+ /**
187
+ * API METHODS
188
+ */
189
+
190
+ const setRowGroupingModel = React.useCallback(model => {
191
+ const currentModel = gridRowGroupingModelSelector(apiRef);
192
+
193
+ if (currentModel !== model) {
194
+ apiRef.current.setState(mergeStateWithRowGroupingModel(model));
195
+ updateRowGrouping();
196
+ apiRef.current.forceUpdate();
197
+ }
198
+ }, [apiRef, updateRowGrouping]);
199
+ const addRowGroupingCriteria = React.useCallback((field, groupingIndex) => {
200
+ const currentModel = gridRowGroupingModelSelector(apiRef);
201
+
202
+ if (currentModel.includes(field)) {
203
+ return;
204
+ }
205
+
206
+ const cleanGroupingIndex = groupingIndex ?? currentModel.length;
207
+ const updatedModel = [...currentModel.slice(0, cleanGroupingIndex), field, ...currentModel.slice(cleanGroupingIndex)];
208
+ apiRef.current.setRowGroupingModel(updatedModel);
209
+ }, [apiRef]);
210
+ const removeRowGroupingCriteria = React.useCallback(field => {
211
+ const currentModel = gridRowGroupingModelSelector(apiRef);
212
+
213
+ if (!currentModel.includes(field)) {
214
+ return;
215
+ }
216
+
217
+ apiRef.current.setRowGroupingModel(currentModel.filter(el => el !== field));
218
+ }, [apiRef]);
219
+ const setRowGroupingCriteriaIndex = React.useCallback((field, targetIndex) => {
220
+ const currentModel = gridRowGroupingModelSelector(apiRef);
221
+ const currentTargetIndex = currentModel.indexOf(field);
222
+
223
+ if (currentTargetIndex === -1) {
224
+ return;
225
+ }
226
+
227
+ const updatedModel = [...currentModel];
228
+ updatedModel.splice(targetIndex, 0, updatedModel.splice(currentTargetIndex, 1)[0]);
229
+ apiRef.current.setRowGroupingModel(updatedModel);
230
+ }, [apiRef]);
231
+ const rowGroupingApi = {
232
+ setRowGroupingModel,
233
+ addRowGroupingCriteria,
234
+ removeRowGroupingCriteria,
235
+ setRowGroupingCriteriaIndex
236
+ };
237
+ useGridApiMethod(apiRef, rowGroupingApi, 'GridRowGroupingApi');
238
+ /**
239
+ * PRE-PROCESSING
240
+ */
241
+
242
+ const stateExportPreProcessing = React.useCallback(prevState => {
243
+ if (props.disableRowGrouping) {
244
+ return prevState;
245
+ }
246
+
247
+ const rowGroupingModelToExport = gridRowGroupingModelSelector(apiRef);
248
+
249
+ if (rowGroupingModelToExport.length === 0) {
250
+ return prevState;
251
+ }
252
+
253
+ return _extends({}, prevState, {
254
+ rowGrouping: {
255
+ model: rowGroupingModelToExport
256
+ }
257
+ });
258
+ }, [apiRef, props.disableRowGrouping]);
259
+ const stateRestorePreProcessing = React.useCallback((params, context) => {
260
+ if (props.disableRowGrouping) {
261
+ return params;
262
+ }
263
+
264
+ const rowGroupingModel = context.stateToRestore.rowGrouping?.model;
265
+
266
+ if (rowGroupingModel != null) {
267
+ apiRef.current.setState(mergeStateWithRowGroupingModel(rowGroupingModel));
268
+ }
269
+
270
+ return params;
271
+ }, [apiRef, props.disableRowGrouping]);
272
+ useGridRegisterPreProcessor(apiRef, 'exportState', stateExportPreProcessing);
273
+ useGridRegisterPreProcessor(apiRef, 'restoreState', stateRestorePreProcessing);
274
+ /**
275
+ * EVENTS
276
+ */
277
+
278
+ const handleCellKeyDown = React.useCallback((params, event) => {
279
+ const cellParams = apiRef.current.getCellParams(params.id, params.field);
280
+
281
+ if (isGroupingColumn(cellParams.field) && event.key === ' ' && !event.shiftKey) {
282
+ event.stopPropagation();
283
+ event.preventDefault();
284
+ const filteredDescendantCount = gridFilteredDescendantCountLookupSelector(apiRef)[params.id] ?? 0;
285
+ const isOnGroupingCell = props.rowGroupingColumnMode === 'single' || getRowGroupingFieldFromGroupingCriteria(params.rowNode.groupingField) === params.field;
286
+
287
+ if (!isOnGroupingCell || filteredDescendantCount === 0) {
288
+ return;
289
+ }
290
+
291
+ apiRef.current.setRowChildrenExpansion(params.id, !params.rowNode.childrenExpanded);
292
+ }
293
+ }, [apiRef, props.rowGroupingColumnMode]);
294
+ const checkGroupingColumnsModelDiff = React.useCallback(() => {
295
+ const rowGroupingModel = gridRowGroupingSanitizedModelSelector(apiRef);
296
+ const lastGroupingColumnsModelApplied = sanitizedModelOnLastRowPreProcessing.current;
297
+
298
+ if (!isDeepEqual(lastGroupingColumnsModelApplied, rowGroupingModel)) {
299
+ sanitizedModelOnLastRowPreProcessing.current = rowGroupingModel; // Refresh the column pre-processing
300
+
301
+ apiRef.current.updateColumns([]);
302
+ updateRowGrouping();
303
+ }
304
+ }, [apiRef, updateRowGrouping]);
305
+ useGridApiEventHandler(apiRef, GridEvents.cellKeyDown, handleCellKeyDown);
306
+ useGridApiEventHandler(apiRef, GridEvents.columnsChange, checkGroupingColumnsModelDiff);
307
+ useGridApiEventHandler(apiRef, GridEvents.rowGroupingModelChange, checkGroupingColumnsModelDiff);
308
+ /**
309
+ * EFFECTS
310
+ */
311
+
312
+ React.useEffect(() => {
313
+ if (props.rowGroupingModel !== undefined) {
314
+ apiRef.current.setRowGroupingModel(props.rowGroupingModel);
315
+ }
316
+ }, [apiRef, props.rowGroupingModel]);
317
+ };
@@ -0,0 +1,76 @@
1
+ import * as React from 'react';
2
+ import { useGridRegisterPreProcessor } from '@mui/x-data-grid/internals';
3
+ import { gridRowGroupingModelSelector } from './gridRowGroupingSelector';
4
+ import { createGroupingColDefForAllGroupingCriteria, createGroupingColDefForOneGroupingCriteria } from './createGroupingColDef';
5
+ import { getColDefOverrides, isGroupingColumn } from './gridRowGroupingUtils';
6
+ export const useGridRowGroupingPreProcessors = (apiRef, props) => {
7
+ const getGroupingColDefs = React.useCallback(columnsState => {
8
+ if (props.disableRowGrouping) {
9
+ return [];
10
+ }
11
+
12
+ const groupingColDefProp = props.groupingColDef; // We can't use `gridGroupingRowsSanitizedModelSelector` here because the new columns are not in the state yet
13
+
14
+ const rowGroupingModel = gridRowGroupingModelSelector(apiRef).filter(field => !!columnsState.lookup[field]);
15
+
16
+ if (rowGroupingModel.length === 0) {
17
+ return [];
18
+ }
19
+
20
+ switch (props.rowGroupingColumnMode) {
21
+ case 'single':
22
+ {
23
+ return [createGroupingColDefForAllGroupingCriteria({
24
+ apiRef,
25
+ rowGroupingModel,
26
+ colDefOverride: getColDefOverrides(groupingColDefProp, rowGroupingModel),
27
+ columnsLookup: columnsState.lookup
28
+ })];
29
+ }
30
+
31
+ case 'multiple':
32
+ {
33
+ return rowGroupingModel.map(groupingCriteria => createGroupingColDefForOneGroupingCriteria({
34
+ groupingCriteria,
35
+ colDefOverride: getColDefOverrides(groupingColDefProp, [groupingCriteria]),
36
+ groupedByColDef: columnsState.lookup[groupingCriteria],
37
+ columnsLookup: columnsState.lookup
38
+ }));
39
+ }
40
+
41
+ default:
42
+ {
43
+ return [];
44
+ }
45
+ }
46
+ }, [apiRef, props.groupingColDef, props.rowGroupingColumnMode, props.disableRowGrouping]);
47
+ const updateGroupingColumn = React.useCallback(columnsState => {
48
+ const groupingColDefs = getGroupingColDefs(columnsState);
49
+ let newColumnFields = [];
50
+ const newColumnsLookup = {}; // We only keep the non-grouping columns
51
+
52
+ columnsState.all.forEach(field => {
53
+ if (!isGroupingColumn(field)) {
54
+ newColumnFields.push(field);
55
+ newColumnsLookup[field] = columnsState.lookup[field];
56
+ }
57
+ }); // We add the grouping column
58
+
59
+ groupingColDefs.forEach(groupingColDef => {
60
+ const matchingGroupingColDef = columnsState.lookup[groupingColDef.field];
61
+
62
+ if (matchingGroupingColDef) {
63
+ groupingColDef.width = matchingGroupingColDef.width;
64
+ groupingColDef.flex = matchingGroupingColDef.flex;
65
+ }
66
+
67
+ newColumnsLookup[groupingColDef.field] = groupingColDef;
68
+ });
69
+ const startIndex = newColumnFields[0] === '__check__' ? 1 : 0;
70
+ newColumnFields = [...newColumnFields.slice(0, startIndex), ...groupingColDefs.map(colDef => colDef.field), ...newColumnFields.slice(startIndex)];
71
+ columnsState.all = newColumnFields;
72
+ columnsState.lookup = newColumnsLookup;
73
+ return columnsState;
74
+ }, [getGroupingColDefs]);
75
+ useGridRegisterPreProcessor(apiRef, 'hydrateColumns', updateGroupingColumn);
76
+ };
@@ -0,0 +1,22 @@
1
+ import _extends from "@babel/runtime/helpers/esm/extends";
2
+ import { GRID_STRING_COL_DEF } from '@mui/x-data-grid';
3
+ /**
4
+ * TODO: Add sorting and filtering on the value and the filteredDescendantCount
5
+ */
6
+
7
+ export const GRID_TREE_DATA_GROUPING_COL_DEF = _extends({}, GRID_STRING_COL_DEF, {
8
+ type: 'treeDataGroup',
9
+ sortable: false,
10
+ filterable: false,
11
+ disableColumnMenu: true,
12
+ disableReorder: true,
13
+ align: 'left',
14
+ width: 200,
15
+ valueGetter: params => params.rowNode.groupingKey
16
+ });
17
+ export const GRID_TREE_DATA_GROUPING_FIELD = '__tree_data_group__';
18
+ export const GRID_TREE_DATA_GROUPING_COL_DEF_FORCED_PROPERTIES = {
19
+ field: GRID_TREE_DATA_GROUPING_FIELD,
20
+ editable: false,
21
+ groupable: false
22
+ };
@@ -0,0 +1,82 @@
1
+ /**
2
+ * A node is visible if one of the following criteria is met:
3
+ * - One of its children is passing the filter
4
+ * - It is passing the filter
5
+ */
6
+ export const filterRowTreeFromTreeData = params => {
7
+ const {
8
+ rowTree,
9
+ disableChildrenFiltering,
10
+ isRowMatchingFilters
11
+ } = params;
12
+ const visibleRowsLookup = {};
13
+ const filteredRowsLookup = {};
14
+ const filteredDescendantCountLookup = {};
15
+
16
+ const filterTreeNode = (node, isParentMatchingFilters, areAncestorsExpanded) => {
17
+ const shouldSkipFilters = disableChildrenFiltering && node.depth > 0;
18
+ let isMatchingFilters;
19
+
20
+ if (shouldSkipFilters) {
21
+ isMatchingFilters = null;
22
+ } else if (!isRowMatchingFilters) {
23
+ isMatchingFilters = true;
24
+ } else {
25
+ isMatchingFilters = isRowMatchingFilters(node.id);
26
+ }
27
+
28
+ let filteredDescendantCount = 0;
29
+ node.children?.forEach(childId => {
30
+ const childNode = rowTree[childId];
31
+ const childSubTreeSize = filterTreeNode(childNode, isMatchingFilters ?? isParentMatchingFilters, areAncestorsExpanded && !!node.childrenExpanded);
32
+ filteredDescendantCount += childSubTreeSize;
33
+ });
34
+ let shouldPassFilters;
35
+
36
+ switch (isMatchingFilters) {
37
+ case true:
38
+ {
39
+ shouldPassFilters = true;
40
+ break;
41
+ }
42
+
43
+ case false:
44
+ {
45
+ shouldPassFilters = filteredDescendantCount > 0;
46
+ break;
47
+ }
48
+
49
+ default:
50
+ {
51
+ shouldPassFilters = isParentMatchingFilters;
52
+ break;
53
+ }
54
+ }
55
+
56
+ visibleRowsLookup[node.id] = shouldPassFilters && areAncestorsExpanded;
57
+ filteredRowsLookup[node.id] = shouldPassFilters;
58
+
59
+ if (!shouldPassFilters) {
60
+ return 0;
61
+ }
62
+
63
+ filteredDescendantCountLookup[node.id] = filteredDescendantCount;
64
+ return filteredDescendantCount + 1;
65
+ };
66
+
67
+ const nodes = Object.values(rowTree);
68
+
69
+ for (let i = 0; i < nodes.length; i += 1) {
70
+ const node = nodes[i];
71
+
72
+ if (node.depth === 0) {
73
+ filterTreeNode(node, true, true);
74
+ }
75
+ }
76
+
77
+ return {
78
+ visibleRowsLookup,
79
+ filteredRowsLookup,
80
+ filteredDescendantCountLookup
81
+ };
82
+ };
@@ -0,0 +1 @@
1
+ export { GRID_TREE_DATA_GROUPING_FIELD } from './gridTreeDataGroupColDef';
@@ -0,0 +1,106 @@
1
+ import _extends from "@babel/runtime/helpers/esm/extends";
2
+ import * as React from 'react';
3
+ import { useGridApiEventHandler, GridEvents, gridRowIdsSelector, gridRowTreeSelector, gridFilteredDescendantCountLookupSelector, useFirstRender } from '@mui/x-data-grid';
4
+ import { useGridRegisterSortingMethod, useGridRegisterFilteringMethod } from '@mui/x-data-grid/internals';
5
+ import { buildRowTree } from '../../../utils/tree/buildRowTree';
6
+ import { sortRowTree } from '../../../utils/tree/sortRowTree';
7
+ import { filterRowTreeFromTreeData } from './gridTreeDataUtils';
8
+ export const TREE_DATA_GROUPING_NAME = 'tree-data';
9
+ /**
10
+ * Only available in DataGridPro
11
+ * @requires useGridPreProcessing (method)
12
+ * @requires useGridRowGroupsPreProcessing (method)
13
+ */
14
+
15
+ export const useGridTreeData = (apiRef, props) => {
16
+ /**
17
+ * ROW GROUPING
18
+ */
19
+ const updateRowGrouping = React.useCallback(() => {
20
+ if (!props.treeData) {
21
+ return apiRef.current.unstable_registerRowGroupsBuilder('treeData', null);
22
+ }
23
+
24
+ const groupRows = params => {
25
+ if (!props.getTreeDataPath) {
26
+ throw new Error('MUI: No getTreeDataPath given.');
27
+ }
28
+
29
+ const rows = params.ids.map(rowId => ({
30
+ id: rowId,
31
+ path: props.getTreeDataPath(params.idRowsLookup[rowId]).map(key => ({
32
+ key,
33
+ field: null
34
+ }))
35
+ })).sort((a, b) => a.path.length - b.path.length);
36
+ return buildRowTree(_extends({
37
+ rows
38
+ }, params, {
39
+ defaultGroupingExpansionDepth: props.defaultGroupingExpansionDepth,
40
+ isGroupExpandedByDefault: props.isGroupExpandedByDefault,
41
+ groupingName: TREE_DATA_GROUPING_NAME,
42
+ onDuplicatePath: (firstId, secondId, path) => {
43
+ throw new Error(['MUI: The path returned by `getTreeDataPath` should be unique.', `The rows with id #${firstId} and #${secondId} have the same.`, `Path: ${JSON.stringify(path.map(step => step.key))}.`].join('\n'));
44
+ }
45
+ }));
46
+ };
47
+
48
+ return apiRef.current.unstable_registerRowGroupsBuilder('treeData', groupRows);
49
+ }, [apiRef, props.getTreeDataPath, props.treeData, props.defaultGroupingExpansionDepth, props.isGroupExpandedByDefault]);
50
+ useFirstRender(() => {
51
+ updateRowGrouping();
52
+ });
53
+ const isFirstRender = React.useRef(true);
54
+ React.useEffect(() => {
55
+ if (isFirstRender.current) {
56
+ isFirstRender.current = false;
57
+ return;
58
+ }
59
+
60
+ updateRowGrouping();
61
+ }, [updateRowGrouping]);
62
+ /**
63
+ * PRE-PROCESSING
64
+ */
65
+
66
+ const filteringMethod = React.useCallback(params => {
67
+ const rowTree = gridRowTreeSelector(apiRef);
68
+ return filterRowTreeFromTreeData({
69
+ rowTree,
70
+ isRowMatchingFilters: params.isRowMatchingFilters,
71
+ disableChildrenFiltering: props.disableChildrenFiltering
72
+ });
73
+ }, [apiRef, props.disableChildrenFiltering]);
74
+ const sortingMethod = React.useCallback(params => {
75
+ const rowTree = gridRowTreeSelector(apiRef);
76
+ const rowIds = gridRowIdsSelector(apiRef);
77
+ return sortRowTree({
78
+ rowTree,
79
+ rowIds,
80
+ sortRowList: params.sortRowList,
81
+ disableChildrenSorting: props.disableChildrenSorting
82
+ });
83
+ }, [apiRef, props.disableChildrenSorting]);
84
+ useGridRegisterFilteringMethod(apiRef, TREE_DATA_GROUPING_NAME, filteringMethod);
85
+ useGridRegisterSortingMethod(apiRef, TREE_DATA_GROUPING_NAME, sortingMethod);
86
+ /**
87
+ * EVENTS
88
+ */
89
+
90
+ const handleCellKeyDown = React.useCallback((params, event) => {
91
+ const cellParams = apiRef.current.getCellParams(params.id, params.field);
92
+
93
+ if (cellParams.colDef.type === 'treeDataGroup' && event.key === ' ' && !event.shiftKey) {
94
+ event.stopPropagation();
95
+ event.preventDefault();
96
+ const filteredDescendantCount = gridFilteredDescendantCountLookupSelector(apiRef)[params.id] ?? 0;
97
+
98
+ if (filteredDescendantCount === 0) {
99
+ return;
100
+ }
101
+
102
+ apiRef.current.setRowChildrenExpansion(params.id, !params.rowNode.childrenExpanded);
103
+ }
104
+ }, [apiRef]);
105
+ useGridApiEventHandler(apiRef, GridEvents.cellKeyDown, handleCellKeyDown);
106
+ };
@@ -0,0 +1,67 @@
1
+ import _extends from "@babel/runtime/helpers/esm/extends";
2
+ import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
3
+ const _excluded = ["hideDescendantCount"];
4
+ import * as React from 'react';
5
+ import { useGridRegisterPreProcessor } from '@mui/x-data-grid/internals';
6
+ import { GRID_TREE_DATA_GROUPING_COL_DEF, GRID_TREE_DATA_GROUPING_COL_DEF_FORCED_PROPERTIES } from './gridTreeDataGroupColDef';
7
+ import { TREE_DATA_GROUPING_NAME } from './useGridTreeData';
8
+ import { GridTreeDataGroupingCell } from '../../../components';
9
+ import { jsx as _jsx } from "react/jsx-runtime";
10
+ export const useGridTreeDataPreProcessors = (apiRef, props) => {
11
+ const getGroupingColDef = React.useCallback(() => {
12
+ const groupingColDefProp = props.groupingColDef;
13
+ let colDefOverride;
14
+
15
+ if (typeof groupingColDefProp === 'function') {
16
+ const params = {
17
+ groupingName: TREE_DATA_GROUPING_NAME,
18
+ fields: []
19
+ };
20
+ colDefOverride = groupingColDefProp(params);
21
+ } else {
22
+ colDefOverride = groupingColDefProp;
23
+ }
24
+
25
+ const _ref = colDefOverride ?? {},
26
+ {
27
+ hideDescendantCount
28
+ } = _ref,
29
+ colDefOverrideProperties = _objectWithoutPropertiesLoose(_ref, _excluded);
30
+
31
+ const commonProperties = _extends({}, GRID_TREE_DATA_GROUPING_COL_DEF, {
32
+ renderCell: params => /*#__PURE__*/_jsx(GridTreeDataGroupingCell, _extends({}, params, {
33
+ hideDescendantCount: hideDescendantCount
34
+ })),
35
+ headerName: apiRef.current.getLocaleText('treeDataGroupingHeaderName')
36
+ });
37
+
38
+ return _extends({}, commonProperties, colDefOverrideProperties, GRID_TREE_DATA_GROUPING_COL_DEF_FORCED_PROPERTIES);
39
+ }, [apiRef, props.groupingColDef]);
40
+ const updateGroupingColumn = React.useCallback(columnsState => {
41
+ const groupingColDefField = GRID_TREE_DATA_GROUPING_COL_DEF_FORCED_PROPERTIES.field;
42
+ const shouldHaveGroupingColumn = props.treeData;
43
+ const prevGroupingColumn = columnsState.lookup[groupingColDefField];
44
+
45
+ if (shouldHaveGroupingColumn) {
46
+ const newGroupingColumn = getGroupingColDef();
47
+
48
+ if (prevGroupingColumn) {
49
+ newGroupingColumn.width = prevGroupingColumn.width;
50
+ newGroupingColumn.flex = prevGroupingColumn.flex;
51
+ }
52
+
53
+ columnsState.lookup[groupingColDefField] = newGroupingColumn;
54
+
55
+ if (prevGroupingColumn == null) {
56
+ const index = columnsState.all[0] === '__check__' ? 1 : 0;
57
+ columnsState.all = [...columnsState.all.slice(0, index), groupingColDefField, ...columnsState.all.slice(index)];
58
+ }
59
+ } else if (!shouldHaveGroupingColumn && prevGroupingColumn) {
60
+ delete columnsState.lookup[groupingColDefField];
61
+ columnsState.all = columnsState.all.filter(field => field !== groupingColDefField);
62
+ }
63
+
64
+ return columnsState;
65
+ }, [props.treeData, getGroupingColDef]);
66
+ useGridRegisterPreProcessor(apiRef, 'hydrateColumns', updateGroupingColumn);
67
+ };
@@ -0,0 +1 @@
1
+ export * from './features';
@@ -0,0 +1,2 @@
1
+ import { useGridApiContext as useCommunityGridApiContext } from '@mui/x-data-grid';
2
+ export const useGridApiContext = useCommunityGridApiContext;
@@ -0,0 +1,2 @@
1
+ import { useGridApiRef as useCommunityGridApiRef } from '@mui/x-data-grid';
2
+ export const useGridApiRef = useCommunityGridApiRef;
@@ -0,0 +1,2 @@
1
+ import { useGridRootProps as useCommunityGridRootProps } from '@mui/x-data-grid';
2
+ export const useGridRootProps = useCommunityGridRootProps;