import { useMutation } from '@apollo/client'; import Menu from '@mui/material/Menu'; import MenuItem from '@mui/material/MenuItem'; import useEnqueueSnackbar from 'hooks/useEnqueueSnackbar'; import * as React from 'react'; import { Link } from 'react-router-dom'; import Can from 'components/Can'; import * as URLS from 'config/urls'; import { DELETE_FLOW } from 'graphql/mutations/delete-flow'; import { DUPLICATE_FLOW } from 'graphql/mutations/duplicate-flow'; import useFormatMessage from 'hooks/useFormatMessage'; export default function ContextMenu(props) { const { flowId, onClose, anchorEl } = props; const enqueueSnackbar = useEnqueueSnackbar(); const [deleteFlow] = useMutation(DELETE_FLOW); const [duplicateFlow] = useMutation(DUPLICATE_FLOW, { refetchQueries: ['GetFlows'], }); const formatMessage = useFormatMessage(); const onFlowDuplicate = React.useCallback(async () => { await duplicateFlow({ variables: { input: { id: flowId } }, }); enqueueSnackbar(formatMessage('flow.successfullyDuplicated'), { variant: 'success', SnackbarProps: { 'data-test': 'snackbar-duplicate-flow-success', }, }); onClose(); }, [flowId, onClose, duplicateFlow]); const onFlowDelete = React.useCallback(async () => { await deleteFlow({ variables: { input: { id: flowId } }, update: (cache) => { const flowCacheId = cache.identify({ __typename: 'Flow', id: flowId, }); cache.evict({ id: flowCacheId, }); }, }); enqueueSnackbar(formatMessage('flow.successfullyDeleted'), { variant: 'success', }); onClose(); }, [flowId, onClose, deleteFlow]); return ( {(allowed) => ( {formatMessage('flow.view')} )} {(allowed) => ( {formatMessage('flow.duplicate')} )} {(allowed) => ( {formatMessage('flow.delete')} )} ); }