import React, { useState } from 'react'; import { useNavigate } from 'react-router-dom'; import PermissionButton, { IPermissionButtonProps, } from 'component/common/PermissionButton/PermissionButton'; import { CREATE_FEATURE_STRATEGY } from 'component/providers/AccessProvider/permissions'; import { Popover, styled } from '@mui/material'; import { FeatureStrategyMenuCards } from './FeatureStrategyMenuCards/FeatureStrategyMenuCards'; import { formatCreateStrategyPath } from '../FeatureStrategyCreate/FeatureStrategyCreate'; import { MoreVert } from '@mui/icons-material'; import { usePlausibleTracker } from 'hooks/usePlausibleTracker'; interface IFeatureStrategyMenuProps { label: string; projectId: string; featureId: string; environmentId: string; variant?: IPermissionButtonProps['variant']; matchWidth?: boolean; size?: IPermissionButtonProps['size']; } const StyledStrategyMenu = styled('div')({ flexShrink: 0, }); const StyledAdditionalMenuButton = styled(PermissionButton)(({ theme }) => ({ minWidth: 0, width: theme.spacing(4.5), alignItems: 'center', justifyContent: 'center', align: 'center', flexDirection: 'column', marginLeft: theme.spacing(1), })); export const FeatureStrategyMenu = ({ label, projectId, featureId, environmentId, variant, size, matchWidth, }: IFeatureStrategyMenuProps) => { const [anchor, setAnchor] = useState(); const navigate = useNavigate(); const { trackEvent } = usePlausibleTracker(); const isPopoverOpen = Boolean(anchor); const popoverId = isPopoverOpen ? 'FeatureStrategyMenuPopover' : undefined; const onClose = () => { setAnchor(undefined); }; const openDefaultStrategyCreationModal = (event: React.SyntheticEvent) => { trackEvent('strategy-add', { props: { buttonTitle: label, }, }); navigate(createStrategyPath); }; const openMoreStrategies = (event: React.SyntheticEvent) => { setAnchor(event.currentTarget); }; const createStrategyPath = formatCreateStrategyPath( projectId, featureId, environmentId, 'flexibleRollout', true ); return ( event.stopPropagation()}> {label} ({ margin: theme.spacing(0.25, 0) })} /> ({ paddingBottom: theme.spacing(1), }), }} > ); };