@@ -40,13 +40,15 @@ import { readApiKey, readOrganisationId } from "./storage";
4040ForgeUI ;
4141
4242type IssueFlagFormProps = {
43- features : FeatureModel [ ] ;
44- featureIds : string [ ] ;
43+ flagsmithFeatures : FeatureModel [ ] ;
44+ jiraFeatureIds : string [ ] ;
4545 onAdd : ( featureId : string ) => Promise < void > ;
4646} ;
4747
48- const IssueFlagForm = ( { features, featureIds, onAdd } : IssueFlagFormProps ) => {
49- const addableFeatures = features . filter ( ( feature ) => ! featureIds . includes ( String ( feature . id ) ) ) ;
48+ const IssueFlagForm = ( { flagsmithFeatures, jiraFeatureIds, onAdd } : IssueFlagFormProps ) => {
49+ const addableFeatures = flagsmithFeatures . filter (
50+ ( feature ) => ! jiraFeatureIds . includes ( String ( feature . id ) ) ,
51+ ) ;
5052
5153 return (
5254 < Fragment >
@@ -73,8 +75,8 @@ type IssueFlagTableProps = {
7375 projectUrl : string ;
7476 apiKey : string ;
7577 environments : EnvironmentModel [ ] ;
76- features : FeatureModel [ ] ;
77- featureIds : string [ ] ;
78+ flagsmithFeatures : FeatureModel [ ] ;
79+ jiraFeatureIds : string [ ] ;
7880 onRemove : ( featureId : string ) => Promise < void > ;
7981 canEdit : boolean ;
8082} ;
@@ -83,21 +85,23 @@ const IssueFlagTable = ({
8385 projectUrl,
8486 apiKey,
8587 environments,
86- features ,
87- featureIds ,
88+ flagsmithFeatures ,
89+ jiraFeatureIds ,
8890 onRemove,
8991 canEdit,
9092} : IssueFlagTableProps ) => {
9193 const [ environmentFlags , setEnvironmentFlags ] = useState < any > ( [ ] ) ;
9294
9395 useEffect ( async ( ) => {
9496 // Filtered features by comparing their IDs with the feature IDs stored in Jira.
95- const featuresFiltered = features . filter ( ( f ) => featureIds . includes ( String ( f . id ) ) ) ;
97+ const flagsmithfeaturesFiltered = flagsmithFeatures . filter ( ( f ) =>
98+ jiraFeatureIds . includes ( String ( f . id ) ) ,
99+ ) ;
96100 try {
97- if ( environments . length > 0 && featuresFiltered . length > 0 ) {
101+ if ( environments . length > 0 && flagsmithfeaturesFiltered . length > 0 ) {
98102 const featureState : any = { } ;
99103 // Iterate over each filtered feature.
100- for ( const feature of featuresFiltered ) {
104+ for ( const feature of flagsmithfeaturesFiltered ) {
101105 // Initialize an object to store the state of the feature.
102106 featureState [ String ( feature . name ) ] = {
103107 name : feature . name ,
@@ -120,13 +124,15 @@ const IssueFlagTable = ({
120124 }
121125 const ffArray = Object . keys ( featureState ) . map ( ( featureName ) => featureState [ featureName ] ) ;
122126 setEnvironmentFlags ( ffArray ) ;
127+ } else {
128+ setEnvironmentFlags ( [ ] ) ;
123129 }
124130 } catch ( error ) {
125131 if ( ! ( error instanceof Error ) ) throw error ;
126132 }
127- } , [ apiKey , featureIds , environments , features ] ) ;
133+ } , [ apiKey , jiraFeatureIds , environments , flagsmithFeatures ] ) ;
128134
129- if ( featureIds . length === 0 ) {
135+ if ( jiraFeatureIds . length === 0 ) {
130136 return < Text > No feature flags are linked to this issue.</ Text > ;
131137 }
132138
@@ -178,7 +184,7 @@ const IssueFlagTable = ({
178184 each . identity !== null ,
179185 ) . length ;
180186 return (
181- < Row key = { String ( environmentFlag . feature_id ) } >
187+ < Row key = { String ( ` ${ environmentFlag . feature_id } ` ) } >
182188 < Cell >
183189 < Text >
184190 < Link
@@ -238,7 +244,7 @@ const IssueFlagTable = ({
238244 < ButtonSet >
239245 < Button
240246 text = "Unlink from issue"
241- onClick = { ( ) => onRemove ( environmentFlag . feature_id ) }
247+ onClick = { ( ) => onRemove ( ` ${ environmentFlag . feature_id } ` ) }
242248 />
243249 </ ButtonSet >
244250 ) }
@@ -256,7 +262,7 @@ type IssueFlagPanelProps = {
256262 apiKey : string ;
257263 organisationId : string ;
258264 projectId : string | undefined ;
259- featureIds : string [ ] | undefined ;
265+ jiraFeatureIds : string [ ] | undefined ;
260266 canEdit : boolean ;
261267} ;
262268
@@ -269,7 +275,7 @@ const IssueFlagPanel = ({
269275 ...props
270276} : IssueFlagPanelProps ) => {
271277 // set initial state
272- const [ featureIds , setFeatureIds ] = useState ( props . featureIds ?? [ ] ) ;
278+ const [ jiraFeatureIds , setJiraFeatureIds ] = useState ( props . jiraFeatureIds ?? [ ] ) ;
273279 const [ environments , setEnvironments ] = useState ( [ ] as EnvironmentModel [ ] ) ;
274280 const [ features , setFeatures ] = useState ( [ ] as FeatureModel [ ] ) ;
275281 // load environments and features
@@ -291,15 +297,15 @@ const IssueFlagPanel = ({
291297 }
292298 } , [ apiKey , String ( projectId ) ] ) ;
293299
294- const onChange = async ( featureIds : string [ ] ) => {
300+ const onChange = async ( jiraFeatureIds : string [ ] ) => {
295301 // persist to storage
296- await writeFeatureIds ( jiraContext , featureIds ) ;
302+ await writeFeatureIds ( jiraContext , jiraFeatureIds ) ;
297303 // update state
298- setFeatureIds ( featureIds ) ;
304+ setJiraFeatureIds ( jiraFeatureIds ) ;
299305 } ;
300- const onAdd = ( featureId : string ) => onChange ( [ ...featureIds , featureId ] ) ;
306+ const onAdd = ( featureId : string ) => onChange ( [ ...jiraFeatureIds , featureId ] ) ;
301307 const onRemove = ( featureId : string ) =>
302- onChange ( featureIds . filter ( ( each ) => String ( each ) !== featureId ) ) ;
308+ onChange ( jiraFeatureIds . filter ( ( each ) => String ( each ) !== featureId ) ) ;
303309
304310 const projectUrl = `${ FLAGSMITH_APP } /project/${ projectId } ` ;
305311 return (
@@ -308,12 +314,14 @@ const IssueFlagPanel = ({
308314 projectUrl = { projectUrl }
309315 apiKey = { apiKey }
310316 environments = { environments }
311- features = { features }
312- featureIds = { featureIds }
317+ flagsmithFeatures = { features }
318+ jiraFeatureIds = { jiraFeatureIds }
313319 onRemove = { onRemove }
314320 canEdit = { canEdit }
315321 />
316- { canEdit && < IssueFlagForm features = { features } featureIds = { featureIds } onAdd = { onAdd } /> }
322+ { canEdit && (
323+ < IssueFlagForm flagsmithFeatures = { features } jiraFeatureIds = { jiraFeatureIds } onAdd = { onAdd } />
324+ ) }
317325 </ Fragment >
318326 ) ;
319327} ;
@@ -339,9 +347,9 @@ export default () => {
339347 const [ organisationId , setOrganisationId ] = useState ( readOrganisationId ) ;
340348 const jiraContext = useJiraContext ( ) ;
341349 const [ projectId , setProjectId ] = useState ( ( ) => readProjectId ( jiraContext ) ) ;
342- const [ featureIds , setFeatureIds ] = useState ( ( ) => readFeatureIds ( jiraContext ) ) ;
350+ const [ jiraFeatureIds , setJiraFeatureIds ] = useState ( ( ) => readFeatureIds ( jiraContext ) ) ;
343351 const [ canEdit , setCanEdit ] = useState ( ( ) => canEditIssue ( jiraContext ) ) ;
344- const [ editing , setEditing ] = useState ( ! ( featureIds ?? [ ] ) . length ) ;
352+ const [ editing , setEditing ] = useState ( ! ( jiraFeatureIds ?? [ ] ) . length ) ;
345353
346354 const actions = canEdit
347355 ? [ < EditAction key = "edit" editing = { editing } setEditing = { setEditing } /> ]
@@ -356,15 +364,15 @@ export default () => {
356364 jiraContext = { jiraContext }
357365 organisationId = { organisationId }
358366 projectId = { projectId }
359- featureIds = { featureIds }
367+ jiraFeatureIds = { jiraFeatureIds }
360368 canEdit = { canEdit && editing }
361369 />
362370 ) }
363371 onRetry = { async ( ) => {
364372 setApiKey ( await readApiKey ( ) ) ;
365373 setOrganisationId ( await readOrganisationId ( ) ) ;
366374 setProjectId ( await readProjectId ( jiraContext ) ) ;
367- setFeatureIds ( await readFeatureIds ( jiraContext ) ) ;
375+ setJiraFeatureIds ( await readFeatureIds ( jiraContext ) ) ;
368376 setCanEdit ( await canEditIssue ( jiraContext ) ) ;
369377 } }
370378 />
0 commit comments