1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-10-27 11:02:16 +01:00
unleash.unleash/frontend/src/component/feature/FeatureView/FeatureOverview/ReleasePlan/ReleasePlanAddDialog.tsx
Gastón Fournier abe160eb7d
feat: Unleash v7 ESM migration (#9877)
We're migrating to ESM, which will allow us to import the latest
versions of our dependencies.

Co-Authored-By: Christopher Kolstad <chriswk@getunleash.io>
2025-05-14 09:47:12 +02:00

110 lines
3.8 KiB
TypeScript

import { Dialogue } from 'component/common/Dialogue/Dialogue';
import type { IReleasePlanTemplate } from 'interfaces/releasePlans';
import { ReleasePlan } from './ReleasePlan.tsx';
import { useReleasePlanPreview } from 'hooks/useReleasePlanPreview';
import { styled, Typography, Alert } from '@mui/material';
import { useFeature } from 'hooks/api/getters/useFeature/useFeature';
import { useReleasePlans } from 'hooks/api/getters/useReleasePlans/useReleasePlans';
const StyledReleasePlanContainer = styled('div')(({ theme }) => ({
margin: theme.spacing(2, 0),
}));
interface IReleasePlanAddDialogProps {
open: boolean;
setOpen: React.Dispatch<React.SetStateAction<boolean>>;
onConfirm: () => void;
template: IReleasePlanTemplate;
projectId: string;
featureName: string;
environment: string;
crProtected?: boolean;
}
export const ReleasePlanAddDialog = ({
open,
setOpen,
onConfirm,
template,
projectId,
featureName,
environment,
crProtected,
}: IReleasePlanAddDialogProps) => {
const { feature } = useFeature(projectId, featureName);
const { releasePlans } = useReleasePlans(
projectId,
featureName,
environment,
);
const activeReleasePlan = releasePlans[0];
const environmentData = feature?.environments.find(
({ name }) => name === environment,
);
const environmentEnabled = environmentData?.enabled;
const planPreview = useReleasePlanPreview(
template.id,
featureName,
environment,
);
const firstMilestone = planPreview.milestones[0];
return (
<Dialogue
title='Add release plan?'
open={open}
primaryButtonText={
crProtected ? 'Add suggestion to draft' : 'Add release plan'
}
secondaryButtonText='Cancel'
onClick={onConfirm}
onClose={() => setOpen(false)}
>
{activeReleasePlan && (
<Alert severity='error' sx={{ mb: 1 }}>
This feature environment currently has{' '}
<strong>{activeReleasePlan.name}</strong> -{' '}
<strong>{activeReleasePlan.milestones[0].name}</strong>
{environmentEnabled ? ' running' : ' paused'}. Adding a new
release plan will replace the existing release plan.
</Alert>
)}
{environmentEnabled ? (
<Alert severity='info'>
This environment is currently <strong>enabled</strong>.
{firstMilestone && (
<p>
The first milestone will be started as soon as the
release plan is added:{' '}
<strong>{planPreview.milestones[0].name}</strong>
</p>
)}
</Alert>
) : (
<Alert severity='warning'>
This environment is currently <strong>disabled</strong>.
<p>
Milestones will not start automatically after adding the
release plan. They will remain paused until the
environment is enabled.
</p>
</Alert>
)}
<StyledReleasePlanContainer>
<ReleasePlan plan={planPreview} readonly />
</StyledReleasePlanContainer>
{crProtected && (
<Typography sx={{ mt: 4 }}>
<strong>Adding</strong> release template{' '}
<strong>{template?.name}</strong> to{' '}
<strong>{featureName}</strong> in{' '}
<strong>{environment}</strong>.
</Typography>
)}
</Dialogue>
);
};