import { PluginExtension, PluginExtensionLink, SelectableValue, locationUtil } from '@grafana/data'; import { isPluginExtensionLink, locationService } from '@grafana/runtime'; import { Button, ButtonGroup, ButtonSelect, Modal, Stack, ToolbarButton } from '@grafana/ui'; import { testIds } from '../../testIds'; import { ReactElement, useMemo, useState } from 'react'; type Props = { extensions: PluginExtension[]; }; export function ActionButton(props: Props): ReactElement { const options = useExtensionsAsOptions(props.extensions); const [extension, setExtension] = useState(); if (options.length === 0) { return ; } return ( <> alert('You triggered the default action')}> Run default action { const extension = option.value; if (isPluginExtensionLink(extension)) { if (extension.path) { return setExtension(extension); } if (extension.onClick) { return extension.onClick(); } } }} /> {extension && extension?.path && ( setExtension(undefined)} /> )} ); } function useExtensionsAsOptions(extensions: PluginExtension[]): Array> { return useMemo(() => { return extensions.reduce((options: Array>, extension) => { if (isPluginExtensionLink(extension)) { options.push({ label: extension.title, title: extension.title, value: extension, }); } return options; }, []); }, [extensions]); } type LinkModelProps = { onDismiss: () => void; title: string; path: string; }; export function LinkModal(props: LinkModelProps): ReactElement { const { onDismiss, title, path } = props; const openInNewTab = () => { global.open(locationUtil.assureBaseUrl(path), '_blank'); onDismiss(); }; const openInCurrentTab = () => locationService.push(path); return (

Do you want to proceed in the current tab or open a new tab?

); }