From 36bde1b24b02eb8c1cf9d92194c80f875e609820 Mon Sep 17 00:00:00 2001 From: Mateusz Kwasniewski Date: Tue, 25 Jul 2023 12:45:42 +0200 Subject: [PATCH] fix: default strategy stickiness (#4340) --- .../FeatureStrategyCreate.tsx | 16 +++---- .../EditDefaultStrategy.tsx | 42 ++++++++++++------- 2 files changed, 34 insertions(+), 24 deletions(-) diff --git a/frontend/src/component/feature/FeatureStrategy/FeatureStrategyCreate/FeatureStrategyCreate.tsx b/frontend/src/component/feature/FeatureStrategy/FeatureStrategyCreate/FeatureStrategyCreate.tsx index 155690a542..5bd8f8c0b5 100644 --- a/frontend/src/component/feature/FeatureStrategy/FeatureStrategyCreate/FeatureStrategyCreate.tsx +++ b/frontend/src/component/feature/FeatureStrategy/FeatureStrategyCreate/FeatureStrategyCreate.tsx @@ -10,11 +10,11 @@ import { useNavigate } from 'react-router-dom'; import useToast from 'hooks/useToast'; import { IFeatureStrategy, IFeatureStrategyPayload } from 'interfaces/strategy'; import { + createStrategyPayload, featureStrategyDocsLink, + featureStrategyDocsLinkLabel, featureStrategyHelp, formatFeaturePath, - createStrategyPayload, - featureStrategyDocsLinkLabel, } from '../FeatureStrategyEdit/FeatureStrategyEdit'; import { CREATE_FEATURE_STRATEGY } from 'component/providers/AccessProvider/permissions'; import { ISegment } from 'interfaces/segment'; @@ -31,23 +31,19 @@ import { useChangeRequestsEnabled } from 'hooks/useChangeRequestsEnabled'; import { usePendingChangeRequests } from 'hooks/api/getters/usePendingChangeRequests/usePendingChangeRequests'; import { usePlausibleTracker } from 'hooks/usePlausibleTracker'; import useQueryParams from 'hooks/useQueryParams'; -import useProject from 'hooks/api/getters/useProject/useProject'; import { useSegments } from 'hooks/api/getters/useSegments/useSegments'; -import { DEFAULT_STRATEGY } from 'component/project/Project/ProjectSettings/ProjectDefaultStrategySettings/ProjectEnvironment/ProjectEnvironmentDefaultStrategy/EditDefaultStrategy'; +import { useDefaultStrategy } from '../../../project/Project/ProjectSettings/ProjectDefaultStrategySettings/ProjectEnvironment/ProjectEnvironmentDefaultStrategy/EditDefaultStrategy'; export const FeatureStrategyCreate = () => { const projectId = useRequiredPathParam('projectId'); const featureId = useRequiredPathParam('featureId'); const environmentId = useRequiredQueryParam('environmentId'); const strategyName = useRequiredQueryParam('strategyName'); + const { strategy: defaultStrategy, defaultStrategyFallback } = + useDefaultStrategy(projectId, environmentId); const shouldUseDefaultStrategy: boolean = JSON.parse( useQueryParams().get('defaultStrategy') || 'false' ); - const { project } = useProject(projectId); - - const defaultStrategy = project.environments.find( - env => env.environment === environmentId - )?.defaultStrategy; const { segments: allSegments } = useSegments(); const strategySegments = (allSegments || []).filter(segment => { @@ -101,7 +97,7 @@ export const FeatureStrategyCreate = () => { useEffect(() => { if (shouldUseDefaultStrategy) { - const strategyTemplate = defaultStrategy || DEFAULT_STRATEGY; + const strategyTemplate = defaultStrategy || defaultStrategyFallback; if (strategyTemplate.parameters?.groupId === '' && featureId) { setStrategy({ ...strategyTemplate, diff --git a/frontend/src/component/project/Project/ProjectSettings/ProjectDefaultStrategySettings/ProjectEnvironment/ProjectEnvironmentDefaultStrategy/EditDefaultStrategy.tsx b/frontend/src/component/project/Project/ProjectSettings/ProjectDefaultStrategySettings/ProjectEnvironment/ProjectEnvironmentDefaultStrategy/EditDefaultStrategy.tsx index 0e8b003c68..8899a6efab 100644 --- a/frontend/src/component/project/Project/ProjectSettings/ProjectDefaultStrategySettings/ProjectEnvironment/ProjectEnvironmentDefaultStrategy/EditDefaultStrategy.tsx +++ b/frontend/src/component/project/Project/ProjectSettings/ProjectDefaultStrategySettings/ProjectEnvironment/ProjectEnvironmentDefaultStrategy/EditDefaultStrategy.tsx @@ -20,28 +20,42 @@ import { ProjectDefaultStrategyForm } from './ProjectDefaultStrategyForm'; import { CreateFeatureStrategySchema } from 'openapi'; import useProject from 'hooks/api/getters/useProject/useProject'; -export const DEFAULT_STRATEGY = { - name: 'flexibleRollout', - constraints: [], - parameters: { - rollout: '100', - stickiness: 'default', - groupId: '', - }, -}; -const EditDefaultStrategy = () => { - const projectId = useRequiredPathParam('projectId'); - const environmentId = useRequiredQueryParam('environmentId'); +export const useDefaultStrategy = ( + projectId: string, + environmentId: string +) => { + const { project, refetch } = useProject(projectId); - const { project, refetch: refetchProject } = useProject(projectId); + const defaultStrategyFallback = { + name: 'flexibleRollout', + constraints: [], + parameters: { + rollout: '100', + stickiness: project.defaultStickiness, + groupId: '', + }, + }; const strategy = project.environments.find( env => env.environment === environmentId )?.defaultStrategy; + return { defaultStrategyFallback, strategy, refetch }; +}; + +const EditDefaultStrategy = () => { + const projectId = useRequiredPathParam('projectId'); + const environmentId = useRequiredQueryParam('environmentId'); + + const { + defaultStrategyFallback, + strategy, + refetch: refetchProject, + } = useDefaultStrategy(projectId, environmentId); + const [defaultStrategy, setDefaultStrategy] = useState< CreateFeatureStrategySchema | undefined - >(strategy || DEFAULT_STRATEGY); + >(strategy || defaultStrategyFallback); const [segments, setSegments] = useState([]); const { updateDefaultStrategy, loading } = useProjectApi();