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:
parent
ddbd619394
commit
36bde1b24b
@ -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,
|
||||||
|
@ -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();
|
||||||
|
Loading…
Reference in New Issue
Block a user