From 715119741b4e331dec74b05f88e595fdf6af7d90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nuno=20G=C3=B3is?= Date: Wed, 15 Oct 2025 09:21:23 +0100 Subject: [PATCH] fix: hide enable strategy dialog when there are release plans (#10796) https://linear.app/unleash/issue/2-3953/fix-enable-environment-modal-when-there-are-release-plans Prevents the "environment needs at least one enabled strategy" dialog from showing up if you have added a release plan. This relies on the new `featureReleasePlans` feature flag. PS: Maybe we should revisit this dialog in the future. We don't usually see it, and maybe it should trigger the new "add strategy" modal? image --- .../FeatureOverviewEnvironmentToggle.tsx | 8 +++++++- .../FeatureToggleCell/FeatureToggleCell.tsx | 1 + .../ProjectFeatureToggles.types.ts | 1 + .../FeatureToggleSwitch/FeatureToggleSwitch.types.ts | 1 + .../FeatureToggleSwitch/createFeatureToggleCell.tsx | 1 + .../FeatureToggleSwitch/useFeatureToggleSwitch.tsx | 3 ++- 6 files changed, 13 insertions(+), 2 deletions(-) diff --git a/frontend/src/component/feature/FeatureView/FeatureOverview/FeatureOverviewEnvironments/FeatureOverviewEnvironment/EnvironmentHeader/FeatureOverviewEnvironmentToggle/FeatureOverviewEnvironmentToggle.tsx b/frontend/src/component/feature/FeatureView/FeatureOverview/FeatureOverviewEnvironments/FeatureOverviewEnvironment/EnvironmentHeader/FeatureOverviewEnvironmentToggle/FeatureOverviewEnvironmentToggle.tsx index b55994b957..e35a6a2225 100644 --- a/frontend/src/component/feature/FeatureView/FeatureOverview/FeatureOverviewEnvironments/FeatureOverviewEnvironment/EnvironmentHeader/FeatureOverviewEnvironmentToggle/FeatureOverviewEnvironmentToggle.tsx +++ b/frontend/src/component/feature/FeatureView/FeatureOverview/FeatureOverviewEnvironments/FeatureOverviewEnvironment/EnvironmentHeader/FeatureOverviewEnvironmentToggle/FeatureOverviewEnvironmentToggle.tsx @@ -23,13 +23,18 @@ export const FeatureOverviewEnvironmentToggle = ({ }: FeatureOverviewEnvironmentToggleProps) => { const projectId = useRequiredPathParam('projectId'); const featureId = useRequiredPathParam('featureId'); - const { refetchFeature } = useFeature(projectId, featureId); + const { feature, refetchFeature } = useFeature(projectId, featureId); const { isChangeRequestConfigured } = useChangeRequestsEnabled(projectId); const { onToggle: onFeatureToggle, modals: featureToggleModals } = useFeatureToggleSwitch(projectId); + const hasReleasePlans = Boolean( + feature.environments.find((env) => env.name === name)?.releasePlans + ?.length, + ); + const onToggle = (newState: boolean, onRollback: () => void) => onFeatureToggle(newState, { projectId, @@ -40,6 +45,7 @@ export const FeatureOverviewEnvironmentToggle = ({ hasEnabledStrategies: strategies.some( (strategy) => !strategy.disabled, ), + hasReleasePlans, isChangeRequestEnabled: isChangeRequestConfigured(name), onRollback, onSuccess: refetchFeature, diff --git a/frontend/src/component/project/Project/PaginatedProjectFeatureToggles/FeatureToggleCell/FeatureToggleCell.tsx b/frontend/src/component/project/Project/PaginatedProjectFeatureToggles/FeatureToggleCell/FeatureToggleCell.tsx index 260356de69..17f9bca4f0 100644 --- a/frontend/src/component/project/Project/PaginatedProjectFeatureToggles/FeatureToggleCell/FeatureToggleCell.tsx +++ b/frontend/src/component/project/Project/PaginatedProjectFeatureToggles/FeatureToggleCell/FeatureToggleCell.tsx @@ -65,6 +65,7 @@ const FeatureToggleCellComponent = ({ environmentName: environment?.name || '', environmentType: environment?.type, hasStrategies: environment?.hasStrategies, + hasReleasePlans: Boolean(environment?.releasePlans?.length), hasEnabledStrategies: environment?.hasEnabledStrategies, isChangeRequestEnabled, onRollback, diff --git a/frontend/src/component/project/Project/PaginatedProjectFeatureToggles/ProjectFeatureToggles.types.ts b/frontend/src/component/project/Project/PaginatedProjectFeatureToggles/ProjectFeatureToggles.types.ts index b863232002..fe4159cca3 100644 --- a/frontend/src/component/project/Project/PaginatedProjectFeatureToggles/ProjectFeatureToggles.types.ts +++ b/frontend/src/component/project/Project/PaginatedProjectFeatureToggles/ProjectFeatureToggles.types.ts @@ -12,6 +12,7 @@ export type ListItemType = Pick< type: string; hasStrategies: boolean; hasEnabledStrategies: boolean; + hasReleasePlans: boolean; }; }; someEnabledEnvironmentHasVariants: boolean; diff --git a/frontend/src/component/project/Project/ProjectFeatureToggles/FeatureToggleSwitch/FeatureToggleSwitch.types.ts b/frontend/src/component/project/Project/ProjectFeatureToggles/FeatureToggleSwitch/FeatureToggleSwitch.types.ts index 673c5728fe..ec59a865df 100644 --- a/frontend/src/component/project/Project/ProjectFeatureToggles/FeatureToggleSwitch/FeatureToggleSwitch.types.ts +++ b/frontend/src/component/project/Project/ProjectFeatureToggles/FeatureToggleSwitch/FeatureToggleSwitch.types.ts @@ -6,6 +6,7 @@ export type OnFeatureToggleSwitchArgs = { environmentName: string; environmentType?: string; hasStrategies?: boolean; + hasReleasePlans?: boolean; hasEnabledStrategies?: boolean; isChangeRequestEnabled?: boolean; onRollback?: () => void; diff --git a/frontend/src/component/project/Project/ProjectFeatureToggles/FeatureToggleSwitch/createFeatureToggleCell.tsx b/frontend/src/component/project/Project/ProjectFeatureToggles/FeatureToggleSwitch/createFeatureToggleCell.tsx index e720064847..f23e3cbf92 100644 --- a/frontend/src/component/project/Project/ProjectFeatureToggles/FeatureToggleSwitch/createFeatureToggleCell.tsx +++ b/frontend/src/component/project/Project/ProjectFeatureToggles/FeatureToggleSwitch/createFeatureToggleCell.tsx @@ -59,6 +59,7 @@ const FeatureToggleCellComponent = ({ environmentType: environment?.type, hasStrategies: environment?.hasStrategies, hasEnabledStrategies: environment?.hasEnabledStrategies, + hasReleasePlans: environment?.hasReleasePlans, isChangeRequestEnabled, onRollback, onSuccess: refetch, diff --git a/frontend/src/component/project/Project/ProjectFeatureToggles/FeatureToggleSwitch/useFeatureToggleSwitch.tsx b/frontend/src/component/project/Project/ProjectFeatureToggles/FeatureToggleSwitch/useFeatureToggleSwitch.tsx index 7e9604a968..b114c616fb 100644 --- a/frontend/src/component/project/Project/ProjectFeatureToggles/FeatureToggleSwitch/useFeatureToggleSwitch.tsx +++ b/frontend/src/component/project/Project/ProjectFeatureToggles/FeatureToggleSwitch/useFeatureToggleSwitch.tsx @@ -102,7 +102,8 @@ export const useFeatureToggleSwitch: UseFeatureToggleSwitchType = ( if ( newState === false || !config.hasStrategies || - config.hasEnabledStrategies + config.hasEnabledStrategies || + config.hasReleasePlans ) { return next(); }