@mskcc/carbon-react
Version:
Carbon react components for the MSKCC DSM
49 lines (43 loc) • 1.21 kB
JavaScript
/**
* MSKCC 2021, 2024
*/
;
Object.defineProperty(exports, '__esModule', { value: true });
var React = require('react');
/**
* @param {Element|Document|Window|object} [trigger=document] The element or ref which should trigger the Menu on right-click
* @returns {object} Props object to pass onto Menu component
*/
function useContextMenu() {
let trigger = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : document;
const [open, setOpen] = React.useState(false);
const [position, setPosition] = React.useState([0, 0]);
function openContextMenu(e) {
e.preventDefault();
const {
x,
y
} = e;
setPosition([x, y]);
setOpen(true);
}
function onClose() {
setOpen(false);
}
React.useEffect(() => {
const el = trigger?.current ?? trigger;
if (el && el instanceof Element || el instanceof Document || el instanceof Window) {
el.addEventListener('contextmenu', openContextMenu);
return () => {
el.removeEventListener('contextmenu', openContextMenu);
};
}
}, [trigger]);
return {
open,
x: position[0],
y: position[1],
onClose
};
}
exports["default"] = useContextMenu;