|
|
|
@@ -1117,9 +1117,12 @@ export const useNodesInteractions = () => { |
|
|
|
const { |
|
|
|
getNodes, |
|
|
|
setNodes, |
|
|
|
edges, |
|
|
|
setEdges, |
|
|
|
} = store.getState() |
|
|
|
|
|
|
|
const nodesToPaste: Node[] = [] |
|
|
|
const edgesToPaste: Edge[] = [] |
|
|
|
const nodes = getNodes() |
|
|
|
|
|
|
|
if (clipboardElements.length) { |
|
|
|
@@ -1128,6 +1131,7 @@ export const useNodesInteractions = () => { |
|
|
|
const currentPosition = screenToFlowPosition({ x: mousePosition.pageX, y: mousePosition.pageY }) |
|
|
|
const offsetX = currentPosition.x - x |
|
|
|
const offsetY = currentPosition.y - y |
|
|
|
let idMapping: Record<string, string> = {} |
|
|
|
clipboardElements.forEach((nodeToPaste, index) => { |
|
|
|
const nodeType = nodeToPaste.data.type |
|
|
|
|
|
|
|
@@ -1159,7 +1163,13 @@ export const useNodesInteractions = () => { |
|
|
|
newIterationStartNode!.parentId = newNode.id; |
|
|
|
(newNode.data as IterationNodeType).start_node_id = newIterationStartNode!.id |
|
|
|
|
|
|
|
newChildren = handleNodeIterationChildrenCopy(nodeToPaste.id, newNode.id) |
|
|
|
const oldIterationStartNode = nodes |
|
|
|
.find(n => n.parentId === nodeToPaste.id && n.type === CUSTOM_ITERATION_START_NODE) |
|
|
|
idMapping[oldIterationStartNode!.id] = newIterationStartNode!.id |
|
|
|
|
|
|
|
const { copyChildren, newIdMapping } = handleNodeIterationChildrenCopy(nodeToPaste.id, newNode.id, idMapping) |
|
|
|
newChildren = copyChildren |
|
|
|
idMapping = newIdMapping |
|
|
|
newChildren.forEach((child) => { |
|
|
|
newNode.data._children?.push(child.id) |
|
|
|
}) |
|
|
|
@@ -1172,7 +1182,27 @@ export const useNodesInteractions = () => { |
|
|
|
nodesToPaste.push(...newChildren) |
|
|
|
}) |
|
|
|
|
|
|
|
edges.forEach((edge) => { |
|
|
|
const sourceId = idMapping[edge.source] |
|
|
|
const targetId = idMapping[edge.target] |
|
|
|
|
|
|
|
if (sourceId && targetId) { |
|
|
|
const newEdge: Edge = { |
|
|
|
...edge, |
|
|
|
id: `${sourceId}-${edge.sourceHandle}-${targetId}-${edge.targetHandle}`, |
|
|
|
source: sourceId, |
|
|
|
target: targetId, |
|
|
|
data: { |
|
|
|
...edge.data, |
|
|
|
_connectedNodeIsSelected: false, |
|
|
|
}, |
|
|
|
} |
|
|
|
edgesToPaste.push(newEdge) |
|
|
|
} |
|
|
|
}) |
|
|
|
|
|
|
|
setNodes([...nodes, ...nodesToPaste]) |
|
|
|
setEdges([...edges, ...edgesToPaste]) |
|
|
|
saveStateToHistory(WorkflowHistoryEvent.NodePaste) |
|
|
|
handleSyncWorkflowDraft() |
|
|
|
} |