1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-09-24 17:51:14 +02:00

JSON.stringify some stuff and extract functions

This commit is contained in:
Thomas Heartman 2025-07-21 11:24:30 +02:00
parent 872c582eb9
commit 6ee18b0fe0
No known key found for this signature in database
GPG Key ID: BD1F880DAED1EE78
3 changed files with 69 additions and 68 deletions

View File

@ -4,6 +4,7 @@ import handleErrorResponses from '../httpErrorResponseHandler.js';
import type { import type {
ChangeRequestType, ChangeRequestType,
IChangeRequestAddStrategy, IChangeRequestAddStrategy,
IChangeRequestFeature,
IChangeRequestUpdateStrategy, IChangeRequestUpdateStrategy,
IFeatureChange, IFeatureChange,
} from 'component/changeRequest/changeRequest.types'; } from 'component/changeRequest/changeRequest.types';
@ -18,6 +19,23 @@ const isUpdateStrategyChange = (
change: IFeatureChange, change: IFeatureChange,
): change is IChangeRequestUpdateStrategy => change.action === 'updateStrategy'; ): change is IChangeRequestUpdateStrategy => change.action === 'updateStrategy';
const addConstraintIdsToFeatureChange = (change: IFeatureChange) => {
if (isAddStrategyChange(change) || isUpdateStrategyChange(change)) {
const { constraints, ...rest } = change.payload;
return {
...change,
payload: {
...rest,
constraints: constraints.map((constraint) => ({
...constraint,
[constraintId]: uuidv4(),
})),
},
} as IFeatureChange;
}
return change;
};
export const useChangeRequest = (projectId: string, id: string) => { export const useChangeRequest = (projectId: string, id: string) => {
const { data, error, mutate } = useSWR<ChangeRequestType>( const { data, error, mutate } = useSWR<ChangeRequestType>(
formatApiPath(`api/admin/projects/${projectId}/change-requests/${id}`), formatApiPath(`api/admin/projects/${projectId}/change-requests/${id}`),
@ -25,47 +43,25 @@ export const useChangeRequest = (projectId: string, id: string) => {
{ refreshInterval: 15000 }, { refreshInterval: 15000 },
); );
const dataWithConstraintIds: ChangeRequestType | undefined = useMemo(() => { const { features, ...dataProps } = data || {};
if (!data) { const featuresWithConstraintIds: IChangeRequestFeature[] | undefined =
return data; useMemo(() => {
} return (
features?.map((feature) => {
const changes: IFeatureChange[] = feature.changes.map(
addConstraintIdsToFeatureChange,
);
const features = data.features.map((feature) => {
const changes: IFeatureChange[] = feature.changes.map((change) => {
if (
isAddStrategyChange(change) ||
isUpdateStrategyChange(change)
) {
const { constraints, ...rest } = change.payload;
return { return {
...change, ...feature,
payload: { changes,
...rest, };
constraints: constraints.map((constraint) => ({ }) ?? []
...constraint, );
[constraintId]: uuidv4(), }, [JSON.stringify(features)]);
})),
},
} as IFeatureChange;
}
return change;
});
return {
...feature,
changes,
};
});
const value: ChangeRequestType = {
...data,
features,
};
return value;
}, [data]);
return { return {
data: dataWithConstraintIds, data: { ...dataProps, features: featuresWithConstraintIds },
loading: !error && !data, loading: !error && !data,
refetchChangeRequest: () => mutate(), refetchChangeRequest: () => mutate(),
error, error,

View File

@ -38,7 +38,9 @@ export const useFeature = (
mutate().catch(console.warn); mutate().catch(console.warn);
}, [mutate]); }, [mutate]);
const feature = useMemo(enrichConstraintsWithIds(data), [data?.body]); const feature = useMemo(enrichConstraintsWithIds(data), [
JSON.stringify(data?.body),
]);
return { return {
feature, feature,
@ -68,41 +70,42 @@ export const featureFetcher = async (
}; };
}; };
export const enrichConstraintsWithIds = (data?: IFeatureResponse) => () => { export const enrichConstraintsWithIds =
if (!data?.body) { (data?: IFeatureResponse) => (): IFeatureToggle => {
return emptyFeature; if (!data?.body) {
} return emptyFeature;
}
const { strategies, environments, ...rest } = data.body; const { strategies, environments, ...rest } = data.body;
const addConstraintIds = (strategy: IFeatureStrategy) => {
const { constraints, ...strategyRest } = strategy;
return {
...strategyRest,
constraints: constraints?.map((constraint) => ({
...constraint,
[constraintId]: uuidv4(),
})),
};
};
const strategiesWithConstraintIds = strategies?.map(addConstraintIds);
const environmentsWithStrategyIds = environments?.map((environment) => {
const { strategies, ...environmentRest } = environment;
return {
...environmentRest,
strategies: strategies?.map(addConstraintIds),
};
});
const addConstraintIds = (strategy: IFeatureStrategy) => {
const { constraints, ...strategyRest } = strategy;
return { return {
...strategyRest, ...rest,
constraints: constraints?.map((constraint) => ({ strategies: strategiesWithConstraintIds,
...constraint, environments: environmentsWithStrategyIds,
[constraintId]: uuidv4(),
})),
}; };
}; };
const strategiesWithConstraintIds = strategies?.map(addConstraintIds);
const environmentsWithStrategyIds = environments?.map((environment) => {
const { strategies, ...environmentRest } = environment;
return {
...environmentRest,
strategies: strategies?.map(addConstraintIds),
};
});
return {
...rest,
strategies: strategiesWithConstraintIds,
environments: environmentsWithStrategyIds,
};
};
export const formatFeatureApiPath = ( export const formatFeatureApiPath = (
projectId: string, projectId: string,
featureId: string, featureId: string,

View File

@ -29,7 +29,9 @@ export const useFeatureImmutable = (
await refetchFeature(); await refetchFeature();
}, [mutate, refetchFeature]); }, [mutate, refetchFeature]);
const feature = useMemo(enrichConstraintsWithIds(data), [data?.body]); const feature = useMemo(enrichConstraintsWithIds(data), [
JSON.stringify(data?.body),
]);
return { return {
feature, feature,