@@ -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+
199232type 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