import React, { FC, useContext } from 'react'; import { useRequiredPathParam } from 'hooks/useRequiredPathParam'; import { useChangeRequest } from 'hooks/api/getters/useChangeRequest/useChangeRequest'; import { ClickAwayListener, Grow, ListItemIcon, ListItemText, MenuItem, MenuList, Paper, Popper, } from '@mui/material'; import ArrowDropDownIcon from '@mui/icons-material/ArrowDropDown'; import PermissionButton from 'component/common/PermissionButton/PermissionButton'; import { useAuthUser } from 'hooks/api/getters/useAuth/useAuthUser'; import AccessContext from 'contexts/AccessContext'; type Action = { label: string; onSelect: () => void; icon: JSX.Element; }; export const MultiActionButton: FC<{ disabled: boolean; actions: Action[]; permission: string; }> = ({ disabled, children, actions, permission }) => { const { isAdmin } = useContext(AccessContext); const projectId = useRequiredPathParam('projectId'); const id = useRequiredPathParam('id'); const { user } = useAuthUser(); const { data } = useChangeRequest(projectId, id); const [open, setOpen] = React.useState(false); const anchorRef = React.useRef(null); const onToggle = () => { setOpen((prevOpen) => !prevOpen); }; const onClose = (event: Event) => { if (anchorRef.current?.contains(event.target as HTMLElement)) { return; } setOpen(false); }; const popperWidth = anchorRef.current ? anchorRef.current.offsetWidth : null; return ( } permission={permission} projectId={projectId} environmentId={data?.environment} > {children} {({ TransitionProps, placement }) => ( {actions.map( ({ label, onSelect, icon }) => ( {icon} {label} ), )} )} ); };