grafana/public/app/features/dashboard/dashgrid/PanelLinks.tsx
Ashley Harrison e0587dfb30
Chore: Replace deprecated usage of shape.borderRadius() (#72672)
* properly mark borderRadius() as deprecated, replace borderRadius() with default

* undo a couple of changes

* use radius.pill in FilterPill
2023-08-01 14:46:07 +01:00

58 lines
1.5 KiB
TypeScript

import { css } from '@emotion/css';
import React from 'react';
import { DataLink, GrafanaTheme2, LinkModel } from '@grafana/data';
import { Dropdown, Icon, Menu, ToolbarButton, useStyles2, PanelChrome } from '@grafana/ui';
interface Props {
panelLinks: DataLink[];
onShowPanelLinks: () => LinkModel[];
}
export function PanelLinks({ panelLinks, onShowPanelLinks }: Props) {
const styles = useStyles2(getStyles);
const getLinksContent = (): JSX.Element => {
const interpolatedLinks = onShowPanelLinks();
return (
<Menu>
{interpolatedLinks?.map((link, idx) => {
return <Menu.Item key={idx} label={link.title} url={link.href} target={link.target} onClick={link.onClick} />;
})}
</Menu>
);
};
if (panelLinks.length === 1) {
const linkModel = onShowPanelLinks()[0];
return (
<PanelChrome.TitleItem
href={linkModel.href}
onClick={linkModel.onClick}
target={linkModel.target}
title={linkModel.title}
>
<Icon name="external-link-alt" size="md" />
</PanelChrome.TitleItem>
);
} else {
return (
<Dropdown overlay={getLinksContent}>
<ToolbarButton icon="external-link-alt" iconSize="md" aria-label="panel links" className={styles.menuTrigger} />
</Dropdown>
);
}
}
const getStyles = (theme: GrafanaTheme2) => {
return {
menuTrigger: css({
height: '100%',
background: 'inherit',
border: 'none',
borderRadius: `${theme.shape.radius.default}`,
cursor: 'context-menu',
}),
};
};