1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-02-09 00:18:00 +01:00

fix: default strategy stickiness (#4340)

This commit is contained in:
Mateusz Kwasniewski 2023-07-25 12:45:42 +02:00 committed by GitHub
parent ddbd619394
commit 36bde1b24b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 34 additions and 24 deletions

View File

@ -10,11 +10,11 @@ import { useNavigate } from 'react-router-dom';
import useToast from 'hooks/useToast'; import useToast from 'hooks/useToast';
import { IFeatureStrategy, IFeatureStrategyPayload } from 'interfaces/strategy'; import { IFeatureStrategy, IFeatureStrategyPayload } from 'interfaces/strategy';
import { import {
createStrategyPayload,
featureStrategyDocsLink, featureStrategyDocsLink,
featureStrategyDocsLinkLabel,
featureStrategyHelp, featureStrategyHelp,
formatFeaturePath, formatFeaturePath,
createStrategyPayload,
featureStrategyDocsLinkLabel,
} from '../FeatureStrategyEdit/FeatureStrategyEdit'; } from '../FeatureStrategyEdit/FeatureStrategyEdit';
import { CREATE_FEATURE_STRATEGY } from 'component/providers/AccessProvider/permissions'; import { CREATE_FEATURE_STRATEGY } from 'component/providers/AccessProvider/permissions';
import { ISegment } from 'interfaces/segment'; import { ISegment } from 'interfaces/segment';
@ -31,23 +31,19 @@ import { useChangeRequestsEnabled } from 'hooks/useChangeRequestsEnabled';
import { usePendingChangeRequests } from 'hooks/api/getters/usePendingChangeRequests/usePendingChangeRequests'; import { usePendingChangeRequests } from 'hooks/api/getters/usePendingChangeRequests/usePendingChangeRequests';
import { usePlausibleTracker } from 'hooks/usePlausibleTracker'; import { usePlausibleTracker } from 'hooks/usePlausibleTracker';
import useQueryParams from 'hooks/useQueryParams'; import useQueryParams from 'hooks/useQueryParams';
import useProject from 'hooks/api/getters/useProject/useProject';
import { useSegments } from 'hooks/api/getters/useSegments/useSegments'; 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 = () => { export const FeatureStrategyCreate = () => {
const projectId = useRequiredPathParam('projectId'); const projectId = useRequiredPathParam('projectId');
const featureId = useRequiredPathParam('featureId'); const featureId = useRequiredPathParam('featureId');
const environmentId = useRequiredQueryParam('environmentId'); const environmentId = useRequiredQueryParam('environmentId');
const strategyName = useRequiredQueryParam('strategyName'); const strategyName = useRequiredQueryParam('strategyName');
const { strategy: defaultStrategy, defaultStrategyFallback } =
useDefaultStrategy(projectId, environmentId);
const shouldUseDefaultStrategy: boolean = JSON.parse( const shouldUseDefaultStrategy: boolean = JSON.parse(
useQueryParams().get('defaultStrategy') || 'false' useQueryParams().get('defaultStrategy') || 'false'
); );
const { project } = useProject(projectId);
const defaultStrategy = project.environments.find(
env => env.environment === environmentId
)?.defaultStrategy;
const { segments: allSegments } = useSegments(); const { segments: allSegments } = useSegments();
const strategySegments = (allSegments || []).filter(segment => { const strategySegments = (allSegments || []).filter(segment => {
@ -101,7 +97,7 @@ export const FeatureStrategyCreate = () => {
useEffect(() => { useEffect(() => {
if (shouldUseDefaultStrategy) { if (shouldUseDefaultStrategy) {
const strategyTemplate = defaultStrategy || DEFAULT_STRATEGY; const strategyTemplate = defaultStrategy || defaultStrategyFallback;
if (strategyTemplate.parameters?.groupId === '' && featureId) { if (strategyTemplate.parameters?.groupId === '' && featureId) {
setStrategy({ setStrategy({
...strategyTemplate, ...strategyTemplate,

View File

@ -20,28 +20,42 @@ import { ProjectDefaultStrategyForm } from './ProjectDefaultStrategyForm';
import { CreateFeatureStrategySchema } from 'openapi'; import { CreateFeatureStrategySchema } from 'openapi';
import useProject from 'hooks/api/getters/useProject/useProject'; import useProject from 'hooks/api/getters/useProject/useProject';
export const DEFAULT_STRATEGY = { export const useDefaultStrategy = (
projectId: string,
environmentId: string
) => {
const { project, refetch } = useProject(projectId);
const defaultStrategyFallback = {
name: 'flexibleRollout', name: 'flexibleRollout',
constraints: [], constraints: [],
parameters: { parameters: {
rollout: '100', rollout: '100',
stickiness: 'default', stickiness: project.defaultStickiness,
groupId: '', groupId: '',
}, },
}; };
const EditDefaultStrategy = () => {
const projectId = useRequiredPathParam('projectId');
const environmentId = useRequiredQueryParam('environmentId');
const { project, refetch: refetchProject } = useProject(projectId);
const strategy = project.environments.find( const strategy = project.environments.find(
env => env.environment === environmentId env => env.environment === environmentId
)?.defaultStrategy; )?.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< const [defaultStrategy, setDefaultStrategy] = useState<
CreateFeatureStrategySchema | undefined CreateFeatureStrategySchema | undefined
>(strategy || DEFAULT_STRATEGY); >(strategy || defaultStrategyFallback);
const [segments, setSegments] = useState<ISegment[]>([]); const [segments, setSegments] = useState<ISegment[]>([]);
const { updateDefaultStrategy, loading } = useProjectApi(); const { updateDefaultStrategy, loading } = useProjectApi();