@grafana/ui
Version:
Grafana Components Library
44 lines (41 loc) • 1.28 kB
JavaScript
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
import { useState } from 'react';
import { ContextMenu } from './ContextMenu.mjs';
;
function resolveTriggerPosition(trigger) {
if (trigger instanceof Element) {
const rect = trigger.getBoundingClientRect();
return {
x: rect.left + rect.width / 2 + window.scrollX,
y: rect.top + rect.height / 2
};
}
if ("pageX" in trigger && "pageY" in trigger) {
return { x: trigger.pageX, y: trigger.pageY - window.scrollY };
}
return { x: trigger.x, y: trigger.y };
}
const WithContextMenu = ({ children, renderMenuItems, focusOnOpen = true }) => {
const [isMenuOpen, setIsMenuOpen] = useState(false);
const [menuPosition, setMenuPosition] = useState({ x: 0, y: 0 });
return /* @__PURE__ */ jsxs(Fragment, { children: [
children({
openMenu: (trigger) => {
setIsMenuOpen(true);
setMenuPosition(resolveTriggerPosition(trigger));
}
}),
isMenuOpen && /* @__PURE__ */ jsx(
ContextMenu,
{
onClose: () => setIsMenuOpen(false),
x: menuPosition.x,
y: menuPosition.y,
renderMenuItems,
focusOnOpen
}
)
] });
};
export { WithContextMenu };
//# sourceMappingURL=WithContextMenu.mjs.map