@grafana/ui
Version:
Grafana Components Library
97 lines (94 loc) • 3.13 kB
JavaScript
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
import { css } from '@emotion/css';
import { useFloating, useDismiss, useInteractions } from '@floating-ui/react';
import { useMemo } from 'react';
import { selectors } from '@grafana/e2e-selectors';
import { useTheme2, useStyles2 } from '../../themes/ThemeContext.mjs';
import { getPositioningMiddleware } from '../../utils/floating.mjs';
import { Portal } from '../Portal/Portal.mjs';
import { VizTooltipFooter } from '../VizTooltip/VizTooltipFooter.mjs';
import { VizTooltipWrapper } from '../VizTooltip/VizTooltipWrapper.mjs';
;
const DataLinksActionsTooltip = ({ links, actions, value, coords, onTooltipClose }) => {
const theme = useTheme2();
const styles = useStyles2(getStyles);
const placement = "right-start";
const middleware = getPositioningMiddleware(placement);
const virtual = useMemo(() => {
const { clientX, clientY } = coords;
return {
getBoundingClientRect() {
return {
width: 0,
height: 0,
x: clientX,
y: clientY,
top: clientY,
left: clientX,
right: clientX,
bottom: clientY
};
}
};
}, [coords]);
const refCallback = (el) => {
refs.setFloating(el);
refs.setReference(virtual);
};
const { context, refs, floatingStyles } = useFloating({
open: true,
placement,
onOpenChange: onTooltipClose,
middleware
// whileElementsMounted: autoUpdate,
});
const dismiss = useDismiss(context);
const { getFloatingProps, getReferenceProps } = useInteractions([dismiss]);
if (links.length === 0 && !Boolean(actions == null ? void 0 : actions.length)) {
return null;
}
return /* @__PURE__ */ jsxs(Fragment, { children: [
value,
/* @__PURE__ */ jsx(Portal, { zIndex: theme.zIndex.tooltip, children: /* @__PURE__ */ jsx(
"div",
{
ref: refCallback,
...getReferenceProps(),
...getFloatingProps(),
style: floatingStyles,
className: styles.tooltipWrapper,
"data-testid": selectors.components.DataLinksActionsTooltip.tooltipWrapper,
children: /* @__PURE__ */ jsx(VizTooltipWrapper, { children: /* @__PURE__ */ jsx(VizTooltipFooter, { dataLinks: links, actions }) })
}
) })
] });
};
const renderSingleLink = (link, children, className) => {
return /* @__PURE__ */ jsx(
"a",
{
href: link.href,
onClick: link.onClick,
target: link.target,
title: link.title,
"data-testid": selectors.components.DataLinksContextMenu.singleLink,
className,
children
}
);
};
const getStyles = (theme) => {
return {
tooltipWrapper: css({
whiteSpace: "pre",
borderRadius: theme.shape.radius.default,
background: theme.colors.background.primary,
border: `1px solid ${theme.colors.border.weak}`,
boxShadow: theme.shadows.z3,
userSelect: "text",
fontSize: theme.typography.bodySmall.fontSize
})
};
};
export { DataLinksActionsTooltip, renderSingleLink };
//# sourceMappingURL=DataLinksActionsTooltip.mjs.map