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 { 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,

View File

@ -20,28 +20,42 @@ import { ProjectDefaultStrategyForm } from './ProjectDefaultStrategyForm';
import { CreateFeatureStrategySchema } from 'openapi';
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',
constraints: [],
parameters: {
rollout: '100',
stickiness: 'default',
stickiness: project.defaultStickiness,
groupId: '',
},
};
const EditDefaultStrategy = () => {
const projectId = useRequiredPathParam('projectId');
const environmentId = useRequiredQueryParam('environmentId');
const { project, refetch: refetchProject } = useProject(projectId);
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<ISegment[]>([]);
const { updateDefaultStrategy, loading } = useProjectApi();