mirror of
https://github.com/Unleash/unleash.git
synced 2025-04-15 01:16:22 +02:00
https://linear.app/unleash/issue/2-1167/multiple-strategies-breaking-the-environment-card https://linear.app/unleash/issue/2-1179/buttons-have-an-extra-space-if-the-icon-its-not-visible This fixes the broken UI when we have too many strategies. Before: <img width="1500" alt="image" src="https://github.com/Unleash/unleash/assets/14320932/ddf2f636-965c-4527-b879-dba5c16d9630"> After: <img width="1303" alt="image" src="https://github.com/Unleash/unleash/assets/14320932/852c20c9-c5f4-4aa5-b8c0-e5bc5286c572"> We also added the new strategy type to the tooltips: <img width="519" alt="image" src="https://github.com/Unleash/unleash/assets/14320932/117ee00f-f2a7-4ecb-8596-44486a2870a2"> <img width="422" alt="image" src="https://github.com/Unleash/unleash/assets/14320932/4281a48c-4b6e-4100-86e2-29dfe9ce4cec"> This also fixes an extra margin we caught on our `PermissionButton` when it had no endIcon set. Co-authored by: @daveleek --------- Co-authored-by: David Leek <david@getunleash.io>
128 lines
3.9 KiB
TypeScript
128 lines
3.9 KiB
TypeScript
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<Element>();
|
|
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 (
|
|
<StyledStrategyMenu onClick={event => event.stopPropagation()}>
|
|
<PermissionButton
|
|
permission={CREATE_FEATURE_STRATEGY}
|
|
projectId={projectId}
|
|
environmentId={environmentId}
|
|
onClick={openDefaultStrategyCreationModal}
|
|
aria-labelledby={popoverId}
|
|
variant={variant}
|
|
size={size}
|
|
sx={{ minWidth: matchWidth ? '282px' : 'auto' }}
|
|
>
|
|
{label}
|
|
</PermissionButton>
|
|
|
|
<StyledAdditionalMenuButton
|
|
permission={CREATE_FEATURE_STRATEGY}
|
|
projectId={projectId}
|
|
environmentId={environmentId}
|
|
onClick={openMoreStrategies}
|
|
aria-labelledby={popoverId}
|
|
variant="outlined"
|
|
size={size}
|
|
hideLockIcon
|
|
tooltipProps={{
|
|
title: 'More strategies',
|
|
}}
|
|
>
|
|
<MoreVert sx={theme => ({ margin: theme.spacing(0.25, 0) })} />
|
|
</StyledAdditionalMenuButton>
|
|
<Popover
|
|
id={popoverId}
|
|
open={isPopoverOpen}
|
|
anchorEl={anchor}
|
|
onClose={onClose}
|
|
onClick={onClose}
|
|
PaperProps={{
|
|
sx: theme => ({
|
|
paddingBottom: theme.spacing(1),
|
|
}),
|
|
}}
|
|
>
|
|
<FeatureStrategyMenuCards
|
|
projectId={projectId}
|
|
featureId={featureId}
|
|
environmentId={environmentId}
|
|
/>
|
|
</Popover>
|
|
</StyledStrategyMenu>
|
|
);
|
|
};
|