From 123ca034ee8c0956785cf150c030123ac0643be1 Mon Sep 17 00:00:00 2001 From: Jaanus Sellin Date: Mon, 24 Nov 2025 12:15:31 +0200 Subject: [PATCH] feat: split milestone paused with progression paused (#11015) --- .../Changes/Change/MilestoneListRenderer.tsx | 5 ++++- .../ReleasePlanMilestone.tsx | 2 +- .../ReleasePlanMilestoneStatus.tsx | 14 ++++++++++---- .../MilestoneAutomation.tsx | 2 +- .../milestoneStatusUtils.ts | 18 ++++++++++++------ .../hooks/useMilestoneProgressionInfo.ts | 6 +++++- 6 files changed, 33 insertions(+), 14 deletions(-) diff --git a/frontend/src/component/changeRequest/ChangeRequest/Changes/Change/MilestoneListRenderer.tsx b/frontend/src/component/changeRequest/ChangeRequest/Changes/Change/MilestoneListRenderer.tsx index 6ce7492ca1..4399790476 100644 --- a/frontend/src/component/changeRequest/ChangeRequest/Changes/Change/MilestoneListRenderer.tsx +++ b/frontend/src/component/changeRequest/ChangeRequest/Changes/Change/MilestoneListRenderer.tsx @@ -37,7 +37,10 @@ const MilestoneListRendererCore = ({ onUpdateAutomation, onDeleteAutomation, }: MilestoneListRendererCoreProps) => { - const status: MilestoneStatus = { type: 'not-started' }; + const status: MilestoneStatus = { + type: 'not-started', + progression: 'active', + }; return ( <> diff --git a/frontend/src/component/feature/FeatureView/FeatureOverview/ReleasePlan/ReleasePlanMilestone/ReleasePlanMilestone.tsx b/frontend/src/component/feature/FeatureView/FeatureOverview/ReleasePlan/ReleasePlanMilestone/ReleasePlanMilestone.tsx index c57c24ec55..d7af87dba5 100644 --- a/frontend/src/component/feature/FeatureView/FeatureOverview/ReleasePlan/ReleasePlanMilestone/ReleasePlanMilestone.tsx +++ b/frontend/src/component/feature/FeatureView/FeatureOverview/ReleasePlan/ReleasePlanMilestone/ReleasePlanMilestone.tsx @@ -109,7 +109,7 @@ interface IReleasePlanMilestoneProps { export const ReleasePlanMilestone = ({ milestone, - status = { type: 'not-started' }, + status = { type: 'not-started', progression: 'active' }, onStartMilestone, readonly, automationSection, diff --git a/frontend/src/component/feature/FeatureView/FeatureOverview/ReleasePlan/ReleasePlanMilestone/ReleasePlanMilestoneStatus.tsx b/frontend/src/component/feature/FeatureView/FeatureOverview/ReleasePlan/ReleasePlanMilestone/ReleasePlanMilestoneStatus.tsx index 717bd7984c..93e427bb1a 100644 --- a/frontend/src/component/feature/FeatureView/FeatureOverview/ReleasePlan/ReleasePlanMilestone/ReleasePlanMilestoneStatus.tsx +++ b/frontend/src/component/feature/FeatureView/FeatureOverview/ReleasePlan/ReleasePlanMilestone/ReleasePlanMilestoneStatus.tsx @@ -4,11 +4,17 @@ import PauseCircleIcon from '@mui/icons-material/PauseCircle'; import TripOriginIcon from '@mui/icons-material/TripOrigin'; import { useUiFlag } from 'hooks/useUiFlag'; +export type MilestoneProgressionStatus = 'paused' | 'active'; + export type MilestoneStatus = - | { type: 'not-started'; scheduledAt?: Date } - | { type: 'active' } - | { type: 'paused' } - | { type: 'completed' }; + | { + type: 'not-started'; + scheduledAt?: Date; + progression: MilestoneProgressionStatus; + } + | { type: 'active'; progression: MilestoneProgressionStatus } + | { type: 'paused'; progression: MilestoneProgressionStatus } + | { type: 'completed'; progression: MilestoneProgressionStatus }; const BaseStatusButton = styled('button')<{ disabled?: boolean }>( ({ theme, disabled }) => ({ diff --git a/frontend/src/component/feature/FeatureView/FeatureOverview/ReleasePlan/ReleasePlanMilestoneItem/MilestoneAutomation.tsx b/frontend/src/component/feature/FeatureView/FeatureOverview/ReleasePlan/ReleasePlanMilestoneItem/MilestoneAutomation.tsx index 174f8446c7..b62bd6a4a1 100644 --- a/frontend/src/component/feature/FeatureView/FeatureOverview/ReleasePlan/ReleasePlanMilestoneItem/MilestoneAutomation.tsx +++ b/frontend/src/component/feature/FeatureView/FeatureOverview/ReleasePlan/ReleasePlanMilestoneItem/MilestoneAutomation.tsx @@ -64,7 +64,7 @@ export const MilestoneAutomation = ({ Deleted in draft ) : hasPendingChange ? ( Modified in draft - ) : status?.type === 'paused' ? ( + ) : status?.progression === 'paused' ? ( }> Paused diff --git a/frontend/src/component/feature/FeatureView/FeatureOverview/ReleasePlan/ReleasePlanMilestoneItem/milestoneStatusUtils.ts b/frontend/src/component/feature/FeatureView/FeatureOverview/ReleasePlan/ReleasePlanMilestoneItem/milestoneStatusUtils.ts index 6186aeef02..3a3bfe4f1e 100644 --- a/frontend/src/component/feature/FeatureView/FeatureOverview/ReleasePlan/ReleasePlanMilestoneItem/milestoneStatusUtils.ts +++ b/frontend/src/component/feature/FeatureView/FeatureOverview/ReleasePlan/ReleasePlanMilestoneItem/milestoneStatusUtils.ts @@ -1,5 +1,8 @@ import type { IReleasePlanMilestone } from 'interfaces/releasePlans'; -import type { MilestoneStatus } from '../ReleasePlanMilestone/ReleasePlanMilestoneStatus.tsx'; +import type { + MilestoneStatus, + MilestoneProgressionStatus, +} from '../ReleasePlanMilestone/ReleasePlanMilestoneStatus.tsx'; import { calculateMilestoneStartTime } from '../utils/calculateMilestoneStartTime.js'; export const calculateMilestoneStatus = ( @@ -10,16 +13,18 @@ export const calculateMilestoneStatus = ( environmentIsDisabled: boolean | undefined, allMilestones: IReleasePlanMilestone[], ): MilestoneStatus => { - if (milestone.pausedAt) { - return { type: 'paused' }; - } + const progression: MilestoneProgressionStatus = milestone.pausedAt + ? 'paused' + : 'active'; if (milestone.id === activeMilestoneId) { - return environmentIsDisabled ? { type: 'paused' } : { type: 'active' }; + return environmentIsDisabled + ? { type: 'paused', progression } + : { type: 'active', progression }; } if (index < activeIndex) { - return { type: 'completed' }; + return { type: 'completed', progression }; } const scheduledAt = calculateMilestoneStartTime( @@ -31,5 +36,6 @@ export const calculateMilestoneStatus = ( return { type: 'not-started', scheduledAt: scheduledAt || undefined, + progression, }; }; diff --git a/frontend/src/component/feature/FeatureView/FeatureOverview/ReleasePlan/hooks/useMilestoneProgressionInfo.ts b/frontend/src/component/feature/FeatureView/FeatureOverview/ReleasePlan/hooks/useMilestoneProgressionInfo.ts index 2f986f3769..348ee7b310 100644 --- a/frontend/src/component/feature/FeatureView/FeatureOverview/ReleasePlan/hooks/useMilestoneProgressionInfo.ts +++ b/frontend/src/component/feature/FeatureView/FeatureOverview/ReleasePlan/hooks/useMilestoneProgressionInfo.ts @@ -8,7 +8,11 @@ export const useMilestoneProgressionInfo = ( status?: MilestoneStatus, ) => { const { locationSettings } = useLocationSettings(); - if (!status || status.type !== 'active') { + if ( + !status || + status.type !== 'active' || + status.progression === 'paused' + ) { return null; }