@grafana/ui
Version:
Grafana Components Library
48 lines (43 loc) • 1.42 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var jsxRuntime = require('react/jsx-runtime');
var React = require('react');
var ContextMenu = require('./ContextMenu.cjs');
;
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] = React.useState(false);
const [menuPosition, setMenuPosition] = React.useState({ x: 0, y: 0 });
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
children({
openMenu: (trigger) => {
setIsMenuOpen(true);
setMenuPosition(resolveTriggerPosition(trigger));
}
}),
isMenuOpen && /* @__PURE__ */ jsxRuntime.jsx(
ContextMenu.ContextMenu,
{
onClose: () => setIsMenuOpen(false),
x: menuPosition.x,
y: menuPosition.y,
renderMenuItems,
focusOnOpen
}
)
] });
};
exports.WithContextMenu = WithContextMenu;
//# sourceMappingURL=WithContextMenu.cjs.map