From e4cd25ae9d79c66447377bb087061193a6264eff Mon Sep 17 00:00:00 2001 From: Kyle Johnson Date: Fri, 31 May 2024 16:33:58 +0100 Subject: [PATCH] fix: versioned remove segment override (#4063) --- frontend/common/services/useFeatureVersion.ts | 144 +++++++++--------- 1 file changed, 73 insertions(+), 71 deletions(-) diff --git a/frontend/common/services/useFeatureVersion.ts b/frontend/common/services/useFeatureVersion.ts index 2950ee378ee5..44a1e1bd5c1c 100644 --- a/frontend/common/services/useFeatureVersion.ts +++ b/frontend/common/services/useFeatureVersion.ts @@ -38,81 +38,83 @@ export const featureVersionService = service }) // Step 3: update, create or delete feature states from the new version - const res: { data: FeatureState }[] = await Promise.all( - query.featureStates.map((featureState) => { - const matchingVersionState = currentFeatureStates.data.find( - (feature) => { - return ( - feature.feature_segment?.segment === - featureState.feature_segment?.segment - ) - }, - ) - // Matching feature state exists, meaning we need to either modify or delete it - if (matchingVersionState) { - //Feature state is marked as to remove, delete it from the current version - if ( - featureState.toRemove && - matchingVersionState.feature_segment - ) { - return deleteFeatureSegment(getStore(), { - id: matchingVersionState.feature_segment.id, - }) - } - //Feature state is not marked as remove, so we update it - const multivariate_feature_state_values = - featureState.multivariate_feature_state_values - ? featureState.multivariate_feature_state_values?.map( - (featureStateValue) => { - const newId = - matchingVersionState?.multivariate_feature_state_values?.find( - (v) => { - return ( - v.multivariate_feature_option === - featureStateValue.multivariate_feature_option - ) - }, - ) + const res: { data: FeatureState }[] = ( + await Promise.all( + query.featureStates.map((featureState) => { + const matchingVersionState = currentFeatureStates.data.find( + (feature) => { + return ( + feature.feature_segment?.segment === + featureState.feature_segment?.segment + ) + }, + ) + // Matching feature state exists, meaning we need to either modify or delete it + if (matchingVersionState) { + //Feature state is marked as to remove, delete it from the current version + if ( + featureState.toRemove && + matchingVersionState.feature_segment + ) { + return deleteFeatureSegment(getStore(), { + id: matchingVersionState.feature_segment.id, + }) + } + //Feature state is not marked as remove, so we update it + const multivariate_feature_state_values = + featureState.multivariate_feature_state_values + ? featureState.multivariate_feature_state_values?.map( + (featureStateValue) => { + const newId = + matchingVersionState?.multivariate_feature_state_values?.find( + (v) => { + return ( + v.multivariate_feature_option === + featureStateValue.multivariate_feature_option + ) + }, + ) - return { - ...featureStateValue, - id: newId!.id, - } - }, - ) - : [] + return { + ...featureStateValue, + id: newId!.id, + } + }, + ) + : [] - return updateVersionFeatureState(getStore(), { - environmentId: query.environmentId, - featureId: matchingVersionState.feature, - featureState: { - ...featureState, - feature_segment: matchingVersionState?.feature_segment - ? { - ...(matchingVersionState.feature_segment as any), - priority: featureState.feature_segment!.priority, - } - : undefined, + return updateVersionFeatureState(getStore(), { + environmentId: query.environmentId, + featureId: matchingVersionState.feature, + featureState: { + ...featureState, + feature_segment: matchingVersionState?.feature_segment + ? { + ...(matchingVersionState.feature_segment as any), + priority: featureState.feature_segment!.priority, + } + : undefined, + id: matchingVersionState.id, + multivariate_feature_state_values, + uuid: matchingVersionState.uuid, + }, id: matchingVersionState.id, - multivariate_feature_state_values, + sha: versionRes.data.uuid, uuid: matchingVersionState.uuid, - }, - id: matchingVersionState.id, - sha: versionRes.data.uuid, - uuid: matchingVersionState.uuid, - }) - } - // Matching feature state does not exist, meaning we need to create it - else { - return createVersionFeatureState(getStore(), { - environmentId: query.environmentId, - featureId: query.featureId, - featureState, - sha: versionRes.data.uuid, - }) - } - }), - ) + }) + } + // Matching feature state does not exist, meaning we need to create it + else { + return createVersionFeatureState(getStore(), { + environmentId: query.environmentId, + featureId: query.featureId, + featureState, + sha: versionRes.data.uuid, + }) + } + }), + ) + ).filter((v) => !!v?.data) //Step 4: Update feature segment priorities before saving feature states const prioritiesToUpdate = query.featureStates