@grafana/ui
Version:
Grafana Components Library
63 lines (60 loc) • 2.13 kB
JavaScript
import { jsx } from 'react/jsx-runtime';
import { css } from '@emotion/css';
import { selectors } from '@grafana/e2e-selectors';
import { useStyles2 } from '../../themes/ThemeContext.mjs';
import { linkModelToContextMenuItems } from '../../utils/dataLinks.mjs';
import { WithContextMenu } from '../ContextMenu/WithContextMenu.mjs';
import { MenuGroup } from '../Menu/MenuGroup.mjs';
import { MenuItem } from '../Menu/MenuItem.mjs';
;
const DataLinksContextMenu = ({ children, links, style }) => {
const styles = useStyles2(getStyles);
const itemsGroup = [
{ items: linkModelToContextMenuItems(links), label: Boolean(links().length) ? "Data links" : "" }
];
const linksCounter = itemsGroup[0].items.length;
const renderMenuGroupItems = () => {
return itemsGroup.map((group, groupIdx) => /* @__PURE__ */ jsx(MenuGroup, { label: group.label, children: (group.items || []).map((item, itemIdx) => /* @__PURE__ */ jsx(
MenuItem,
{
url: item.url,
label: item.label,
target: item.target,
icon: item.icon,
active: item.active,
onClick: item.onClick,
className: styles.itemWrapper
},
`${group.label}-${groupIdx}-${itemIdx}}`
)) }, `${group.label}${groupIdx}`));
};
const targetClassName = css({
cursor: "context-menu"
});
if (linksCounter > 1) {
return /* @__PURE__ */ jsx(WithContextMenu, { renderMenuItems: renderMenuGroupItems, children: ({ openMenu }) => {
return children({ openMenu, targetClassName });
} });
} else {
const linkModel = links()[0];
return /* @__PURE__ */ jsx(
"a",
{
href: linkModel.href,
onClick: linkModel.onClick,
target: linkModel.target,
title: linkModel.title,
style: { ...style, overflow: "hidden", display: "flex" },
"data-testid": selectors.components.DataLinksContextMenu.singleLink,
children: children({})
}
);
}
};
const getStyles = (theme) => ({
itemWrapper: css({
fontSize: 12
})
});
export { DataLinksContextMenu };
//# sourceMappingURL=DataLinksContextMenu.mjs.map