| 
									
										
										
										
											2024-06-25 19:43:47 +08:00
										 |  |  | import { useMemo } from 'react'; | 
					
						
							| 
									
										
										
										
											2023-03-30 18:50:35 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-04-03 19:04:54 +08:00
										 |  |  | import { selectors } from '@grafana/e2e-selectors'; | 
					
						
							| 
									
										
										
										
											2024-10-31 00:12:03 +08:00
										 |  |  | import { locationService } from '@grafana/runtime'; | 
					
						
							| 
									
										
										
										
											2023-03-30 18:50:35 +08:00
										 |  |  | import { Menu } from '@grafana/ui'; | 
					
						
							| 
									
										
										
										
											2023-04-20 22:35:29 +08:00
										 |  |  | import { t } from 'app/core/internationalization'; | 
					
						
							| 
									
										
										
										
											2024-12-06 23:01:51 +08:00
										 |  |  | import { DashboardModel } from 'app/features/dashboard/state/DashboardModel'; | 
					
						
							| 
									
										
										
										
											2023-03-30 18:50:35 +08:00
										 |  |  | import { | 
					
						
							|  |  |  |   getCopiedPanelPlugin, | 
					
						
							|  |  |  |   onAddLibraryPanel, | 
					
						
							|  |  |  |   onCreateNewPanel, | 
					
						
							|  |  |  |   onCreateNewRow, | 
					
						
							|  |  |  |   onPasteCopiedPanel, | 
					
						
							|  |  |  | } from 'app/features/dashboard/utils/dashboard'; | 
					
						
							| 
									
										
										
										
											2023-12-06 23:24:15 +08:00
										 |  |  | import { DashboardInteractions } from 'app/features/dashboard-scene/utils/interactions'; | 
					
						
							| 
									
										
										
										
											2023-04-27 18:11:19 +08:00
										 |  |  | import { useDispatch, useSelector } from 'app/types'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import { setInitialDatasource } from '../../state/reducers'; | 
					
						
							| 
									
										
										
										
											2023-03-30 18:50:35 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-08 18:16:08 +08:00
										 |  |  | export interface Props { | 
					
						
							| 
									
										
										
										
											2023-03-30 18:50:35 +08:00
										 |  |  |   dashboard: DashboardModel; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-08 18:16:08 +08:00
										 |  |  | const AddPanelMenu = ({ dashboard }: Props) => { | 
					
						
							| 
									
										
										
										
											2023-03-30 18:50:35 +08:00
										 |  |  |   const copiedPanelPlugin = useMemo(() => getCopiedPanelPlugin(), []); | 
					
						
							| 
									
										
										
										
											2023-04-27 18:11:19 +08:00
										 |  |  |   const dispatch = useDispatch(); | 
					
						
							|  |  |  |   const initialDatasource = useSelector((state) => state.dashboard.initialDatasource); | 
					
						
							| 
									
										
										
										
											2023-03-30 18:50:35 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   return ( | 
					
						
							|  |  |  |     <Menu> | 
					
						
							|  |  |  |       <Menu.Item | 
					
						
							|  |  |  |         key="add-visualisation" | 
					
						
							| 
									
										
										
										
											2023-06-08 18:16:08 +08:00
										 |  |  |         testId={selectors.pages.AddDashboard.itemButton('Add new visualization menu item')} | 
					
						
							| 
									
										
										
										
											2023-04-20 22:35:29 +08:00
										 |  |  |         label={t('dashboard.add-menu.visualization', 'Visualization')} | 
					
						
							| 
									
										
										
										
											2023-03-30 18:50:35 +08:00
										 |  |  |         onClick={() => { | 
					
						
							| 
									
										
										
										
											2023-04-27 18:11:19 +08:00
										 |  |  |           const id = onCreateNewPanel(dashboard, initialDatasource); | 
					
						
							| 
									
										
										
										
											2023-12-06 23:24:15 +08:00
										 |  |  |           DashboardInteractions.toolbarAddButtonClicked({ item: 'add_visualization' }); | 
					
						
							| 
									
										
										
										
											2023-03-30 18:50:35 +08:00
										 |  |  |           locationService.partial({ editPanel: id }); | 
					
						
							| 
									
										
										
										
											2023-04-27 18:11:19 +08:00
										 |  |  |           dispatch(setInitialDatasource(undefined)); | 
					
						
							| 
									
										
										
										
											2023-03-30 18:50:35 +08:00
										 |  |  |         }} | 
					
						
							|  |  |  |       /> | 
					
						
							|  |  |  |       <Menu.Item | 
					
						
							|  |  |  |         key="add-row" | 
					
						
							| 
									
										
										
										
											2023-06-08 18:16:08 +08:00
										 |  |  |         testId={selectors.pages.AddDashboard.itemButton('Add new row menu item')} | 
					
						
							| 
									
										
										
										
											2023-04-20 22:35:29 +08:00
										 |  |  |         label={t('dashboard.add-menu.row', 'Row')} | 
					
						
							| 
									
										
										
										
											2023-03-30 18:50:35 +08:00
										 |  |  |         onClick={() => { | 
					
						
							| 
									
										
										
										
											2023-12-06 23:24:15 +08:00
										 |  |  |           DashboardInteractions.toolbarAddButtonClicked({ item: 'add_row' }); | 
					
						
							| 
									
										
										
										
											2023-03-30 18:50:35 +08:00
										 |  |  |           onCreateNewRow(dashboard); | 
					
						
							|  |  |  |         }} | 
					
						
							|  |  |  |       /> | 
					
						
							|  |  |  |       <Menu.Item | 
					
						
							|  |  |  |         key="add-panel-lib" | 
					
						
							| 
									
										
										
										
											2023-06-08 18:16:08 +08:00
										 |  |  |         testId={selectors.pages.AddDashboard.itemButton('Add new panel from panel library menu item')} | 
					
						
							| 
									
										
										
										
											2023-04-20 22:35:29 +08:00
										 |  |  |         label={t('dashboard.add-menu.import', 'Import from library')} | 
					
						
							| 
									
										
										
										
											2023-03-30 18:50:35 +08:00
										 |  |  |         onClick={() => { | 
					
						
							| 
									
										
										
										
											2023-12-06 23:24:15 +08:00
										 |  |  |           DashboardInteractions.toolbarAddButtonClicked({ item: 'import_from_library' }); | 
					
						
							| 
									
										
										
										
											2023-03-30 18:50:35 +08:00
										 |  |  |           onAddLibraryPanel(dashboard); | 
					
						
							|  |  |  |         }} | 
					
						
							|  |  |  |       /> | 
					
						
							|  |  |  |       <Menu.Item | 
					
						
							|  |  |  |         key="add-panel-clipboard" | 
					
						
							| 
									
										
										
										
											2023-06-08 18:16:08 +08:00
										 |  |  |         testId={selectors.pages.AddDashboard.itemButton('Add new panel from clipboard menu item')} | 
					
						
							| 
									
										
										
										
											2023-04-20 22:35:29 +08:00
										 |  |  |         label={t('dashboard.add-menu.paste-panel', 'Paste panel')} | 
					
						
							| 
									
										
										
										
											2023-03-30 18:50:35 +08:00
										 |  |  |         onClick={() => { | 
					
						
							| 
									
										
										
										
											2023-12-06 23:24:15 +08:00
										 |  |  |           DashboardInteractions.toolbarAddButtonClicked({ item: 'paste_panel' }); | 
					
						
							| 
									
										
										
										
											2023-03-30 18:50:35 +08:00
										 |  |  |           onPasteCopiedPanel(dashboard, copiedPanelPlugin); | 
					
						
							|  |  |  |         }} | 
					
						
							|  |  |  |         disabled={!copiedPanelPlugin} | 
					
						
							|  |  |  |       /> | 
					
						
							|  |  |  |     </Menu> | 
					
						
							|  |  |  |   ); | 
					
						
							|  |  |  | }; | 
					
						
							| 
									
										
										
										
											2023-06-08 18:16:08 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | export default AddPanelMenu; |