mirror of
https://github.com/woodchen-ink/certimate.git
synced 2025-07-18 09:21:56 +08:00
fix: #812
This commit is contained in:
parent
2a498edef7
commit
4d42b06572
@ -511,20 +511,40 @@ export const newNode = (nodeType: WorkflowNodeType, options: NewNodeOptions = {}
|
|||||||
|
|
||||||
type CloneNodeOptions = {
|
type CloneNodeOptions = {
|
||||||
withCopySuffix?: boolean;
|
withCopySuffix?: boolean;
|
||||||
|
nodeIdMap?: Map<string, string>;
|
||||||
};
|
};
|
||||||
|
|
||||||
export const cloneNode = (sourceNode: WorkflowNode, { withCopySuffix }: CloneNodeOptions = { withCopySuffix: true }): WorkflowNode => {
|
export const cloneNode = (sourceNode: WorkflowNode, { withCopySuffix, nodeIdMap }: CloneNodeOptions = { withCopySuffix: true }): WorkflowNode => {
|
||||||
const { produce } = new Immer({ autoFreeze: false });
|
const { produce } = new Immer({ autoFreeze: false });
|
||||||
const deepClone = (node: WorkflowNode): WorkflowNode => {
|
const deepClone = (node: WorkflowNode): WorkflowNode => {
|
||||||
return produce(node, (draft) => {
|
return produce(node, (draft) => {
|
||||||
draft.id = nanoid();
|
draft.id = nanoid();
|
||||||
|
|
||||||
|
nodeIdMap ??= new Map(); // 原节点 ID 映射到新节点 ID
|
||||||
|
nodeIdMap.set(node.id, draft.id);
|
||||||
|
|
||||||
if (draft.next) {
|
if (draft.next) {
|
||||||
draft.next = cloneNode(draft.next, { withCopySuffix });
|
draft.next = cloneNode(draft.next, { withCopySuffix, nodeIdMap });
|
||||||
}
|
}
|
||||||
|
|
||||||
if (draft.branches) {
|
if (draft.branches) {
|
||||||
draft.branches = draft.branches.map((branch) => cloneNode(branch, { withCopySuffix }));
|
draft.branches = draft.branches.map((branch) => cloneNode(branch, { withCopySuffix, nodeIdMap }));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (draft.config) {
|
||||||
|
switch (draft.type) {
|
||||||
|
case WorkflowNodeType.Deploy:
|
||||||
|
{
|
||||||
|
const prevNodeId = (draft.config as WorkflowNodeConfigForDeploy).certificate?.split("#")?.[0];
|
||||||
|
if (nodeIdMap.has(prevNodeId)) {
|
||||||
|
draft.config = {
|
||||||
|
...draft.config,
|
||||||
|
certificate: `${nodeIdMap.get(prevNodeId)}#certificate`,
|
||||||
|
} as WorkflowNodeConfigForDeploy;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return draft;
|
return draft;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user