@mui/x-data-grid-premium 8.0.0-alpha.8 → 8.0.0-beta.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 (419) hide show
  1. package/CHANGELOG.md +2566 -687
  2. package/DataGridPremium/DataGrid.d.ts +1 -1
  3. package/DataGridPremium/DataGridPremium.d.ts +6 -6
  4. package/DataGridPremium/DataGridPremium.js +61 -35
  5. package/DataGridPremium/index.d.ts +3 -3
  6. package/DataGridPremium/useDataGridPremiumComponent.d.ts +4 -4
  7. package/DataGridPremium/useDataGridPremiumComponent.js +5 -4
  8. package/DataGridPremium/useDataGridPremiumProps.d.ts +2 -2
  9. package/DataGridPremium/useDataGridPremiumProps.js +2 -2
  10. package/README.md +1 -1
  11. package/components/GridAggregationHeader.d.ts +3 -3
  12. package/components/GridAggregationHeader.js +13 -12
  13. package/components/GridAggregationRowOverlay.d.ts +3 -0
  14. package/components/GridAggregationRowOverlay.js +44 -0
  15. package/components/GridBottomContainer.d.ts +3 -0
  16. package/components/GridBottomContainer.js +51 -0
  17. package/components/GridColumnMenuAggregationItem.d.ts +2 -2
  18. package/components/GridColumnMenuAggregationItem.js +36 -46
  19. package/components/GridColumnMenuRowGroupItem.d.ts +1 -1
  20. package/components/GridColumnMenuRowUngroupItem.d.ts +1 -1
  21. package/components/GridDataSourceGroupingCriteriaCell.d.ts +2 -2
  22. package/components/GridDataSourceGroupingCriteriaCell.js +8 -12
  23. package/components/GridExcelExportMenuItem.d.ts +3 -3
  24. package/components/GridFooterCell.d.ts +2 -2
  25. package/components/GridFooterCell.js +5 -6
  26. package/components/GridGroupingColumnFooterCell.d.ts +1 -1
  27. package/components/GridGroupingColumnFooterCell.js +2 -1
  28. package/components/GridGroupingColumnLeafCell.d.ts +1 -1
  29. package/components/GridGroupingColumnLeafCell.js +3 -9
  30. package/components/GridGroupingCriteriaCell.d.ts +2 -2
  31. package/components/GridGroupingCriteriaCell.js +3 -8
  32. package/components/GridPremiumColumnMenu.d.ts +26 -26
  33. package/components/GridPremiumToolbar.d.ts +3 -0
  34. package/components/GridPremiumToolbar.js +31 -0
  35. package/components/export/ExportExcel.d.ts +29 -0
  36. package/components/export/ExportExcel.js +216 -0
  37. package/components/export/index.d.ts +1 -0
  38. package/components/export/index.js +16 -0
  39. package/components/index.d.ts +6 -5
  40. package/components/index.js +13 -1
  41. package/components/promptControl/GridToolbarPromptControl.d.ts +22 -22
  42. package/components/promptControl/GridToolbarPromptControl.js +33 -20
  43. package/components/promptControl/RecordButton.d.ts +9 -9
  44. package/components/promptControl/index.d.ts +1 -1
  45. package/components/reexports.d.ts +1 -1
  46. package/constants/dataGridPremiumDefaultSlotsComponents.d.ts +1 -1
  47. package/constants/dataGridPremiumDefaultSlotsComponents.js +5 -1
  48. package/esm/DataGridPremium/DataGrid.d.ts +8 -0
  49. package/esm/DataGridPremium/DataGridPremium.d.ts +16 -0
  50. package/esm/DataGridPremium/DataGridPremium.js +61 -35
  51. package/esm/DataGridPremium/index.d.ts +3 -0
  52. package/esm/DataGridPremium/useDataGridPremiumComponent.d.ts +4 -0
  53. package/esm/DataGridPremium/useDataGridPremiumComponent.js +6 -5
  54. package/esm/DataGridPremium/useDataGridPremiumProps.d.ts +6 -0
  55. package/esm/DataGridPremium/useDataGridPremiumProps.js +2 -2
  56. package/esm/components/GridAggregationHeader.d.ts +7 -0
  57. package/esm/components/GridAggregationHeader.js +13 -12
  58. package/esm/components/GridAggregationRowOverlay.d.ts +3 -0
  59. package/esm/components/GridAggregationRowOverlay.js +37 -0
  60. package/esm/components/GridBottomContainer.d.ts +3 -0
  61. package/esm/components/GridBottomContainer.js +43 -0
  62. package/esm/components/GridColumnMenuAggregationItem.d.ts +7 -0
  63. package/esm/components/GridColumnMenuAggregationItem.js +36 -46
  64. package/esm/components/GridColumnMenuRowGroupItem.d.ts +3 -0
  65. package/esm/components/GridColumnMenuRowUngroupItem.d.ts +3 -0
  66. package/esm/components/GridDataSourceGroupingCriteriaCell.d.ts +7 -0
  67. package/esm/components/GridDataSourceGroupingCriteriaCell.js +9 -13
  68. package/esm/components/GridExcelExportMenuItem.d.ts +9 -0
  69. package/esm/components/GridFooterCell.d.ts +9 -0
  70. package/esm/components/GridFooterCell.js +5 -6
  71. package/esm/components/GridGroupingColumnFooterCell.d.ts +4 -0
  72. package/esm/components/GridGroupingColumnFooterCell.js +2 -1
  73. package/esm/components/GridGroupingColumnLeafCell.d.ts +4 -0
  74. package/esm/components/GridGroupingColumnLeafCell.js +3 -8
  75. package/esm/components/GridGroupingCriteriaCell.d.ts +7 -0
  76. package/esm/components/GridGroupingCriteriaCell.js +3 -8
  77. package/esm/components/GridPremiumColumnMenu.d.ts +33 -0
  78. package/esm/components/GridPremiumToolbar.d.ts +3 -0
  79. package/esm/components/GridPremiumToolbar.js +23 -0
  80. package/esm/components/export/ExportExcel.d.ts +29 -0
  81. package/esm/components/export/ExportExcel.js +209 -0
  82. package/esm/components/export/index.d.ts +1 -0
  83. package/esm/components/export/index.js +1 -0
  84. package/esm/components/index.d.ts +6 -0
  85. package/esm/components/index.js +2 -1
  86. package/esm/components/promptControl/GridToolbarPromptControl.d.ts +26 -0
  87. package/esm/components/promptControl/GridToolbarPromptControl.js +33 -20
  88. package/esm/components/promptControl/RecordButton.d.ts +16 -0
  89. package/esm/components/promptControl/index.d.ts +1 -0
  90. package/esm/components/reexports.d.ts +1 -0
  91. package/esm/constants/dataGridPremiumDefaultSlotsComponents.d.ts +2 -0
  92. package/esm/constants/dataGridPremiumDefaultSlotsComponents.js +5 -1
  93. package/esm/hooks/features/aggregation/createAggregationLookup.d.ts +17 -0
  94. package/esm/hooks/features/aggregation/createAggregationLookup.js +3 -3
  95. package/esm/hooks/features/aggregation/gridAggregationFunctions.d.ts +8 -0
  96. package/esm/hooks/features/aggregation/gridAggregationInterfaces.d.ts +129 -0
  97. package/esm/hooks/features/aggregation/gridAggregationSelectors.d.ts +13 -0
  98. package/esm/hooks/features/aggregation/gridAggregationSelectors.js +2 -2
  99. package/esm/hooks/features/aggregation/gridAggregationUtils.d.ts +62 -0
  100. package/esm/hooks/features/aggregation/gridAggregationUtils.js +1 -1
  101. package/esm/hooks/features/aggregation/index.d.ts +4 -0
  102. package/esm/hooks/features/aggregation/useGridAggregation.d.ts +6 -0
  103. package/esm/hooks/features/aggregation/useGridAggregation.js +6 -8
  104. package/esm/hooks/features/aggregation/useGridAggregationPreProcessors.d.ts +4 -0
  105. package/esm/hooks/features/aggregation/useGridAggregationPreProcessors.js +7 -6
  106. package/esm/hooks/features/aggregation/wrapColumnWithAggregation.d.ts +81 -0
  107. package/esm/hooks/features/aggregation/wrapColumnWithAggregation.js +6 -5
  108. package/esm/hooks/features/cellSelection/gridCellSelectionInterfaces.d.ts +40 -0
  109. package/esm/hooks/features/cellSelection/gridCellSelectionSelector.d.ts +2 -0
  110. package/esm/hooks/features/cellSelection/gridCellSelectionSelector.js +2 -1
  111. package/esm/hooks/features/cellSelection/index.d.ts +1 -0
  112. package/esm/hooks/features/cellSelection/useGridCellSelection.d.ts +6 -0
  113. package/esm/hooks/features/cellSelection/useGridCellSelection.js +15 -13
  114. package/esm/hooks/features/clipboard/useGridClipboardImport.d.ts +4 -0
  115. package/esm/hooks/features/clipboard/useGridClipboardImport.js +5 -5
  116. package/esm/hooks/features/dataSource/models.d.ts +54 -0
  117. package/esm/hooks/features/dataSource/useGridDataSourcePremium.d.ts +4 -0
  118. package/esm/hooks/features/dataSource/useGridDataSourcePremium.js +13 -7
  119. package/esm/hooks/features/export/gridExcelExportInterface.d.ts +71 -0
  120. package/esm/hooks/features/export/index.d.ts +2 -0
  121. package/esm/hooks/features/export/index.js +1 -1
  122. package/esm/hooks/features/export/serializer/excelSerializer.d.ts +40 -0
  123. package/esm/hooks/features/export/serializer/excelSerializer.js +69 -180
  124. package/esm/hooks/features/export/serializer/setupExcelExportWebWorker.d.ts +2 -0
  125. package/esm/hooks/features/export/serializer/setupExcelExportWebWorker.js +53 -0
  126. package/esm/hooks/features/export/serializer/utils.d.ts +36 -0
  127. package/esm/hooks/features/export/serializer/utils.js +93 -0
  128. package/esm/hooks/features/export/useGridExcelExport.d.ts +11 -0
  129. package/esm/hooks/features/export/useGridExcelExport.js +11 -5
  130. package/esm/hooks/features/index.d.ts +5 -0
  131. package/esm/hooks/features/promptControl/api.d.ts +2 -0
  132. package/esm/hooks/features/promptControl/index.d.ts +2 -0
  133. package/esm/hooks/features/promptControl/types.d.ts +25 -0
  134. package/esm/hooks/features/rowGrouping/createGroupingColDef.d.ts +57 -0
  135. package/esm/hooks/features/rowGrouping/createGroupingColDef.js +5 -5
  136. package/esm/hooks/features/rowGrouping/gridRowGroupingInterfaces.d.ts +44 -0
  137. package/esm/hooks/features/rowGrouping/gridRowGroupingSelector.d.ts +3 -0
  138. package/esm/hooks/features/rowGrouping/gridRowGroupingSelector.js +2 -2
  139. package/esm/hooks/features/rowGrouping/gridRowGroupingUtils.d.ts +54 -0
  140. package/esm/hooks/features/rowGrouping/gridRowGroupingUtils.js +5 -3
  141. package/esm/hooks/features/rowGrouping/index.d.ts +3 -0
  142. package/esm/hooks/features/rowGrouping/useGridDataSourceRowGroupingPreProcessors.d.ts +4 -0
  143. package/esm/hooks/features/rowGrouping/useGridDataSourceRowGroupingPreProcessors.js +3 -3
  144. package/esm/hooks/features/rowGrouping/useGridRowGrouping.d.ts +11 -0
  145. package/esm/hooks/features/rowGrouping/useGridRowGrouping.js +4 -5
  146. package/esm/hooks/features/rowGrouping/useGridRowGroupingPreProcessors.d.ts +4 -0
  147. package/esm/hooks/features/rowGrouping/useGridRowGroupingPreProcessors.js +5 -5
  148. package/esm/hooks/features/rows/index.d.ts +1 -0
  149. package/esm/hooks/features/rows/useGridRowAriaAttributes.d.ts +1 -0
  150. package/esm/hooks/index.d.ts +2 -0
  151. package/esm/hooks/utils/index.d.ts +1 -0
  152. package/esm/hooks/utils/useGridApiContext.d.ts +4 -0
  153. package/esm/hooks/utils/useGridApiRef.d.ts +4 -0
  154. package/esm/hooks/utils/useGridAriaAttributes.d.ts +2 -0
  155. package/esm/hooks/utils/useGridPrivateApiContext.d.ts +2 -0
  156. package/esm/hooks/utils/useGridRootProps.d.ts +2 -0
  157. package/esm/hooks/utils/useKeepGroupedColumnsHidden.d.ts +12 -0
  158. package/esm/hooks/utils/useKeepGroupedColumnsHidden.js +2 -2
  159. package/esm/index.d.ts +23 -0
  160. package/esm/index.js +6 -5
  161. package/esm/locales.d.ts +1 -0
  162. package/esm/material/icons.d.ts +15 -0
  163. package/esm/material/index.d.ts +8 -0
  164. package/esm/models/dataGridPremiumProps.d.ts +162 -0
  165. package/esm/models/gridApiPremium.d.ts +14 -0
  166. package/esm/models/gridGroupingValueGetter.d.ts +4 -0
  167. package/esm/models/gridPastedValueParser.d.ts +4 -0
  168. package/esm/models/gridPremiumIconSlotsComponent.d.ts +28 -0
  169. package/esm/models/gridPremiumSlotsComponent.d.ts +7 -0
  170. package/esm/models/gridStatePremium.d.ts +18 -0
  171. package/esm/models/index.d.ts +4 -0
  172. package/esm/package.json +1 -0
  173. package/esm/setupExcelExportWebWorker.d.ts +1 -0
  174. package/esm/setupExcelExportWebWorker.js +1 -0
  175. package/esm/themeAugmentation/index.d.ts +2 -0
  176. package/esm/themeAugmentation/overrides.d.ts +7 -0
  177. package/esm/themeAugmentation/props.d.ts +15 -0
  178. package/esm/typeOverloads/index.d.ts +2 -0
  179. package/esm/typeOverloads/modules.d.ts +97 -0
  180. package/esm/typeOverloads/reexports.d.ts +17 -0
  181. package/esm/utils/releaseInfo.d.ts +1 -0
  182. package/esm/utils/releaseInfo.js +1 -1
  183. package/hooks/features/aggregation/createAggregationLookup.d.ts +17 -11
  184. package/hooks/features/aggregation/createAggregationLookup.js +2 -2
  185. package/hooks/features/aggregation/gridAggregationFunctions.d.ts +7 -7
  186. package/hooks/features/aggregation/gridAggregationInterfaces.d.ts +81 -82
  187. package/hooks/features/aggregation/gridAggregationSelectors.d.ts +3 -3
  188. package/hooks/features/aggregation/gridAggregationSelectors.js +1 -2
  189. package/hooks/features/aggregation/gridAggregationUtils.d.ts +43 -26
  190. package/hooks/features/aggregation/gridAggregationUtils.js +1 -1
  191. package/hooks/features/aggregation/index.d.ts +4 -4
  192. package/hooks/features/aggregation/useGridAggregation.d.ts +4 -4
  193. package/hooks/features/aggregation/useGridAggregation.js +6 -8
  194. package/hooks/features/aggregation/useGridAggregationPreProcessors.d.ts +4 -4
  195. package/hooks/features/aggregation/useGridAggregationPreProcessors.js +7 -6
  196. package/hooks/features/aggregation/wrapColumnWithAggregation.d.ts +68 -62
  197. package/hooks/features/aggregation/wrapColumnWithAggregation.js +6 -5
  198. package/hooks/features/cellSelection/gridCellSelectionInterfaces.d.ts +34 -34
  199. package/hooks/features/cellSelection/gridCellSelectionSelector.d.ts +2 -2
  200. package/hooks/features/cellSelection/gridCellSelectionSelector.js +2 -2
  201. package/hooks/features/cellSelection/index.d.ts +1 -1
  202. package/hooks/features/cellSelection/useGridCellSelection.d.ts +4 -4
  203. package/hooks/features/cellSelection/useGridCellSelection.js +13 -11
  204. package/hooks/features/clipboard/useGridClipboardImport.d.ts +3 -3
  205. package/hooks/features/clipboard/useGridClipboardImport.js +4 -4
  206. package/hooks/features/dataSource/models.d.ts +41 -34
  207. package/hooks/features/dataSource/useGridDataSourcePremium.d.ts +4 -4
  208. package/hooks/features/dataSource/useGridDataSourcePremium.js +13 -7
  209. package/hooks/features/export/gridExcelExportInterface.d.ts +52 -52
  210. package/hooks/features/export/index.d.ts +2 -2
  211. package/hooks/features/export/index.js +2 -2
  212. package/hooks/features/export/serializer/excelSerializer.d.ts +25 -52
  213. package/hooks/features/export/serializer/excelSerializer.js +74 -187
  214. package/hooks/features/export/serializer/setupExcelExportWebWorker.d.ts +2 -0
  215. package/hooks/features/export/serializer/setupExcelExportWebWorker.js +59 -0
  216. package/hooks/features/export/serializer/utils.d.ts +36 -0
  217. package/hooks/features/export/serializer/utils.js +106 -0
  218. package/hooks/features/export/useGridExcelExport.d.ts +4 -4
  219. package/hooks/features/export/useGridExcelExport.js +10 -3
  220. package/hooks/features/index.d.ts +5 -5
  221. package/hooks/features/promptControl/api.d.ts +2 -2
  222. package/hooks/features/promptControl/index.d.ts +2 -2
  223. package/hooks/features/promptControl/types.d.ts +15 -15
  224. package/hooks/features/rowGrouping/createGroupingColDef.d.ts +45 -33
  225. package/hooks/features/rowGrouping/createGroupingColDef.js +4 -4
  226. package/hooks/features/rowGrouping/gridRowGroupingInterfaces.d.ts +32 -32
  227. package/hooks/features/rowGrouping/gridRowGroupingSelector.d.ts +2 -2
  228. package/hooks/features/rowGrouping/gridRowGroupingSelector.js +2 -2
  229. package/hooks/features/rowGrouping/gridRowGroupingUtils.d.ts +32 -24
  230. package/hooks/features/rowGrouping/gridRowGroupingUtils.js +4 -2
  231. package/hooks/features/rowGrouping/index.d.ts +3 -3
  232. package/hooks/features/rowGrouping/useGridDataSourceRowGroupingPreProcessors.d.ts +4 -4
  233. package/hooks/features/rowGrouping/useGridDataSourceRowGroupingPreProcessors.js +3 -3
  234. package/hooks/features/rowGrouping/useGridRowGrouping.d.ts +4 -4
  235. package/hooks/features/rowGrouping/useGridRowGrouping.js +4 -5
  236. package/hooks/features/rowGrouping/useGridRowGroupingPreProcessors.d.ts +4 -4
  237. package/hooks/features/rowGrouping/useGridRowGroupingPreProcessors.js +5 -5
  238. package/hooks/features/rows/index.d.ts +1 -1
  239. package/hooks/features/rows/useGridRowAriaAttributes.d.ts +1 -1
  240. package/hooks/index.d.ts +2 -2
  241. package/hooks/utils/index.d.ts +1 -1
  242. package/hooks/utils/useGridApiContext.d.ts +4 -2
  243. package/hooks/utils/useGridApiRef.d.ts +4 -2
  244. package/hooks/utils/useGridAriaAttributes.d.ts +1 -1
  245. package/hooks/utils/useGridPrivateApiContext.d.ts +2 -2
  246. package/hooks/utils/useGridRootProps.d.ts +2 -2
  247. package/hooks/utils/useKeepGroupedColumnsHidden.d.ts +5 -5
  248. package/hooks/utils/useKeepGroupedColumnsHidden.js +2 -2
  249. package/index.d.ts +9 -17
  250. package/index.js +2 -11
  251. package/locales.d.ts +1 -1
  252. package/material/icons.d.ts +6 -6
  253. package/material/index.d.ts +6 -6
  254. package/models/dataGridPremiumProps.d.ts +141 -136
  255. package/models/gridApiPremium.d.ts +4 -6
  256. package/models/gridGroupingValueGetter.d.ts +3 -2
  257. package/models/gridPastedValueParser.d.ts +3 -2
  258. package/models/gridPremiumIconSlotsComponent.d.ts +26 -26
  259. package/models/gridPremiumSlotsComponent.d.ts +2 -3
  260. package/models/gridStatePremium.d.ts +7 -7
  261. package/models/index.d.ts +4 -4
  262. package/modern/DataGridPremium/DataGrid.d.ts +8 -0
  263. package/modern/DataGridPremium/DataGridPremium.d.ts +16 -0
  264. package/modern/DataGridPremium/DataGridPremium.js +61 -35
  265. package/modern/DataGridPremium/index.d.ts +3 -0
  266. package/modern/DataGridPremium/useDataGridPremiumComponent.d.ts +4 -0
  267. package/modern/DataGridPremium/useDataGridPremiumComponent.js +6 -5
  268. package/modern/DataGridPremium/useDataGridPremiumProps.d.ts +6 -0
  269. package/modern/DataGridPremium/useDataGridPremiumProps.js +2 -2
  270. package/modern/components/GridAggregationHeader.d.ts +7 -0
  271. package/modern/components/GridAggregationHeader.js +13 -12
  272. package/modern/components/GridAggregationRowOverlay.d.ts +3 -0
  273. package/modern/components/GridAggregationRowOverlay.js +37 -0
  274. package/modern/components/GridBottomContainer.d.ts +3 -0
  275. package/modern/components/GridBottomContainer.js +43 -0
  276. package/modern/components/GridColumnMenuAggregationItem.d.ts +7 -0
  277. package/modern/components/GridColumnMenuAggregationItem.js +36 -46
  278. package/modern/components/GridColumnMenuRowGroupItem.d.ts +3 -0
  279. package/modern/components/GridColumnMenuRowUngroupItem.d.ts +3 -0
  280. package/modern/components/GridDataSourceGroupingCriteriaCell.d.ts +7 -0
  281. package/modern/components/GridDataSourceGroupingCriteriaCell.js +9 -13
  282. package/modern/components/GridExcelExportMenuItem.d.ts +9 -0
  283. package/modern/components/GridFooterCell.d.ts +9 -0
  284. package/modern/components/GridFooterCell.js +5 -6
  285. package/modern/components/GridGroupingColumnFooterCell.d.ts +4 -0
  286. package/modern/components/GridGroupingColumnFooterCell.js +2 -1
  287. package/modern/components/GridGroupingColumnLeafCell.d.ts +4 -0
  288. package/modern/components/GridGroupingColumnLeafCell.js +3 -8
  289. package/modern/components/GridGroupingCriteriaCell.d.ts +7 -0
  290. package/modern/components/GridGroupingCriteriaCell.js +3 -8
  291. package/modern/components/GridPremiumColumnMenu.d.ts +33 -0
  292. package/modern/components/GridPremiumToolbar.d.ts +3 -0
  293. package/modern/components/GridPremiumToolbar.js +23 -0
  294. package/modern/components/export/ExportExcel.d.ts +29 -0
  295. package/modern/components/export/ExportExcel.js +209 -0
  296. package/modern/components/export/index.d.ts +1 -0
  297. package/modern/components/export/index.js +1 -0
  298. package/modern/components/index.d.ts +6 -0
  299. package/modern/components/index.js +2 -1
  300. package/modern/components/promptControl/GridToolbarPromptControl.d.ts +26 -0
  301. package/modern/components/promptControl/GridToolbarPromptControl.js +33 -20
  302. package/modern/components/promptControl/RecordButton.d.ts +16 -0
  303. package/modern/components/promptControl/index.d.ts +1 -0
  304. package/modern/components/reexports.d.ts +1 -0
  305. package/modern/constants/dataGridPremiumDefaultSlotsComponents.d.ts +2 -0
  306. package/modern/constants/dataGridPremiumDefaultSlotsComponents.js +5 -1
  307. package/modern/hooks/features/aggregation/createAggregationLookup.d.ts +17 -0
  308. package/modern/hooks/features/aggregation/createAggregationLookup.js +3 -3
  309. package/modern/hooks/features/aggregation/gridAggregationFunctions.d.ts +8 -0
  310. package/modern/hooks/features/aggregation/gridAggregationInterfaces.d.ts +129 -0
  311. package/modern/hooks/features/aggregation/gridAggregationSelectors.d.ts +13 -0
  312. package/modern/hooks/features/aggregation/gridAggregationSelectors.js +2 -2
  313. package/modern/hooks/features/aggregation/gridAggregationUtils.d.ts +62 -0
  314. package/modern/hooks/features/aggregation/gridAggregationUtils.js +1 -1
  315. package/modern/hooks/features/aggregation/index.d.ts +4 -0
  316. package/modern/hooks/features/aggregation/useGridAggregation.d.ts +6 -0
  317. package/modern/hooks/features/aggregation/useGridAggregation.js +6 -8
  318. package/modern/hooks/features/aggregation/useGridAggregationPreProcessors.d.ts +4 -0
  319. package/modern/hooks/features/aggregation/useGridAggregationPreProcessors.js +7 -6
  320. package/modern/hooks/features/aggregation/wrapColumnWithAggregation.d.ts +81 -0
  321. package/modern/hooks/features/aggregation/wrapColumnWithAggregation.js +6 -5
  322. package/modern/hooks/features/cellSelection/gridCellSelectionInterfaces.d.ts +40 -0
  323. package/modern/hooks/features/cellSelection/gridCellSelectionSelector.d.ts +2 -0
  324. package/modern/hooks/features/cellSelection/gridCellSelectionSelector.js +2 -1
  325. package/modern/hooks/features/cellSelection/index.d.ts +1 -0
  326. package/modern/hooks/features/cellSelection/useGridCellSelection.d.ts +6 -0
  327. package/modern/hooks/features/cellSelection/useGridCellSelection.js +15 -13
  328. package/modern/hooks/features/clipboard/useGridClipboardImport.d.ts +4 -0
  329. package/modern/hooks/features/clipboard/useGridClipboardImport.js +5 -5
  330. package/modern/hooks/features/dataSource/models.d.ts +54 -0
  331. package/modern/hooks/features/dataSource/useGridDataSourcePremium.d.ts +4 -0
  332. package/modern/hooks/features/dataSource/useGridDataSourcePremium.js +13 -7
  333. package/modern/hooks/features/export/gridExcelExportInterface.d.ts +71 -0
  334. package/modern/hooks/features/export/index.d.ts +2 -0
  335. package/modern/hooks/features/export/index.js +1 -1
  336. package/modern/hooks/features/export/serializer/excelSerializer.d.ts +40 -0
  337. package/modern/hooks/features/export/serializer/excelSerializer.js +69 -180
  338. package/modern/hooks/features/export/serializer/setupExcelExportWebWorker.d.ts +2 -0
  339. package/modern/hooks/features/export/serializer/setupExcelExportWebWorker.js +53 -0
  340. package/modern/hooks/features/export/serializer/utils.d.ts +36 -0
  341. package/modern/hooks/features/export/serializer/utils.js +93 -0
  342. package/modern/hooks/features/export/useGridExcelExport.d.ts +11 -0
  343. package/modern/hooks/features/export/useGridExcelExport.js +11 -5
  344. package/modern/hooks/features/index.d.ts +5 -0
  345. package/modern/hooks/features/promptControl/api.d.ts +2 -0
  346. package/modern/hooks/features/promptControl/index.d.ts +2 -0
  347. package/modern/hooks/features/promptControl/types.d.ts +25 -0
  348. package/modern/hooks/features/rowGrouping/createGroupingColDef.d.ts +57 -0
  349. package/modern/hooks/features/rowGrouping/createGroupingColDef.js +5 -5
  350. package/modern/hooks/features/rowGrouping/gridRowGroupingInterfaces.d.ts +44 -0
  351. package/modern/hooks/features/rowGrouping/gridRowGroupingSelector.d.ts +3 -0
  352. package/modern/hooks/features/rowGrouping/gridRowGroupingSelector.js +2 -2
  353. package/modern/hooks/features/rowGrouping/gridRowGroupingUtils.d.ts +54 -0
  354. package/modern/hooks/features/rowGrouping/gridRowGroupingUtils.js +5 -3
  355. package/modern/hooks/features/rowGrouping/index.d.ts +3 -0
  356. package/modern/hooks/features/rowGrouping/useGridDataSourceRowGroupingPreProcessors.d.ts +4 -0
  357. package/modern/hooks/features/rowGrouping/useGridDataSourceRowGroupingPreProcessors.js +3 -3
  358. package/modern/hooks/features/rowGrouping/useGridRowGrouping.d.ts +11 -0
  359. package/modern/hooks/features/rowGrouping/useGridRowGrouping.js +4 -5
  360. package/modern/hooks/features/rowGrouping/useGridRowGroupingPreProcessors.d.ts +4 -0
  361. package/modern/hooks/features/rowGrouping/useGridRowGroupingPreProcessors.js +5 -5
  362. package/modern/hooks/features/rows/index.d.ts +1 -0
  363. package/modern/hooks/features/rows/useGridRowAriaAttributes.d.ts +1 -0
  364. package/modern/hooks/index.d.ts +2 -0
  365. package/modern/hooks/utils/index.d.ts +1 -0
  366. package/modern/hooks/utils/useGridApiContext.d.ts +4 -0
  367. package/modern/hooks/utils/useGridApiRef.d.ts +4 -0
  368. package/modern/hooks/utils/useGridAriaAttributes.d.ts +2 -0
  369. package/modern/hooks/utils/useGridPrivateApiContext.d.ts +2 -0
  370. package/modern/hooks/utils/useGridRootProps.d.ts +2 -0
  371. package/modern/hooks/utils/useKeepGroupedColumnsHidden.d.ts +12 -0
  372. package/modern/hooks/utils/useKeepGroupedColumnsHidden.js +2 -2
  373. package/modern/index.d.ts +23 -0
  374. package/modern/index.js +1 -7
  375. package/modern/locales.d.ts +1 -0
  376. package/modern/material/icons.d.ts +15 -0
  377. package/modern/material/index.d.ts +8 -0
  378. package/modern/models/dataGridPremiumProps.d.ts +162 -0
  379. package/modern/models/gridApiPremium.d.ts +14 -0
  380. package/modern/models/gridGroupingValueGetter.d.ts +4 -0
  381. package/modern/models/gridPastedValueParser.d.ts +4 -0
  382. package/modern/models/gridPremiumIconSlotsComponent.d.ts +28 -0
  383. package/modern/models/gridPremiumSlotsComponent.d.ts +7 -0
  384. package/modern/models/gridStatePremium.d.ts +18 -0
  385. package/modern/models/index.d.ts +4 -0
  386. package/modern/package.json +1 -0
  387. package/modern/setupExcelExportWebWorker.d.ts +1 -0
  388. package/modern/setupExcelExportWebWorker.js +1 -0
  389. package/modern/themeAugmentation/index.d.ts +2 -0
  390. package/modern/themeAugmentation/overrides.d.ts +7 -0
  391. package/modern/themeAugmentation/props.d.ts +15 -0
  392. package/modern/typeOverloads/index.d.ts +2 -0
  393. package/modern/typeOverloads/modules.d.ts +97 -0
  394. package/modern/typeOverloads/reexports.d.ts +17 -0
  395. package/modern/utils/releaseInfo.d.ts +1 -0
  396. package/modern/utils/releaseInfo.js +1 -1
  397. package/package.json +42 -9
  398. package/setupExcelExportWebWorker.d.ts +1 -0
  399. package/setupExcelExportWebWorker.js +12 -0
  400. package/themeAugmentation/index.d.ts +2 -2
  401. package/themeAugmentation/overrides.d.ts +3 -4
  402. package/themeAugmentation/props.d.ts +9 -11
  403. package/tsconfig.build.tsbuildinfo +1 -0
  404. package/typeOverloads/index.d.ts +1 -1
  405. package/typeOverloads/modules.d.ts +75 -82
  406. package/typeOverloads/reexports.d.ts +5 -5
  407. package/utils/releaseInfo.d.ts +1 -1
  408. package/utils/releaseInfo.js +1 -1
  409. package/DataGridPremium/package.json +0 -6
  410. package/components/package.json +0 -6
  411. package/esm/hooks/features/dataSource/cache.js +0 -3
  412. package/hooks/features/dataSource/cache.d.ts +0 -2
  413. package/hooks/features/dataSource/cache.js +0 -9
  414. package/hooks/package.json +0 -6
  415. package/material/package.json +0 -6
  416. package/models/package.json +0 -6
  417. package/modern/hooks/features/dataSource/cache.js +0 -3
  418. package/themeAugmentation/package.json +0 -6
  419. package/typeOverloads/package.json +0 -6
