Skip to content
This repository was archived by the owner on Jun 13, 2024. It is now read-only.

Commit 9ee765f

Browse files
authored
feat: update connections when job names are changed (#251)
feat: update co nnections when job names are changed
1 parent b16f442 commit 9ee765f

2 files changed

Lines changed: 66 additions & 22 deletions

File tree

src/components/containers/ParamListContainer.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,6 @@ const ParamListContainer = ({
6969
return (
7070
<>
7171
{paramList.parameters.map((parameter, index) => {
72-
console.log(subtypes[parameter.type](parameter));
7372
return (
7473
<Fragment key={index}>
7574
{matrix ? (

src/state/Store.tsx

Lines changed: 66 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)