@@ -442,22 +442,76 @@ const Actions: StoreActions = {
442442 ) ,
443443 } ) ;
444444 } ) ,
445+ // TODO: refactor and handle by DefinitionStore
445446 updateWorkflowElement : action ( ( state , payload ) => {
446447 const workflowDef = state . definitions . workflows [ state . selectedWorkflowId ] ;
447- const workflow = workflowDef . value ;
448+ const wf = workflowDef . value ;
449+ const newName = payload . data . parameters ?. name || payload . data . name ;
450+ const changedName = newName !== payload . data . name ;
448451
449- setWorkflowDefinition ( state , workflow . name , {
452+ const elements = wf . elements . map ( ( element ) => {
453+ if ( element . id === payload . id ) {
454+ return {
455+ ...element ,
456+ ...payload ,
457+ id : newName ,
458+ } ;
459+ } else if ( element . type === 'requires' && changedName ) {
460+ const connection = element as Connection ;
461+
462+ if ( connection . source === payload . id ) {
463+ return {
464+ ...element ,
465+ source : newName ,
466+ sourceHandle : `${ newName } _source` ,
467+ } ;
468+ } else if ( connection . target === payload . id ) {
469+ return {
470+ ...element ,
471+ target : newName ,
472+ targetHandle : `${ newName } _target` ,
473+ } ;
474+ }
475+ }
476+
477+ return element ;
478+ } ) ;
479+
480+ // TODO: optimize this
481+ const jobs = wf . jobs . map ( ( staged ) => {
482+ if ( staged . name === payload . id ) {
483+ return payload . data ;
484+ }
485+
486+ if ( staged . parameters ?. requires && changedName ) {
487+ const requires = staged . parameters . requires . map ( ( req ) => {
488+ if ( req === payload . id ) {
489+ return newName ;
490+ } else {
491+ return req ;
492+ }
493+ } ) ;
494+
495+ if ( staged instanceof workflow . WorkflowJob ) {
496+ return new workflow . WorkflowJob ( staged . job , {
497+ ...staged . parameters ,
498+ requires,
499+ } ) ;
500+ }
501+
502+ return new workflow . WorkflowJobApproval ( staged . name , {
503+ ...staged . parameters ,
504+ requires,
505+ } ) ;
506+ }
507+
508+ return staged ;
509+ } ) ;
510+
511+ setWorkflowDefinition ( state , wf . name , {
450512 ...workflowDef ,
451513
452- value : new WorkflowStage (
453- workflow . name ,
454- workflow . id ,
455- workflow . jobs ,
456- workflow . when ,
457- workflow . elements . map ( ( e ) =>
458- e . id === payload . id ? { ...e , data : payload . data } : e ,
459- ) ,
460- ) ,
514+ value : new WorkflowStage ( wf . name , wf . id , jobs , wf . when , elements ) ,
461515 } ) ;
462516 } ) ,
463517
@@ -663,15 +717,6 @@ const Actions: StoreActions = {
663717 state . config = payload . generate ( ) ;
664718 } ) ,
665719 generateConfig : action ( ( state , payload ) => {
666- const stages = Object . values ( state . definitions . workflows ) ;
667- const workflows = stages . map ( ( stage ) => {
668- const jobs = stage . value . elements
669- . filter ( ( element ) => element . type === JobMapping . key )
670- . map ( ( element ) => element . data ) ;
671-
672- return new Workflow ( stage . value . name , jobs ) ;
673- } ) ;
674-
675720 const defs = state . definitions ;
676721 // This is a merged config preview. TODO: Refactor merging process.
677722 const merge = ( cur : any , update : any ) =>
@@ -701,7 +746,7 @@ const Actions: StoreActions = {
701746 const config = new Config (
702747 false ,
703748 merge ( defArrays . jobs , payloadArrays ?. jobs ) ,
704- workflows ,
749+ merge ( defArrays . workflows , payloadArrays ?. workflows ) ,
705750 merge ( defArrays . executors , payloadArrays ?. executors ) ,
706751 merge ( defArrays . commands , payloadArrays ?. commands ) ,
707752 parameterList ,
0 commit comments