mirror of
https://github.com/Unleash/unleash.git
synced 2025-10-27 11:02:16 +01:00
feat: add milestone progression automation UI (#10743)
This commit is contained in:
parent
bade23974e
commit
ce1fb144d7
@ -1,5 +1,6 @@
|
|||||||
import Delete from '@mui/icons-material/Delete';
|
import Delete from '@mui/icons-material/Delete';
|
||||||
import { styled } from '@mui/material';
|
import Add from '@mui/icons-material/Add';
|
||||||
|
import { styled, IconButton, Button } from '@mui/material';
|
||||||
import { DELETE_FEATURE_STRATEGY } from '@server/types/permissions';
|
import { DELETE_FEATURE_STRATEGY } from '@server/types/permissions';
|
||||||
import PermissionIconButton from 'component/common/PermissionIconButton/PermissionIconButton';
|
import PermissionIconButton from 'component/common/PermissionIconButton/PermissionIconButton';
|
||||||
import { useReleasePlansApi } from 'hooks/api/actions/useReleasePlansApi/useReleasePlansApi';
|
import { useReleasePlansApi } from 'hooks/api/actions/useReleasePlansApi/useReleasePlansApi';
|
||||||
@ -22,6 +23,7 @@ import { RemoveReleasePlanChangeRequestDialog } from './ChangeRequest/RemoveRele
|
|||||||
import { StartMilestoneChangeRequestDialog } from './ChangeRequest/StartMilestoneChangeRequestDialog.tsx';
|
import { StartMilestoneChangeRequestDialog } from './ChangeRequest/StartMilestoneChangeRequestDialog.tsx';
|
||||||
import { usePlausibleTracker } from 'hooks/usePlausibleTracker';
|
import { usePlausibleTracker } from 'hooks/usePlausibleTracker';
|
||||||
import { Truncator } from 'component/common/Truncator/Truncator';
|
import { Truncator } from 'component/common/Truncator/Truncator';
|
||||||
|
import { useUiFlag } from 'hooks/useUiFlag';
|
||||||
|
|
||||||
const StyledContainer = styled('div')(({ theme }) => ({
|
const StyledContainer = styled('div')(({ theme }) => ({
|
||||||
padding: theme.spacing(2),
|
padding: theme.spacing(2),
|
||||||
@ -69,12 +71,47 @@ const StyledBody = styled('div')(({ theme }) => ({
|
|||||||
}));
|
}));
|
||||||
|
|
||||||
const StyledConnection = styled('div')(({ theme }) => ({
|
const StyledConnection = styled('div')(({ theme }) => ({
|
||||||
|
width: 4,
|
||||||
|
height: theme.spacing(6),
|
||||||
|
backgroundColor: theme.palette.divider,
|
||||||
|
marginLeft: theme.spacing(3.25),
|
||||||
|
}));
|
||||||
|
|
||||||
|
const StyledConnectionSimple = styled('div')(({ theme }) => ({
|
||||||
width: 4,
|
width: 4,
|
||||||
height: theme.spacing(2),
|
height: theme.spacing(2),
|
||||||
backgroundColor: theme.palette.divider,
|
backgroundColor: theme.palette.divider,
|
||||||
marginLeft: theme.spacing(3.25),
|
marginLeft: theme.spacing(3.25),
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
const StyledConnectionContainer = styled('div')(({ theme }) => ({
|
||||||
|
position: 'relative',
|
||||||
|
display: 'flex',
|
||||||
|
alignItems: 'center',
|
||||||
|
}));
|
||||||
|
|
||||||
|
const StyledAddAutomationIconButton = styled(IconButton)(({ theme }) => ({
|
||||||
|
position: 'absolute',
|
||||||
|
left: theme.spacing(2),
|
||||||
|
top: '12px',
|
||||||
|
width: 24,
|
||||||
|
height: 24,
|
||||||
|
border: `1px solid ${theme.palette.primary.main}`,
|
||||||
|
backgroundColor: theme.palette.background.elevation2,
|
||||||
|
zIndex: 1,
|
||||||
|
'& svg': {
|
||||||
|
fontSize: 16,
|
||||||
|
},
|
||||||
|
}));
|
||||||
|
|
||||||
|
const StyledAddAutomationButton = styled(Button)(({ theme }) => ({
|
||||||
|
marginLeft: theme.spacing(3),
|
||||||
|
textTransform: 'none',
|
||||||
|
fontWeight: theme.typography.fontWeightBold,
|
||||||
|
padding: 0,
|
||||||
|
minWidth: 'auto',
|
||||||
|
}));
|
||||||
|
|
||||||
interface IReleasePlanProps {
|
interface IReleasePlanProps {
|
||||||
plan: IReleasePlan;
|
plan: IReleasePlan;
|
||||||
environmentIsDisabled?: boolean;
|
environmentIsDisabled?: boolean;
|
||||||
@ -118,6 +155,7 @@ export const ReleasePlan = ({
|
|||||||
const { addChange } = useChangeRequestApi();
|
const { addChange } = useChangeRequestApi();
|
||||||
const { refetch: refetchChangeRequests } =
|
const { refetch: refetchChangeRequests } =
|
||||||
usePendingChangeRequests(projectId);
|
usePendingChangeRequests(projectId);
|
||||||
|
const milestoneProgressionsEnabled = useUiFlag('milestoneProgression');
|
||||||
|
|
||||||
const onAddRemovePlanChangesConfirm = async () => {
|
const onAddRemovePlanChangesConfirm = async () => {
|
||||||
await addChange(projectId, environment, {
|
await addChange(projectId, environment, {
|
||||||
@ -276,7 +314,23 @@ export const ReleasePlan = ({
|
|||||||
/>
|
/>
|
||||||
<ConditionallyRender
|
<ConditionallyRender
|
||||||
condition={index < milestones.length - 1}
|
condition={index < milestones.length - 1}
|
||||||
show={<StyledConnection />}
|
show={
|
||||||
|
<ConditionallyRender
|
||||||
|
condition={milestoneProgressionsEnabled}
|
||||||
|
show={
|
||||||
|
<StyledConnectionContainer>
|
||||||
|
<StyledConnection />
|
||||||
|
<StyledAddAutomationIconButton color='primary'>
|
||||||
|
<Add />
|
||||||
|
</StyledAddAutomationIconButton>
|
||||||
|
<StyledAddAutomationButton color='primary'>
|
||||||
|
Add automation
|
||||||
|
</StyledAddAutomationButton>
|
||||||
|
</StyledConnectionContainer>
|
||||||
|
}
|
||||||
|
elseShow={<StyledConnectionSimple />}
|
||||||
|
/>
|
||||||
|
}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
))}
|
))}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user