From 6ab717f20cbe445851598a8642d478915777572c Mon Sep 17 00:00:00 2001 From: Novak Zaballa Date: Tue, 27 Feb 2024 03:31:20 -0400 Subject: [PATCH 1/8] chore: Update endpoints to limit features --- flagsmith-jira-app/src/IssueFlagPanel.tsx | 145 ++++++++++------------ flagsmith-jira-app/src/flagsmith.ts | 50 ++++---- 2 files changed, 93 insertions(+), 102 deletions(-) diff --git a/flagsmith-jira-app/src/IssueFlagPanel.tsx b/flagsmith-jira-app/src/IssueFlagPanel.tsx index 42a1c2b..7b284e9 100644 --- a/flagsmith-jira-app/src/IssueFlagPanel.tsx +++ b/flagsmith-jira-app/src/IssueFlagPanel.tsx @@ -3,7 +3,7 @@ import ForgeUI, { Button, ButtonSet, Cell, - DateLozenge, + // DateLozenge, Form, Fragment, Head, @@ -27,8 +27,8 @@ import { EnvironmentModel, FLAGSMITH_APP, FeatureModel, - FeatureStateValue, - FlagModel, + // FeatureStateValue, + // FlagModel, fetchEnvironments, fetchFeatures, fetchFlags, @@ -70,24 +70,57 @@ const IssueFlagForm = ({ features, featureIds, onAdd }: IssueFlagFormProps) => { }; type IssueFlagTableProps = { + apiKey: string; projectUrl: string; environments: EnvironmentModel[]; features: FeatureModel[]; - flags: Record; featureIds: string[]; onRemove: (featureId: string) => Promise; canEdit: boolean; }; const IssueFlagTable = ({ - projectUrl, + apiKey, environments, features, - flags, featureIds, onRemove, canEdit, + projectUrl, }: IssueFlagTableProps) => { + const [environmentFlags, setEnvironmentFlags] = useState([]); + + useEffect(async () => { + const featuresFiltered = features.filter((f) => featureIds.includes(String(f.id))); + try { + if (environments.length > 0 && featuresFiltered.length > 0) { + const flags: any = {}; + for (const feature of featuresFiltered) { + flags[String(feature.name)] = { + name: feature.name, + feature_id: feature.id, + description: feature.description, + environments: [], + }; + + for (const environment of environments) { + const flagsData = await fetchFlags({ + apiKey, + featureName: feature.name, + envAPIKey: String(environment.api_key), + }); + flagsData.name = environment.name; + flags[String(feature.name)].environments.push(flagsData); + } + } + const flagsArray = Object.keys(flags).map((featureName) => flags[featureName]); + setEnvironmentFlags(flagsArray); + } + } catch (error) { + if (!(error instanceof Error)) throw error; + } + }, [apiKey, featureIds, environments, features]); + if (featureIds.length === 0) { return No feature flags are linked to this issue.; } @@ -95,21 +128,19 @@ const IssueFlagTable = ({ let first = true; return ( - {featureIds.map((featureId) => { - const feature = features.find((each) => String(each.id) === String(featureId)); - // add vertical space to separate the previous feature's Remove button from this feature + {environmentFlags.map((environmentFlag: any) => { const spacer = first ? null :  ; first = false; return ( - !!feature && ( - + !!environmentFlag && ( + {canEdit && spacer} - {feature.name} - {feature.description ? ": " : ""} + {environmentFlag.name} + {environmentFlag.description ? ": " : ""} - {feature.description} + {environmentFlag.description} @@ -126,46 +157,23 @@ const IssueFlagTable = ({ Last updated - {environments.map((environment) => { - const environmentFlags = flags[String(environment.id)] ?? []; - // get the default state for this environment - const flag = environmentFlags.find( - (each) => - String(each.feature) === String(featureId) && - each.feature_segment === null && - each.identity === null, - ); - if (!flag) return null; - const value: Partial = flag.feature_state_value ?? {}; - // count variations/overrides - const variations = flag.multivariate_feature_state_values.length; - const segments = environmentFlags.filter( - (each) => - String(each.feature) === String(featureId) && each.feature_segment !== null, - ).length; - const identities = environmentFlags.filter( - (each) => String(each.feature) === String(featureId) && each.identity !== null, - ).length; + {environmentFlag?.environments.map((environment: any) => { + if (!environment) return null; + // count overrides + const segments = environment.feature_segment || 0; + const identities = environment.identity || 0; return ( - + {environment.name} - {variations > 0 && ( - - - - )} {segments > 0 && ( - - {value.type === "unicode" ? ( - {JSON.stringify(value.string_value)} - ) : value.type === "int" ? ( - {JSON.stringify(value.integer_value)} - ) : value.type === "bool" ? ( - {JSON.stringify(!!value.boolean_value)} - ) : ( - Unknown type: {value.type} - )} - - - - - - - - ); + {/* + + + + */} + + ); })}
{canEdit && ( -