import { useMemo } from 'react'; import { selectors } from '@grafana/e2e-selectors'; import { t } from '@grafana/i18n'; import { locationService } from '@grafana/runtime'; import { Menu } from '@grafana/ui'; import { DashboardModel } from 'app/features/dashboard/state/DashboardModel'; import { getCopiedPanelPlugin, onAddLibraryPanel, onCreateNewPanel, onCreateNewRow, onPasteCopiedPanel, } from 'app/features/dashboard/utils/dashboard'; import { DashboardInteractions } from 'app/features/dashboard-scene/utils/interactions'; import { useDispatch, useSelector } from 'app/types'; import { setInitialDatasource } from '../../state/reducers'; export interface Props { dashboard: DashboardModel; } const AddPanelMenu = ({ dashboard }: Props) => { const copiedPanelPlugin = useMemo(() => getCopiedPanelPlugin(), []); const dispatch = useDispatch(); const initialDatasource = useSelector((state) => state.dashboard.initialDatasource); return ( { const id = onCreateNewPanel(dashboard, initialDatasource); DashboardInteractions.toolbarAddButtonClicked({ item: 'add_visualization' }); locationService.partial({ editPanel: id }); dispatch(setInitialDatasource(undefined)); }} /> { DashboardInteractions.toolbarAddButtonClicked({ item: 'add_row' }); onCreateNewRow(dashboard); }} /> { DashboardInteractions.toolbarAddButtonClicked({ item: 'import_from_library' }); onAddLibraryPanel(dashboard); }} /> { DashboardInteractions.toolbarAddButtonClicked({ item: 'paste_panel' }); onPasteCopiedPanel(dashboard, copiedPanelPlugin); }} disabled={!copiedPanelPlugin} /> ); }; export default AddPanelMenu;