@jbrowse/core
Version:
JBrowse 2 core libraries used by plugins
25 lines (24 loc) • 1.51 kB
JavaScript
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
import { useEffect, useState } from 'react';
import { IconButton } from '@mui/material';
import CascadingMenu from "./CascadingMenu.js";
function CascadingMenuButton({ children, menuItems, closeAfterItemClick = true, stopPropagation, disabled, setOpen, ButtonComponent = IconButton, onClick: onClickExtra, anchorOrigin, transformOrigin, marginThreshold, ...rest }) {
const [anchorEl, setAnchorEl] = useState(null);
const open = Boolean(anchorEl);
useEffect(() => {
setOpen?.(open);
}, [open, setOpen]);
const isDisabled = disabled ?? (Array.isArray(menuItems) && menuItems.length === 0);
return (_jsxs(_Fragment, { children: [_jsx(ButtonComponent, { onClick: event => {
if (stopPropagation) {
event.stopPropagation();
}
setAnchorEl(event.currentTarget);
onClickExtra?.(event);
}, ...rest, disabled: isDisabled, children: children }), open ? (_jsx(CascadingMenu, { open: open, onClose: () => {
setAnchorEl(null);
}, anchorEl: anchorEl, anchorOrigin: anchorOrigin, transformOrigin: transformOrigin, marginThreshold: marginThreshold, menuItems: menuItems, closeAfterItemClick: closeAfterItemClick, onMenuItemClick: (_, callback) => {
callback();
} })) : null] }));
}
export default CascadingMenuButton;