From 2e2840e690986284e54db43ebc8ebc4f87a16718 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nuno=20G=C3=B3is?= Date: Mon, 22 Sep 2025 10:52:28 +0100 Subject: [PATCH] chore: persist strategy filter when going back from release template preview (#10663) https://linear.app/unleash/issue/2-3878/persist-strategy-filter-when-going-back-from-the-release-template Persists the strategy filter in the new "add strategy" modal when going back from the release template preview modal. This is done by moving the filter to the parent component, so the filter state persists across these navigations. Also updates the button text in the release templates preview to say "Apply template" for consistency, but only if the `newStrategyModal` flag is enabled. --- .../FeatureStrategyMenu/FeatureStrategyMenu.tsx | 8 +++++++- .../FeatureStrategyMenuCards/FeatureStrategyMenuCards.tsx | 8 +++++--- .../ReleasePlan/ReleasePlanReviewDialog.tsx | 8 +++++++- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/frontend/src/component/feature/FeatureStrategy/FeatureStrategyMenu/FeatureStrategyMenu.tsx b/frontend/src/component/feature/FeatureStrategy/FeatureStrategyMenu/FeatureStrategyMenu.tsx index 0d2268df38..c63022e46f 100644 --- a/frontend/src/component/feature/FeatureStrategy/FeatureStrategyMenu/FeatureStrategyMenu.tsx +++ b/frontend/src/component/feature/FeatureStrategy/FeatureStrategyMenu/FeatureStrategyMenu.tsx @@ -20,7 +20,10 @@ import { useChangeRequestsEnabled } from 'hooks/useChangeRequestsEnabled'; import { formatUnknownError } from 'utils/formatUnknownError'; import useUiConfig from 'hooks/api/getters/useUiConfig/useUiConfig'; import { ReleasePlanReviewDialog } from '../../FeatureView/FeatureOverview/ReleasePlan/ReleasePlanReviewDialog.tsx'; -import { FeatureStrategyMenuCards } from './FeatureStrategyMenuCards/FeatureStrategyMenuCards.tsx'; +import { + FeatureStrategyMenuCards, + type StrategyFilterValue, +} from './FeatureStrategyMenuCards/FeatureStrategyMenuCards.tsx'; import { useUiFlag } from 'hooks/useUiFlag.ts'; interface IFeatureStrategyMenuProps { @@ -61,6 +64,7 @@ export const FeatureStrategyMenu = ({ const [isStrategyMenuDialogOpen, setIsStrategyMenuDialogOpen] = useState(false); const [onlyReleasePlans, setOnlyReleasePlans] = useState(false); + const [filter, setFilter] = useState(null); const navigate = useNavigate(); const { trackEvent } = usePlausibleTracker(); const [selectedTemplate, setSelectedTemplate] = @@ -251,6 +255,8 @@ export const FeatureStrategyMenu = ({ projectId={projectId} featureId={featureId} environmentId={environmentId} + filter={filter} + setFilter={setFilter} onAddReleasePlan={(template) => { setSelectedTemplate(template); addReleasePlan(template); diff --git a/frontend/src/component/feature/FeatureStrategy/FeatureStrategyMenu/FeatureStrategyMenuCards/FeatureStrategyMenuCards.tsx b/frontend/src/component/feature/FeatureStrategy/FeatureStrategyMenu/FeatureStrategyMenuCards/FeatureStrategyMenuCards.tsx index f5783c3ee5..7475b7f0db 100644 --- a/frontend/src/component/feature/FeatureStrategy/FeatureStrategyMenu/FeatureStrategyMenuCards/FeatureStrategyMenuCards.tsx +++ b/frontend/src/component/feature/FeatureStrategy/FeatureStrategyMenu/FeatureStrategyMenuCards/FeatureStrategyMenuCards.tsx @@ -6,7 +6,7 @@ import { Link as RouterLink, useNavigate } from 'react-router-dom'; import CloseIcon from '@mui/icons-material/Close'; import useUiConfig from 'hooks/api/getters/useUiConfig/useUiConfig.ts'; import { HelpIcon } from 'component/common/HelpIcon/HelpIcon.tsx'; -import { useContext, useMemo, useState } from 'react'; +import { type Dispatch, type SetStateAction, useContext, useMemo } from 'react'; import { FeatureStrategyMenuCardsSection, StyledStrategyModalSectionHeader, @@ -79,6 +79,8 @@ interface IFeatureStrategyMenuCardsProps { projectId: string; featureId: string; environmentId: string; + filter: StrategyFilterValue; + setFilter: Dispatch>; onAddReleasePlan: (template: IReleasePlanTemplate) => void; onReviewReleasePlan: (template: IReleasePlanTemplate) => void; onClose: () => void; @@ -88,6 +90,8 @@ export const FeatureStrategyMenuCards = ({ projectId, featureId, environmentId, + filter, + setFilter, onAddReleasePlan, onReviewReleasePlan, onClose, @@ -99,8 +103,6 @@ export const FeatureStrategyMenuCards = ({ const { strategies } = useStrategies(); - const [filter, setFilter] = useState(null); - const activeStrategies = strategies.filter( (strategy) => !strategy.deprecated, ); diff --git a/frontend/src/component/feature/FeatureView/FeatureOverview/ReleasePlan/ReleasePlanReviewDialog.tsx b/frontend/src/component/feature/FeatureView/FeatureOverview/ReleasePlan/ReleasePlanReviewDialog.tsx index 1264db01de..39b1df161a 100644 --- a/frontend/src/component/feature/FeatureView/FeatureOverview/ReleasePlan/ReleasePlanReviewDialog.tsx +++ b/frontend/src/component/feature/FeatureView/FeatureOverview/ReleasePlan/ReleasePlanReviewDialog.tsx @@ -16,6 +16,7 @@ import { useFeature } from 'hooks/api/getters/useFeature/useFeature'; import { useReleasePlans } from 'hooks/api/getters/useReleasePlans/useReleasePlans'; import ArrowBackIcon from '@mui/icons-material/ArrowBack'; import CloseIcon from '@mui/icons-material/Close'; +import { useUiFlag } from 'hooks/useUiFlag.ts'; const StyledDialog = styled(Dialog)(({ theme }) => ({ '& .MuiDialog-paper': { @@ -81,6 +82,7 @@ export const ReleasePlanReviewDialog = ({ featureName, environment, ); + const newStrategyModalEnabled = useUiFlag('newStrategyModal'); const activeReleasePlan = releasePlans[0]; @@ -140,7 +142,11 @@ export const ReleasePlanReviewDialog = ({