Skip to content

Commit 293e670

Browse files
authored
Fix: Feature selection display (#29)
* #30 Feature data mismatch * cr refactor
1 parent ef1a0b2 commit 293e670

File tree

1 file changed

+51
-12
lines changed

1 file changed

+51
-12
lines changed

flagsmith-jira-app/src/frontend/components/IssueFeatureTables.tsx

Lines changed: 51 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,39 @@ const IssueFeatureTable = ({
196196
return <DynamicTable head={head} rows={makeRows(projectUrl, state)} />;
197197
};
198198

199+
type FeatureTableData = {
200+
featureId: string;
201+
baseFeature: Feature | undefined;
202+
environmentFeatures: Feature[];
203+
};
204+
205+
const buildFeatureTableData = ({
206+
issueFeatureIds,
207+
features,
208+
environmentsFeatures,
209+
}: {
210+
issueFeatureIds: string[];
211+
features: Feature[];
212+
environmentsFeatures: Feature[][];
213+
}): FeatureTableData[] => {
214+
return issueFeatureIds.map((featureId) => {
215+
const baseFeature = features.find((f) => String(f.id) === featureId);
216+
217+
const envFeaturesForThisFeature = environmentsFeatures
218+
.map((envFeatures) => {
219+
const matchingFeature = envFeatures.find((f) => String(f.id) === featureId);
220+
return matchingFeature;
221+
})
222+
.filter(Boolean) as Feature[];
223+
224+
return {
225+
featureId,
226+
baseFeature,
227+
environmentFeatures: envFeaturesForThisFeature,
228+
};
229+
});
230+
};
231+
199232
type IssueFeatureTablesProps = {
200233
projectUrl: string;
201234
// environments/environmentsFeatures are assumed to be same length/order
@@ -222,31 +255,37 @@ const IssueFeatureTables = ({
222255
// (id/name/description are the same across environments)
223256
const features = environmentsFeatures[0];
224257

258+
const featureTableData = buildFeatureTableData({
259+
issueFeatureIds,
260+
features,
261+
environmentsFeatures,
262+
});
263+
225264
return (
226265
<Fragment>
227-
{features
228-
.filter((feature) => issueFeatureIds.includes(String(feature.id)))
229-
.map((feature, index) => (
230-
<Fragment key={feature.id}>
266+
{featureTableData.map(({ featureId, baseFeature, environmentFeatures }) => {
267+
if (!baseFeature) {
268+
return null;
269+
}
270+
return (
271+
<Fragment key={featureId}>
231272
<Box xcss={{ marginTop: "space.300", marginBottom: "space.100" }}>
232273
<Text>
233274
<Strong>
234-
{feature.name}
235-
{feature.description ? ": " : ""}
275+
{baseFeature.name}
276+
{baseFeature.description ? ": " : ""}
236277
</Strong>
237-
{feature.description}
278+
{baseFeature.description}
238279
</Text>
239280
</Box>
240281
<IssueFeatureTable
241282
projectUrl={projectUrl}
242283
environments={environments}
243-
// retrieve list of same feature from each environment
244-
environmentFeatures={environmentsFeatures.map(
245-
(features) => features[index] as Feature,
246-
)}
284+
environmentFeatures={environmentFeatures}
247285
/>
248286
</Fragment>
249-
))}
287+
);
288+
})}
250289
</Fragment>
251290
);
252291
};

0 commit comments

Comments
 (0)