@@ -1,8 +1,10 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import * as React from 'react';
3
3
  import { useGridApiEventHandler as addEventHandler, useGridApiMethod, GRID_ROOT_GROUP_ID } from '@mui/x-data-grid-pro';
4
- import { useGridDataSourceBase, useGridRegisterStrategyProcessor, useGridRegisterPipeProcessor } from '@mui/x-data-grid-pro/internals';
5
- import { getKeyPremium } from "./cache.js";
4
+ import { useGridDataSourceBasePro, useGridRegisterStrategyProcessor, useGridRegisterPipeProcessor } from '@mui/x-data-grid-pro/internals';
5
+ function getKeyPremium(params) {
6
+ return JSON.stringify([params.filterModel, params.sortModel, params.groupKeys, params.groupFields, params.start, params.end, params.aggregationModel]);
7
+ }
6
8
  const options = {
7
9
  cacheOptions: {
8
10
  getKey: getKeyPremium
@@ -12,8 +14,9 @@ export const useGridDataSourcePremium = (apiRef, props) => {
12
14
  const {
13
15
  api,
14
16
  strategyProcessor,
15
- events
16
- } = useGridDataSourceBase(apiRef, props, options);
17
+ events,
18
+ setStrategyAvailability
19
+ } = useGridDataSourceBasePro(apiRef, props, options);
17
20
  const aggregateRowRef = React.useRef({});
18
21
  const processDataSourceRows = React.useCallback(({
19
22
  params,
@@ -35,11 +38,11 @@ export const useGridDataSourcePremium = (apiRef, props) => {
35
38
  }, [apiRef]);
36
39
  const resolveGroupAggregation = React.useCallback((groupId, field) => {
37
40
  if (groupId === GRID_ROOT_GROUP_ID) {
38
- return props.unstable_dataSource?.getAggregatedValue?.(aggregateRowRef.current, field);
41
+ return props.dataSource?.getAggregatedValue?.(aggregateRowRef.current, field);
39
42
  }
40
43
  const row = apiRef.current.getRow(groupId);
41
- return props.unstable_dataSource?.getAggregatedValue?.(row, field);
42
- }, [apiRef, props.unstable_dataSource]);
44
+ return props.dataSource?.getAggregatedValue?.(row, field);
45
+ }, [apiRef, props.dataSource]);
43
46
  const privateApi = _extends({}, api.private, {
44
47
  resolveGroupAggregation
45
48
  });
@@ -50,4 +53,7 @@ export const useGridDataSourcePremium = (apiRef, props) => {
50
53
  Object.entries(events).forEach(([event, handler]) => {
51
54
  addEventHandler(apiRef, event, handler);
52
55
  });
56
+ React.useEffect(() => {
57
+ setStrategyAvailability();
58
+ }, [setStrategyAvailability]);
53
59
  };
@@ -0,0 +1,71 @@
1
+ import type * as Excel from 'exceljs';
2
+ import { GridFileExportOptions, GridExportFormat as GridExportFormatCommunity, GridExportExtension as GridExportExtensionCommunity } from '@mui/x-data-grid-pro';
3
+ export type GridExportFormat = GridExportFormatCommunity | 'excel';
4
+ export type GridExportExtension = GridExportExtensionCommunity | 'xlsx';
5
+ export interface GridExceljsProcessInput {
6
+ workbook: Excel.Workbook;
7
+ worksheet: Excel.Worksheet;
8
+ }
9
+ export interface ColumnsStylesInterface {
10
+ [field: string]: Partial<Excel.Style>;
11
+ }
12
+ /**
13
+ * The options to apply on the Excel export.
14
+ * @demos
15
+ * - [Excel export](/x/react-data-grid/export/#excel-export)
16
+ */
17
+ export interface GridExcelExportOptions extends GridFileExportOptions {
18
+ /**
19
+ * Function to return the Worker instance to be called.
20
+ * @returns {() => Worker} A Worker instance.
21
+ */
22
+ worker?: () => Worker;
23
+ /**
24
+ * Name given to the worksheet containing the columns valueOptions.
25
+ * valueOptions are added to this worksheet if they are provided as an array.
26
+ */
27
+ valueOptionsSheetName?: string;
28
+ /**
29
+ * Method called before adding the rows to the workbook.
30
+ * Not supported when `worker` is set.
31
+ * To use with web workers, use the option in `setupExcelExportWebWorker`.
32
+ * @param {GridExceljsProcessInput} processInput object containing the workbook and the worksheet.
33
+ * @returns {Promise<void>} A promise which resolves after processing the input.
34
+ * */
35
+ exceljsPreProcess?: (processInput: GridExceljsProcessInput) => Promise<void>;
36
+ /**
37
+ * Method called after adding the rows to the workbook.
38
+ * Not supported when `worker` is set.
39
+ * To use with web workers, use the option in `setupExcelExportWebWorker`.
40
+ * @param {GridExceljsProcessInput} processInput object containing the workbook and the worksheet.
41
+ * @returns {Promise<void>} A promise which resolves after processing the input.
42
+ * */
43
+ exceljsPostProcess?: (processInput: GridExceljsProcessInput) => Promise<void>;
44
+ /**
45
+ * Object mapping column field to Exceljs style
46
+ * */
47
+ columnsStyles?: ColumnsStylesInterface;
48
+ /**
49
+ * If `true`, the headers of the column groups will be added into the file.
50
+ * @default true
51
+ */
52
+ includeColumnGroupsHeaders?: boolean;
53
+ }
54
+ /**
55
+ * The excel export API interface that is available in the grid [[apiRef]].
56
+ */
57
+ export interface GridExcelExportApi {
58
+ /**
59
+ * Returns the grid data as an exceljs workbook.
60
+ * This method is used internally by `exportDataAsExcel`.
61
+ * @param {GridExcelExportOptions} options The options to apply on the export.
62
+ * @returns {Promise<Excel.Workbook>} The data in a exceljs workbook object.
63
+ */
64
+ getDataAsExcel: (options?: GridExcelExportOptions) => Promise<Excel.Workbook> | null;
65
+ /**
66
+ * Downloads and exports an Excel file of the grid's data.
67
+ * @param {GridExcelExportOptions} options The options to apply on the export.
68
+ * @returns {Promise<void>} A promise which resolves after exporting to Excel.
69
+ */
70
+ exportDataAsExcel: (options?: GridExcelExportOptions) => Promise<void>;
71
+ }
@@ -0,0 +1,2 @@
1
+ export * from "./gridExcelExportInterface.js";
2
+ export { setupExcelExportWebWorker } from "./serializer/setupExcelExportWebWorker.js";
@@ -1,2 +1,2 @@
1
1
  export * from "./gridExcelExportInterface.js";
2
- export { setupExcelExportWebWorker } from "./serializer/excelSerializer.js";
2
+ export { setupExcelExportWebWorker } from "./serializer/setupExcelExportWebWorker.js";
@@ -0,0 +1,40 @@
1
+ import type * as Excel from 'exceljs';
2
+ import { RefObject } from '@mui/x-internals/types';
3
+ import { GridRowId, GridColDef } from '@mui/x-data-grid-pro';
4
+ import { GridStateColDef } from '@mui/x-data-grid/internals';
5
+ import { ColumnsStylesInterface, GridExcelExportOptions } from "../gridExcelExportInterface.js";
6
+ import { GridPrivateApiPremium } from "../../../../models/gridApiPremium.js";
7
+ import { SerializedColumns, SerializedRow, ValueOptionsData } from "./utils.js";
8
+ export type { ExcelExportInitEvent } from './utils';
9
+ /**
10
+ * FIXME: This function mutates the colspan info, but colspan info assumes that the columns
11
+ * passed to it are always consistent. In this case, the exported columns may differ from the
12
+ * actual rendered columns.
13
+ * The caller of this function MUST call `resetColSpan()` before and after usage.
14
+ */
15
+ export declare const serializeRowUnsafe: (id: GridRowId, columns: GridStateColDef[], apiRef: RefObject<GridPrivateApiPremium>, defaultValueOptionsFormulae: {
16
+ [field: string]: {
17
+ address: string;
18
+ };
19
+ }, options: Pick<BuildExcelOptions, "escapeFormulas">) => SerializedRow;
20
+ export declare const serializeColumn: (column: GridColDef, columnsStyles: ColumnsStylesInterface) => {
21
+ key: string;
22
+ headerText: string;
23
+ width: number;
24
+ style: {
25
+ numFmt?: string | undefined;
26
+ font?: Partial<Excel.Font> | undefined;
27
+ alignment?: Partial<Excel.Alignment> | undefined;
28
+ protection?: Partial<Excel.Protection> | undefined;
29
+ border?: Partial<Excel.Borders> | undefined;
30
+ fill?: Excel.Fill | undefined;
31
+ };
32
+ };
33
+ export declare function serializeColumns(columns: GridStateColDef[], styles: ColumnsStylesInterface): SerializedColumns;
34
+ export declare function getDataForValueOptionsSheet(columns: GridStateColDef[], valueOptionsSheetName: string, api: GridPrivateApiPremium): Promise<ValueOptionsData>;
35
+ interface BuildExcelOptions extends Pick<GridExcelExportOptions, 'exceljsPreProcess' | 'exceljsPostProcess'>, Pick<Required<GridExcelExportOptions>, 'valueOptionsSheetName' | 'includeHeaders' | 'includeColumnGroupsHeaders' | 'escapeFormulas'> {
36
+ columns: GridStateColDef[];
37
+ rowIds: GridRowId[];
38
+ columnsStyles?: ColumnsStylesInterface;
39
+ }
40
+ export declare function buildExcel(options: BuildExcelOptions, apiRef: RefObject<GridPrivateApiPremium>): Promise<Excel.Workbook>;
@@ -2,27 +2,32 @@ import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import { GRID_DATE_COL_DEF, GRID_DATETIME_COL_DEF } from '@mui/x-data-grid-pro';
3
3
  import { isObject, isSingleSelectColDef, gridHasColSpanSelector } from '@mui/x-data-grid/internals';
4
4
  import { warnOnce } from '@mui/x-internals/warning';
5
- const getExcelJs = async () => {
6
- const excelJsModule = await import('exceljs');
7
- return excelJsModule.default ?? excelJsModule;
8
- };
9
- const getFormattedValueOptions = (colDef, row, valueOptions, api) => {
5
+ import { addColumnGroupingHeaders, addSerializedRowToWorksheet, createValueOptionsSheetIfNeeded, getExcelJs } from "./utils.js";
6
+ const getFormattedValueOptions = (colDef, row, valueOptions, api, callback) => {
10
7
  if (!colDef.valueOptions) {
11
- return [];
8
+ return;
12
9
  }
13
- let valueOptionsFormatted = valueOptions;
14
- if (colDef.valueFormatter) {
15
- valueOptionsFormatted = valueOptionsFormatted.map(option => {
10
+ const valueFormatter = colDef.valueFormatter;
11
+ for (let i = 0; i < valueOptions.length; i += 1) {
12
+ const option = valueOptions[i];
13
+ let value;
14
+ if (valueFormatter) {
16
15
  if (typeof option === 'object') {
17
- return option;
16
+ value = option.label;
17
+ } else {
18
+ value = String(colDef.valueFormatter(option, row, colDef, {
19
+ current: api
20
+ }));
18
21
  }
19
- return String(colDef.valueFormatter(option, row, colDef, {
20
- current: api
21
- }));
22
- });
22
+ } else {
23
+ value = typeof option === 'object' ? option.label : option;
24
+ }
25
+ callback(value, i);
23
26
  }
24
- return valueOptionsFormatted.map(option => typeof option === 'object' ? option.label : option);
25
27
  };
28
+ const commaRegex = /,/g;
29
+ const commaReplacement = 'CHAR(44)';
30
+
26
31
  /**
27
32
  * FIXME: This function mutates the colspan info, but colspan info assumes that the columns
28
33
  * passed to it are always consistent. In this case, the exported columns may differ from the
@@ -30,11 +35,15 @@ const getFormattedValueOptions = (colDef, row, valueOptions, api) => {
30
35
  * The caller of this function MUST call `resetColSpan()` before and after usage.
31
36
  */
32
37
  export const serializeRowUnsafe = (id, columns, apiRef, defaultValueOptionsFormulae, options) => {
33
- const row = {};
38
+ const serializedRow = {};
34
39
  const dataValidation = {};
35
40
  const mergedCells = [];
36
- const firstCellParams = apiRef.current.getCellParams(id, columns[0].field);
37
- const outlineLevel = firstCellParams.rowNode.depth;
41
+ const row = apiRef.current.getRow(id);
42
+ const rowNode = apiRef.current.getRowNode(id);
43
+ if (!row || !rowNode) {
44
+ throw new Error(`No row with id #${id} found`);
45
+ }
46
+ const outlineLevel = rowNode.depth;
38
47
  const hasColSpan = gridHasColSpanSelector(apiRef);
39
48
  if (hasColSpan) {
40
49
  // `colSpan` is only calculated for rendered rows, so we need to calculate it during export for every row
@@ -56,25 +65,32 @@ export const serializeRowUnsafe = (id, columns, apiRef, defaultValueOptionsFormu
56
65
  rightIndex: colIndex + colSpanInfo.cellProps.colSpan
57
66
  });
58
67
  }
59
- const cellParams = apiRef.current.getCellParams(id, column.field);
60
68
  let cellValue;
61
- switch (cellParams.colDef.type) {
69
+ switch (column.type) {
62
70
  case 'singleSelect':
63
71
  {
64
- const castColumn = cellParams.colDef;
72
+ const castColumn = column;
65
73
  if (typeof castColumn.valueOptions === 'function') {
66
74
  // If value option depends on the row, set specific options to the cell
67
75
  // This dataValidation is buggy with LibreOffice and does not allow to have coma
68
76
  const valueOptions = castColumn.valueOptions({
69
77
  id,
70
78
  row,
71
- field: cellParams.field
79
+ field: column.field
80
+ });
81
+ let formulae = '"';
82
+ getFormattedValueOptions(castColumn, row, valueOptions, apiRef.current, (value, index) => {
83
+ const formatted = value.toString().replace(commaRegex, commaReplacement);
84
+ formulae += formatted;
85
+ if (index < valueOptions.length - 1) {
86
+ formulae += ',';
87
+ }
72
88
  });
73
- const formattedValueOptions = getFormattedValueOptions(castColumn, row, valueOptions, apiRef.current);
89
+ formulae += '"';
74
90
  dataValidation[castColumn.field] = {
75
91
  type: 'list',
76
92
  allowBlank: true,
77
- formulae: [`"${formattedValueOptions.map(x => x.toString().replaceAll(',', 'CHAR(44)')).join(',')}"`]
93
+ formulae: [formulae]
78
94
  };
79
95
  } else {
80
96
  const address = defaultValueOptionsFormulae[column.field].address;
@@ -86,22 +102,22 @@ export const serializeRowUnsafe = (id, columns, apiRef, defaultValueOptionsFormu
86
102
  formulae: [address]
87
103
  };
88
104
  }
89
- const formattedValue = apiRef.current.getCellParams(id, castColumn.field).formattedValue;
105
+ const formattedValue = apiRef.current.getRowFormattedValue(row, castColumn);
90
106
  if (process.env.NODE_ENV !== 'production') {
91
- if (String(cellParams.formattedValue) === '[object Object]') {
107
+ if (String(formattedValue) === '[object Object]') {
92
108
  warnOnce(['MUI X: When the value of a field is an object or a `renderCell` is provided, the Excel export might not display the value correctly.', 'You can provide a `valueFormatter` with a string representation to be used.']);
93
109
  }
94
110
  }
95
111
  if (isObject(formattedValue)) {
96
- row[castColumn.field] = formattedValue?.label;
112
+ serializedRow[castColumn.field] = formattedValue?.label;
97
113
  } else {
98
- row[castColumn.field] = formattedValue;
114
+ serializedRow[castColumn.field] = formattedValue;
99
115
  }
100
116
  break;
101
117
  }
102
118
  case 'boolean':
103
119
  case 'number':
104
- cellValue = apiRef.current.getCellParams(id, column.field).value;
120
+ cellValue = apiRef.current.getRowValue(row, column);
105
121
  break;
106
122
  case 'date':
107
123
  case 'dateTime':
@@ -109,21 +125,21 @@ export const serializeRowUnsafe = (id, columns, apiRef, defaultValueOptionsFormu
109
125
  // Excel does not do any timezone conversion, so we create a date using UTC instead of local timezone
110
126
  // Solution from: https://github.com/exceljs/exceljs/issues/486#issuecomment-432557582
111
127
  // About Date.UTC(): https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/UTC#exemples
112
- const value = apiRef.current.getCellParams(id, column.field).value;
128
+ const value = apiRef.current.getRowValue(row, column);
113
129
  // value may be `undefined` in auto-generated grouping rows
114
130
  if (!value) {
115
131
  break;
116
132
  }
117
133
  const utcDate = new Date(Date.UTC(value.getFullYear(), value.getMonth(), value.getDate(), value.getHours(), value.getMinutes(), value.getSeconds()));
118
- row[column.field] = utcDate;
134
+ serializedRow[column.field] = utcDate;
119
135
  break;
120
136
  }
121
137
  case 'actions':
122
138
  break;
123
139
  default:
124
- cellValue = apiRef.current.getCellParams(id, column.field).formattedValue;
140
+ cellValue = apiRef.current.getRowFormattedValue(row, column);
125
141
  if (process.env.NODE_ENV !== 'production') {
126
- if (String(cellParams.formattedValue) === '[object Object]') {
142
+ if (String(cellValue) === '[object Object]') {
127
143
  warnOnce(['MUI X: When the value of a field is an object or a `renderCell` is provided, the Excel export might not display the value correctly.', 'You can provide a `valueFormatter` with a string representation to be used.']);
128
144
  }
129
145
  }
@@ -136,11 +152,11 @@ export const serializeRowUnsafe = (id, columns, apiRef, defaultValueOptionsFormu
136
152
  }
137
153
  }
138
154
  if (typeof cellValue !== 'undefined') {
139
- row[column.field] = cellValue;
155
+ serializedRow[column.field] = cellValue;
140
156
  }
141
157
  });
142
158
  return {
143
- row,
159
+ row: serializedRow,
144
160
  dataValidation,
145
161
  outlineLevel,
146
162
  mergedCells
@@ -169,120 +185,39 @@ export const serializeColumn = (column, columnsStyles) => {
169
185
  style: _extends({}, type && defaultColumnsStyles?.[type], columnsStyles?.[field])
170
186
  };
171
187
  };
172
- const addColumnGroupingHeaders = (worksheet, columns, columnGroupPaths, columnGroupDetails) => {
173
- const maxDepth = Math.max(...columns.map(({
174
- key
175
- }) => columnGroupPaths[key]?.length ?? 0));
176
- if (maxDepth === 0) {
177
- return;
178
- }
179
- for (let rowIndex = 0; rowIndex < maxDepth; rowIndex += 1) {
180
- const row = columns.map(({
181
- key
182
- }) => {
183
- const groupingPath = columnGroupPaths[key];
184
- if (groupingPath.length <= rowIndex) {
185
- return {
186
- groupId: null,
187
- parents: groupingPath
188
- };
189
- }
190
- return _extends({}, columnGroupDetails[groupingPath[rowIndex]], {
191
- parents: groupingPath.slice(0, rowIndex)
192
- });
193
- });
194
- const newRow = worksheet.addRow(row.map(group => group.groupId === null ? null : group?.headerName ?? group.groupId));
195
-
196
- // use `rowCount`, since worksheet can have additional rows added in `exceljsPreProcess`
197
- const lastRowIndex = newRow.worksheet.rowCount;
198
- let leftIndex = 0;
199
- let rightIndex = 1;
200
- while (rightIndex < columns.length) {
201
- const {
202
- groupId: leftGroupId,
203
- parents: leftParents
204
- } = row[leftIndex];
205
- const {
206
- groupId: rightGroupId,
207
- parents: rightParents
208
- } = row[rightIndex];
209
- const areInSameGroup = leftGroupId === rightGroupId && leftParents.length === rightParents.length && leftParents.every((leftParent, index) => rightParents[index] === leftParent);
210
- if (areInSameGroup) {
211
- rightIndex += 1;
212
- } else {
213
- if (rightIndex - leftIndex > 1) {
214
- worksheet.mergeCells(lastRowIndex, leftIndex + 1, lastRowIndex, rightIndex);
215
- }
216
- leftIndex = rightIndex;
217
- rightIndex += 1;
218
- }
219
- }
220
- if (rightIndex - leftIndex > 1) {
221
- worksheet.mergeCells(lastRowIndex, leftIndex + 1, lastRowIndex, rightIndex);
222
- }
223
- }
224
- };
225
188
  export function serializeColumns(columns, styles) {
226
189
  return columns.map(column => serializeColumn(column, styles));
227
190
  }
228
191
  export async function getDataForValueOptionsSheet(columns, valueOptionsSheetName, api) {
229
- const candidateColumns = columns.filter(column => isSingleSelectColDef(column) && Array.isArray(column.valueOptions));
230
-
231
192
  // Creates a temp worksheet to obtain the column letters
232
193
  const excelJS = await getExcelJs();
233
194
  const workbook = new excelJS.Workbook();
234
195
  const worksheet = workbook.addWorksheet('Sheet1');
235
- worksheet.columns = candidateColumns.map(column => ({
236
- key: column.field
237
- }));
238
- return candidateColumns.reduce((acc, column) => {
239
- const singleSelectColumn = column;
240
- const formattedValueOptions = getFormattedValueOptions(singleSelectColumn, {}, singleSelectColumn.valueOptions, api);
196
+ const record = {};
197
+ const worksheetColumns = [];
198
+ for (let i = 0; i < columns.length; i += 1) {
199
+ const column = columns[i];
200
+ const isCandidateColumn = isSingleSelectColDef(column) && Array.isArray(column.valueOptions);
201
+ if (!isCandidateColumn) {
202
+ continue;
203
+ }
204
+ worksheetColumns.push({
205
+ key: column.field
206
+ });
207
+ worksheet.columns = worksheetColumns;
241
208
  const header = column.headerName ?? column.field;
242
- const values = [header, ...formattedValueOptions];
209
+ const values = [header];
210
+ getFormattedValueOptions(column, {}, column.valueOptions, api, value => {
211
+ values.push(value);
212
+ });
243
213
  const letter = worksheet.getColumn(column.field).letter;
244
214
  const address = `${valueOptionsSheetName}!$${letter}$2:$${letter}$${values.length}`;
245
- acc[column.field] = {
215
+ record[column.field] = {
246
216
  values,
247
217
  address
248
218
  };
249
- return acc;
250
- }, {});
251
- }
252
- function addSerializedRowToWorksheet(serializedRow, worksheet) {
253
- const {
254
- row,
255
- dataValidation,
256
- outlineLevel,
257
- mergedCells
258
- } = serializedRow;
259
- const newRow = worksheet.addRow(row);
260
- Object.keys(dataValidation).forEach(field => {
261
- newRow.getCell(field).dataValidation = _extends({}, dataValidation[field]);
262
- });
263
- if (outlineLevel) {
264
- newRow.outlineLevel = outlineLevel;
265
219
  }
266
-
267
- // use `rowCount`, since worksheet can have additional rows added in `exceljsPreProcess`
268
- const lastRowIndex = newRow.worksheet.rowCount;
269
- mergedCells.forEach(mergedCell => {
270
- worksheet.mergeCells(lastRowIndex, mergedCell.leftIndex, lastRowIndex, mergedCell.rightIndex);
271
- });
272
- }
273
- async function createValueOptionsSheetIfNeeded(valueOptionsData, sheetName, workbook) {
274
- if (Object.keys(valueOptionsData).length === 0) {
275
- return;
276
- }
277
- const valueOptionsWorksheet = workbook.addWorksheet(sheetName);
278
- valueOptionsWorksheet.columns = Object.keys(valueOptionsData).map(key => ({
279
- key
280
- }));
281
- Object.entries(valueOptionsData).forEach(([field, {
282
- values
283
- }]) => {
284
- valueOptionsWorksheet.getColumn(field).values = values;
285
- });
220
+ return record;
286
221
  }
287
222
  export async function buildExcel(options, apiRef) {
288
223
  const {
@@ -331,50 +266,4 @@ export async function buildExcel(options, apiRef) {
331
266
  });
332
267
  }
333
268
  return workbook;
334
- }
335
- export function setupExcelExportWebWorker(workerOptions = {}) {
336
- // eslint-disable-next-line no-restricted-globals
337
- addEventListener('message', async event => {
338
- const {
339
- serializedColumns,
340
- serializedRows,
341
- options,
342
- valueOptionsSheetName,
343
- valueOptionsData,
344
- columnGroupDetails,
345
- columnGroupPaths
346
- } = event.data;
347
- const {
348
- exceljsPostProcess,
349
- exceljsPreProcess
350
- } = workerOptions;
351
- const excelJS = await getExcelJs();
352
- const workbook = new excelJS.Workbook();
353
- const worksheet = workbook.addWorksheet('Sheet1');
354
- worksheet.columns = serializedColumns;
355
- if (exceljsPreProcess) {
356
- await exceljsPreProcess({
357
- workbook,
358
- worksheet
359
- });
360
- }
361
- if (options.includeColumnGroupsHeaders) {
362
- addColumnGroupingHeaders(worksheet, serializedColumns, columnGroupPaths, columnGroupDetails);
363
- }
364
- const includeHeaders = options.includeHeaders ?? true;
365
- if (includeHeaders) {
366
- worksheet.addRow(serializedColumns.map(column => column.headerText));
367
- }
368
- createValueOptionsSheetIfNeeded(valueOptionsData, valueOptionsSheetName, workbook);
369
- serializedRows.forEach(serializedRow => {
370
- addSerializedRowToWorksheet(serializedRow, worksheet);
371
- });
372
- if (exceljsPostProcess) {
373
- await exceljsPostProcess({
374
- workbook,
375
- worksheet
376
- });
377
- }
378
- postMessage(await workbook.xlsx.writeBuffer());
379
- });
380
269
  }
@@ -0,0 +1,2 @@
1
+ import type { GridExcelExportOptions } from '../gridExcelExportInterface';
2
+ export declare function setupExcelExportWebWorker(workerOptions?: Pick<GridExcelExportOptions, 'exceljsPostProcess' | 'exceljsPreProcess'>): void;
@@ -0,0 +1,53 @@
1
+ import { addColumnGroupingHeaders, addSerializedRowToWorksheet, createValueOptionsSheetIfNeeded, getExcelJs } from "./utils.js";
2
+ export function setupExcelExportWebWorker(workerOptions = {}) {
3
+ // eslint-disable-next-line no-restricted-globals
4
+ addEventListener('message', async event => {
5
+ const {
6
+ namespace,
7
+ serializedColumns,
8
+ serializedRows,
9
+ options,
10
+ valueOptionsSheetName,
11
+ valueOptionsData,
12
+ columnGroupDetails,
13
+ columnGroupPaths
14
+ } = event.data;
15
+
16
+ // workers share the pub-sub channel namespace. Use this property to filter out messages.
17
+ if (namespace !== 'mui-x-data-grid-export') {
18
+ return;
19
+ }
20
+ const {
21
+ exceljsPostProcess,
22
+ exceljsPreProcess
23
+ } = workerOptions;
24
+ const excelJS = await getExcelJs();
25
+ const workbook = new excelJS.Workbook();
26
+ const worksheet = workbook.addWorksheet('Sheet1');
27
+ worksheet.columns = serializedColumns;
28
+ if (exceljsPreProcess) {
29
+ await exceljsPreProcess({
30
+ workbook,
31
+ worksheet
32
+ });
33
+ }
34
+ if (options.includeColumnGroupsHeaders) {
35
+ addColumnGroupingHeaders(worksheet, serializedColumns, columnGroupPaths, columnGroupDetails);
36
+ }
37
+ const includeHeaders = options.includeHeaders ?? true;
38
+ if (includeHeaders) {
39
+ worksheet.addRow(serializedColumns.map(column => column.headerText));
40
+ }
41
+ createValueOptionsSheetIfNeeded(valueOptionsData, valueOptionsSheetName, workbook);
42
+ serializedRows.forEach(serializedRow => {
43
+ addSerializedRowToWorksheet(serializedRow, worksheet);
44
+ });
45
+ if (exceljsPostProcess) {
46
+ await exceljsPostProcess({
47
+ workbook,
48
+ worksheet
49
+ });
50
+ }
51
+ postMessage(await workbook.xlsx.writeBuffer());
52
+ });
53
+ }
@@ -0,0 +1,36 @@
1
+ import type * as Excel from 'exceljs';
2
+ import type { GridColumnGroupLookup } from '@mui/x-data-grid/internals';
3
+ import type { GridExcelExportOptions } from '../gridExcelExportInterface';
4
+ export declare const getExcelJs: () => Promise<typeof Excel>;
5
+ export interface SerializedRow {
6
+ row: Record<string, undefined | number | boolean | string | Date>;
7
+ dataValidation: Record<string, Excel.DataValidation>;
8
+ outlineLevel: number;
9
+ mergedCells: {
10
+ leftIndex: number;
11
+ rightIndex: number;
12
+ }[];
13
+ }
14
+ export declare const addColumnGroupingHeaders: (worksheet: Excel.Worksheet, columns: SerializedColumns, columnGroupPaths: Record<string, string[]>, columnGroupDetails: GridColumnGroupLookup) => void;
15
+ export type SerializedColumns = Array<{
16
+ key: string;
17
+ width: number;
18
+ style: Partial<Excel.Style>;
19
+ headerText: string;
20
+ }>;
21
+ export type ValueOptionsData = Record<string, {
22
+ values: (string | number)[];
23
+ address: string;
24
+ }>;
25
+ export declare function addSerializedRowToWorksheet(serializedRow: SerializedRow, worksheet: Excel.Worksheet): void;
26
+ export declare function createValueOptionsSheetIfNeeded(valueOptionsData: ValueOptionsData, sheetName: string, workbook: Excel.Workbook): Promise<void>;
27
+ export interface ExcelExportInitEvent {
28
+ namespace?: string;
29
+ serializedColumns: SerializedColumns;
30
+ serializedRows: SerializedRow[];
31
+ valueOptionsSheetName: string;
32
+ columnGroupPaths: Record<string, string[]>;
33
+ columnGroupDetails: GridColumnGroupLookup;
34
+ valueOptionsData: ValueOptionsData;
35
+ options: Omit<GridExcelExportOptions, 'exceljsPreProcess' | 'exceljsPostProcess' | 'columnsStyles' | 'valueOptionsSheetName'>;
36
+ }