From a430284aa21e3ae1f0d5654e55b2ad2852519cc2 Mon Sep 17 00:00:00 2001 From: wwf <yearningwang@iqtogether.com> Date: 星期三, 04 六月 2025 15:17:49 +0800 Subject: [PATCH] 初始化 --- app/components/workflow/hooks/use-nodes-interactions.ts | 313 ++++++++++----------------------------------------- 1 files changed, 63 insertions(+), 250 deletions(-) diff --git a/app/components/workflow/hooks/use-nodes-interactions.ts b/app/components/workflow/hooks/use-nodes-interactions.ts index 94b10c9..8962333 100644 --- a/app/components/workflow/hooks/use-nodes-interactions.ts +++ b/app/components/workflow/hooks/use-nodes-interactions.ts @@ -29,8 +29,6 @@ CUSTOM_EDGE, ITERATION_CHILDREN_Z_INDEX, ITERATION_PADDING, - LOOP_CHILDREN_Z_INDEX, - LOOP_PADDING, NODES_INITIAL_DATA, NODE_WIDTH_X_OFFSET, X_OFFSET, @@ -39,18 +37,14 @@ import { genNewNodeTitleFromOld, generateNewNode, - getNodeCustomTypeByNodeDataType, getNodesConnectedSourceOrTargetHandleIdsMap, getTopLeftNodePosition, } from '../utils' import { CUSTOM_NOTE_NODE } from '../note-node/constants' import type { IterationNodeType } from '../nodes/iteration/types' -import type { LoopNodeType } from '../nodes/loop/types' import { CUSTOM_ITERATION_START_NODE } from '../nodes/iteration-start/constants' -import { CUSTOM_LOOP_START_NODE } from '../nodes/loop-start/constants' import type { VariableAssignerNodeType } from '../nodes/variable-assigner/types' import { useNodeIterationInteractions } from '../nodes/iteration/use-interactions' -import { useNodeLoopInteractions } from '../nodes/loop/use-interactions' import { useWorkflowHistoryStore } from '../workflow-history-store' import { useNodesSyncDraft } from './use-nodes-sync-draft' import { useHelpline } from './use-helpline' @@ -79,10 +73,6 @@ handleNodeIterationChildDrag, handleNodeIterationChildrenCopy, } = useNodeIterationInteractions() - const { - handleNodeLoopChildDrag, - handleNodeLoopChildrenCopy, - } = useNodeLoopInteractions() const dragNodeStartPosition = useRef({ x: 0, y: 0 } as { x: number; y: number }) const { saveStateToHistory, undo, redo } = useWorkflowHistory() @@ -96,9 +86,6 @@ if (node.type === CUSTOM_ITERATION_START_NODE || node.type === CUSTOM_NOTE_NODE) return - if (node.type === CUSTOM_LOOP_START_NODE || node.type === CUSTOM_NOTE_NODE) - return - dragNodeStartPosition.current = { x: node.position.x, y: node.position.y } }, [workflowStore, getNodesReadOnly]) @@ -107,9 +94,6 @@ return if (node.type === CUSTOM_ITERATION_START_NODE) - return - - if (node.type === CUSTOM_LOOP_START_NODE) return const { @@ -121,7 +105,6 @@ const nodes = getNodes() const { restrictPosition } = handleNodeIterationChildDrag(node) - const { restrictPosition: restrictLoopPosition } = handleNodeLoopChildDrag(node) const { showHorizontalHelpLineNodes, @@ -137,8 +120,6 @@ currentNode.position.x = showVerticalHelpLineNodes[0].position.x else if (restrictPosition.x !== undefined) currentNode.position.x = restrictPosition.x - else if (restrictLoopPosition.x !== undefined) - currentNode.position.x = restrictLoopPosition.x else currentNode.position.x = node.position.x @@ -146,13 +127,12 @@ currentNode.position.y = showHorizontalHelpLineNodes[0].position.y else if (restrictPosition.y !== undefined) currentNode.position.y = restrictPosition.y - else if (restrictLoopPosition.y !== undefined) - currentNode.position.y = restrictLoopPosition.y else currentNode.position.y = node.position.y }) + setNodes(newNodes) - }, [getNodesReadOnly, store, handleNodeIterationChildDrag, handleNodeLoopChildDrag, handleSetHelpline]) + }, [store, getNodesReadOnly, handleSetHelpline, handleNodeIterationChildDrag]) const handleNodeDragStop = useCallback<NodeDragHandler>((_, node) => { const { @@ -181,9 +161,6 @@ return if (node.type === CUSTOM_NOTE_NODE || node.type === CUSTOM_ITERATION_START_NODE) - return - - if (node.type === CUSTOM_LOOP_START_NODE || node.type === CUSTOM_NOTE_NODE) return const { @@ -260,9 +237,6 @@ if (node.type === CUSTOM_NOTE_NODE || node.type === CUSTOM_ITERATION_START_NODE) return - if (node.type === CUSTOM_NOTE_NODE || node.type === CUSTOM_LOOP_START_NODE) - return - const { setEnteringNodePayload, } = workflowStore.getState() @@ -337,8 +311,6 @@ const handleNodeClick = useCallback<NodeMouseHandler>((_, node) => { if (node.type === CUSTOM_ITERATION_START_NODE) return - if (node.type === CUSTOM_LOOP_START_NODE) - return handleNodeSelect(node.id) }, [handleNodeSelect]) @@ -372,10 +344,6 @@ if (edges.find(edge => edge.source === source && edge.sourceHandle === sourceHandle && edge.target === target && edge.targetHandle === targetHandle)) return - const parendNode = nodes.find(node => node.id === targetNode?.parentId) - const isInIteration = parendNode && parendNode.data.type === BlockEnum.Iteration - const isInLoop = !!parendNode && parendNode.data.type === BlockEnum.Loop - const newEdge = { id: `${source}-${sourceHandle}-${target}-${targetHandle}`, type: CUSTOM_EDGE, @@ -386,12 +354,10 @@ data: { sourceType: nodes.find(node => node.id === source)!.data.type, targetType: nodes.find(node => node.id === target)!.data.type, - isInIteration, - iteration_id: isInIteration ? targetNode?.parentId : undefined, - isInLoop, - loop_id: isInLoop ? targetNode?.parentId : undefined, + isInIteration: !!targetNode?.parentId, + iteration_id: targetNode?.parentId, }, - zIndex: targetNode?.parentId ? (isInIteration ? ITERATION_CHILDREN_Z_INDEX : LOOP_CHILDREN_Z_INDEX) : 0, + zIndex: targetNode?.parentId ? ITERATION_CHILDREN_Z_INDEX : 0, } const nodesConnectedSourceOrTargetHandleIdsMap = getNodesConnectedSourceOrTargetHandleIdsMap( [ @@ -588,45 +554,6 @@ } } } - - if (currentNode.data.type === BlockEnum.Loop) { - const loopChildren = nodes.filter(node => node.parentId === currentNode.id) - - if (loopChildren.length) { - if (currentNode.data._isBundled) { - loopChildren.forEach((child) => { - handleNodeDelete(child.id) - }) - return handleNodeDelete(nodeId) - } - else { - if (loopChildren.length === 1) { - handleNodeDelete(loopChildren[0].id) - handleNodeDelete(nodeId) - - return - } - const { setShowConfirm, showConfirm } = workflowStore.getState() - - if (!showConfirm) { - setShowConfirm({ - title: t('workflow.nodes.loop.deleteTitle'), - desc: t('workflow.nodes.loop.deleteDesc') || '', - onConfirm: () => { - loopChildren.forEach((child) => { - handleNodeDelete(child.id) - }) - handleNodeDelete(nodeId) - handleSyncWorkflowDraft() - setShowConfirm(undefined) - }, - }) - return - } - } - } - } - const connectedEdges = getConnectedEdges([{ id: nodeId } as Node], edges) const nodesConnectedSourceOrTargetHandleIdsMap = getNodesConnectedSourceOrTargetHandleIdsMap(connectedEdges.map(edge => ({ type: 'remove', edge })), nodes) const newNodes = produce(nodes, (draft: Node[]) => { @@ -639,7 +566,7 @@ } if (node.id === currentNode.parentId) - node.data._children = node.data._children?.filter(child => child.nodeId !== nodeId) + node.data._children = node.data._children?.filter(child => child !== nodeId) }) draft.splice(currentNodeIndex, 1) }) @@ -685,9 +612,7 @@ const { newNode, newIterationStartNode, - newLoopStartNode, } = generateNewNode({ - type: getNodeCustomTypeByNodeDataType(nodeType), data: { ...NODES_INITIAL_DATA[nodeType], title: nodesWithSameType.length > 0 ? `${t(`workflow.blocks.${nodeType}`)} ${nodesWithSameType.length + 1}` : t(`workflow.blocks.${nodeType}`), @@ -715,28 +640,13 @@ } newNode.parentId = prevNode.parentId newNode.extent = prevNode.extent - - const parentNode = nodes.find(node => node.id === prevNode.parentId) || null - const isInIteration = !!parentNode && parentNode.data.type === BlockEnum.Iteration - const isInLoop = !!parentNode && parentNode.data.type === BlockEnum.Loop - if (prevNode.parentId) { - newNode.data.isInIteration = isInIteration - newNode.data.isInLoop = isInLoop - if (isInIteration) { - newNode.data.iteration_id = parentNode.id - newNode.zIndex = ITERATION_CHILDREN_Z_INDEX - } - if (isInLoop) { - newNode.data.loop_id = parentNode.id - newNode.zIndex = LOOP_CHILDREN_Z_INDEX - } - if (isInIteration && (newNode.data.type === BlockEnum.Answer || newNode.data.type === BlockEnum.Tool || newNode.data.type === BlockEnum.Assigner)) { - const iterNodeData: IterationNodeType = parentNode.data - iterNodeData._isShowTips = true - } - if (isInLoop && (newNode.data.type === BlockEnum.Answer || newNode.data.type === BlockEnum.Tool || newNode.data.type === BlockEnum.Assigner)) { - const iterNodeData: IterationNodeType = parentNode.data + newNode.data.isInIteration = true + newNode.data.iteration_id = prevNode.parentId + newNode.zIndex = ITERATION_CHILDREN_Z_INDEX + if (newNode.data.type === BlockEnum.Answer || newNode.data.type === BlockEnum.Tool || newNode.data.type === BlockEnum.Assigner) { + const parentIterNodeIndex = nodes.findIndex(node => node.id === prevNode.parentId) + const iterNodeData: IterationNodeType = nodes[parentIterNodeIndex].data iterNodeData._isShowTips = true } } @@ -751,13 +661,11 @@ data: { sourceType: prevNode.data.type, targetType: newNode.data.type, - isInIteration, - isInLoop, - iteration_id: isInIteration ? prevNode.parentId : undefined, - loop_id: isInLoop ? prevNode.parentId : undefined, + isInIteration: !!prevNode.parentId, + iteration_id: prevNode.parentId, _connectedNodeIsSelected: true, }, - zIndex: prevNode.parentId ? (isInIteration ? ITERATION_CHILDREN_Z_INDEX : LOOP_CHILDREN_Z_INDEX) : 0, + zIndex: prevNode.parentId ? ITERATION_CHILDREN_Z_INDEX : 0, } const nodesConnectedSourceOrTargetHandleIdsMap = getNodesConnectedSourceOrTargetHandleIdsMap( [ @@ -777,18 +685,11 @@ } if (node.data.type === BlockEnum.Iteration && prevNode.parentId === node.id) - node.data._children?.push({ nodeId: newNode.id, nodeType: newNode.data.type }) - - if (node.data.type === BlockEnum.Loop && prevNode.parentId === node.id) - node.data._children?.push({ nodeId: newNode.id, nodeType: newNode.data.type }) + node.data._children?.push(newNode.id) }) draft.push(newNode) - if (newIterationStartNode) draft.push(newIterationStartNode) - - if (newLoopStartNode) - draft.push(newLoopStartNode) }) if (newNode.data.type === BlockEnum.VariableAssigner || newNode.data.type === BlockEnum.VariableAggregator) { @@ -835,27 +736,15 @@ } newNode.parentId = nextNode.parentId newNode.extent = nextNode.extent - - const parentNode = nodes.find(node => node.id === nextNode.parentId) || null - const isInIteration = !!parentNode && parentNode.data.type === BlockEnum.Iteration - const isInLoop = !!parentNode && parentNode.data.type === BlockEnum.Loop - - if (parentNode && nextNode.parentId) { - newNode.data.isInIteration = isInIteration - newNode.data.isInLoop = isInLoop - if (isInIteration) { - newNode.data.iteration_id = parentNode.id - newNode.zIndex = ITERATION_CHILDREN_Z_INDEX - } - if (isInLoop) { - newNode.data.loop_id = parentNode.id - newNode.zIndex = LOOP_CHILDREN_Z_INDEX - } + if (nextNode.parentId) { + newNode.data.isInIteration = true + newNode.data.iteration_id = nextNode.parentId + newNode.zIndex = ITERATION_CHILDREN_Z_INDEX } let newEdge - if ((nodeType !== BlockEnum.IfElse) && (nodeType !== BlockEnum.QuestionClassifier) && (nodeType !== BlockEnum.LoopEnd)) { + if ((nodeType !== BlockEnum.IfElse) && (nodeType !== BlockEnum.QuestionClassifier)) { newEdge = { id: `${newNode.id}-${sourceHandle}-${nextNodeId}-${nextNodeTargetHandle}`, type: CUSTOM_EDGE, @@ -866,13 +755,11 @@ data: { sourceType: newNode.data.type, targetType: nextNode.data.type, - isInIteration, - isInLoop, - iteration_id: isInIteration ? nextNode.parentId : undefined, - loop_id: isInLoop ? nextNode.parentId : undefined, + isInIteration: !!nextNode.parentId, + iteration_id: nextNode.parentId, _connectedNodeIsSelected: true, }, - zIndex: nextNode.parentId ? (isInIteration ? ITERATION_CHILDREN_Z_INDEX : LOOP_CHILDREN_Z_INDEX) : 0, + zIndex: nextNode.parentId ? ITERATION_CHILDREN_Z_INDEX : 0, } } @@ -903,17 +790,9 @@ } if (node.data.type === BlockEnum.Iteration && nextNode.parentId === node.id) - node.data._children?.push({ nodeId: newNode.id, nodeType: newNode.data.type }) + node.data._children?.push(newNode.id) if (node.data.type === BlockEnum.Iteration && node.data.start_node_id === nextNodeId) { - node.data.start_node_id = newNode.id - node.data.startNodeType = newNode.data.type - } - - if (node.data.type === BlockEnum.Loop && nextNode.parentId === node.id) - node.data._children?.push({ nodeId: newNode.id, nodeType: newNode.data.type }) - - if (node.data.type === BlockEnum.Loop && node.data.start_node_id === nextNodeId) { node.data.start_node_id = newNode.id node.data.startNodeType = newNode.data.type } @@ -921,8 +800,6 @@ draft.push(newNode) if (newIterationStartNode) draft.push(newIterationStartNode) - if (newLoopStartNode) - draft.push(newLoopStartNode) }) if (newEdge) { const newEdges = produce(edges, (draft) => { @@ -963,22 +840,10 @@ } newNode.parentId = prevNode.parentId newNode.extent = prevNode.extent - - const parentNode = nodes.find(node => node.id === prevNode.parentId) || null - const isInIteration = !!parentNode && parentNode.data.type === BlockEnum.Iteration - const isInLoop = !!parentNode && parentNode.data.type === BlockEnum.Loop - - if (parentNode && prevNode.parentId) { - newNode.data.isInIteration = isInIteration - newNode.data.isInLoop = isInLoop - if (isInIteration) { - newNode.data.iteration_id = parentNode.id - newNode.zIndex = ITERATION_CHILDREN_Z_INDEX - } - if (isInLoop) { - newNode.data.loop_id = parentNode.id - newNode.zIndex = LOOP_CHILDREN_Z_INDEX - } + if (prevNode.parentId) { + newNode.data.isInIteration = true + newNode.data.iteration_id = prevNode.parentId + newNode.zIndex = ITERATION_CHILDREN_Z_INDEX } const currentEdgeIndex = edges.findIndex(edge => edge.source === prevNodeId && edge.target === nextNodeId) @@ -992,21 +857,14 @@ data: { sourceType: prevNode.data.type, targetType: newNode.data.type, - isInIteration, - isInLoop, - iteration_id: isInIteration ? prevNode.parentId : undefined, - loop_id: isInLoop ? prevNode.parentId : undefined, + isInIteration: !!prevNode.parentId, + iteration_id: prevNode.parentId, _connectedNodeIsSelected: true, }, - zIndex: prevNode.parentId ? (isInIteration ? ITERATION_CHILDREN_Z_INDEX : LOOP_CHILDREN_Z_INDEX) : 0, + zIndex: prevNode.parentId ? ITERATION_CHILDREN_Z_INDEX : 0, } let newNextEdge: Edge | null = null - - const nextNodeParentNode = nodes.find(node => node.id === nextNode.parentId) || null - const isNextNodeInIteration = !!nextNodeParentNode && nextNodeParentNode.data.type === BlockEnum.Iteration - const isNextNodeInLoop = !!nextNodeParentNode && nextNodeParentNode.data.type === BlockEnum.Loop - - if (nodeType !== BlockEnum.IfElse && nodeType !== BlockEnum.QuestionClassifier && nodeType !== BlockEnum.LoopEnd) { + if (nodeType !== BlockEnum.IfElse && nodeType !== BlockEnum.QuestionClassifier) { newNextEdge = { id: `${newNode.id}-${sourceHandle}-${nextNodeId}-${nextNodeTargetHandle}`, type: CUSTOM_EDGE, @@ -1017,13 +875,11 @@ data: { sourceType: newNode.data.type, targetType: nextNode.data.type, - isInIteration: isNextNodeInIteration, - isInLoop: isNextNodeInLoop, - iteration_id: isNextNodeInIteration ? nextNode.parentId : undefined, - loop_id: isNextNodeInLoop ? nextNode.parentId : undefined, + isInIteration: !!nextNode.parentId, + iteration_id: nextNode.parentId, _connectedNodeIsSelected: true, }, - zIndex: nextNode.parentId ? (isNextNodeInIteration ? ITERATION_CHILDREN_Z_INDEX : LOOP_CHILDREN_Z_INDEX) : 0, + zIndex: nextNode.parentId ? ITERATION_CHILDREN_Z_INDEX : 0, } } const nodesConnectedSourceOrTargetHandleIdsMap = getNodesConnectedSourceOrTargetHandleIdsMap( @@ -1051,15 +907,11 @@ node.position.x += NODE_WIDTH_X_OFFSET if (node.data.type === BlockEnum.Iteration && prevNode.parentId === node.id) - node.data._children?.push({ nodeId: newNode.id, nodeType: newNode.data.type }) - if (node.data.type === BlockEnum.Loop && prevNode.parentId === node.id) - node.data._children?.push({ nodeId: newNode.id, nodeType: newNode.data.type }) + node.data._children?.push(newNode.id) }) draft.push(newNode) if (newIterationStartNode) draft.push(newIterationStartNode) - if (newLoopStartNode) - draft.push(newLoopStartNode) }) setNodes(newNodes) if (newNode.data.type === BlockEnum.VariableAssigner || newNode.data.type === BlockEnum.VariableAggregator) { @@ -1117,9 +969,7 @@ const { newNode: newCurrentNode, newIterationStartNode, - newLoopStartNode, } = generateNewNode({ - type: getNodeCustomTypeByNodeDataType(nodeType), data: { ...NODES_INITIAL_DATA[nodeType], title: nodesWithSameType.length > 0 ? `${t(`workflow.blocks.${nodeType}`)} ${nodesWithSameType.length + 1}` : t(`workflow.blocks.${nodeType}`), @@ -1128,9 +978,7 @@ _connectedTargetHandleIds: [], selected: currentNode.data.selected, isInIteration: currentNode.data.isInIteration, - isInLoop: currentNode.data.isInLoop, iteration_id: currentNode.data.iteration_id, - loop_id: currentNode.data.loop_id, }, position: { x: currentNode.position.x, @@ -1162,8 +1010,6 @@ draft.splice(index, 1, newCurrentNode) if (newIterationStartNode) draft.push(newIterationStartNode) - if (newLoopStartNode) - draft.push(newLoopStartNode) }) setNodes(newNodes) const newEdges = produce(edges, (draft) => { @@ -1176,6 +1022,22 @@ saveStateToHistory(WorkflowHistoryEvent.NodeChange) }, [getNodesReadOnly, store, t, handleSyncWorkflowDraft, saveStateToHistory]) + + const handleNodeCancelRunningStatus = useCallback(() => { + const { + getNodes, + setNodes, + } = store.getState() + + const nodes = getNodes() + const newNodes = produce(nodes, (draft) => { + draft.forEach((node) => { + node.data._runningStatus = undefined + node.data._waitingRun = false + }) + }) + setNodes(newNodes) + }, [store]) const handleNodesCancelSelected = useCallback(() => { const { @@ -1194,9 +1056,6 @@ const handleNodeContextMenu = useCallback((e: MouseEvent, node: Node) => { if (node.type === CUSTOM_NOTE_NODE || node.type === CUSTOM_ITERATION_START_NODE) - return - - if (node.type === CUSTOM_NOTE_NODE || node.type === CUSTOM_LOOP_START_NODE) return e.preventDefault() @@ -1226,22 +1085,20 @@ if (nodeId) { // If nodeId is provided, copy that specific node - const nodeToCopy = nodes.find(node => node.id === nodeId && node.data.type !== BlockEnum.Start - && node.type !== CUSTOM_ITERATION_START_NODE && node.type !== CUSTOM_LOOP_START_NODE && node.data.type !== BlockEnum.LoopEnd) + const nodeToCopy = nodes.find(node => node.id === nodeId && node.data.type !== BlockEnum.Start && node.type !== CUSTOM_ITERATION_START_NODE) if (nodeToCopy) setClipboardElements([nodeToCopy]) } else { // If no nodeId is provided, fall back to the current behavior - const bundledNodes = nodes.filter(node => node.data._isBundled && node.data.type !== BlockEnum.Start - && !node.data.isInIteration && !node.data.isInLoop) + const bundledNodes = nodes.filter(node => node.data._isBundled && node.data.type !== BlockEnum.Start && !node.data.isInIteration) if (bundledNodes.length) { setClipboardElements(bundledNodes) return } - const selectedNode = nodes.find(node => node.data.selected && node.data.type !== BlockEnum.Start && node.data.type !== BlockEnum.LoopEnd) + const selectedNode = nodes.find(node => node.data.selected && node.data.type !== BlockEnum.Start) if (selectedNode) setClipboardElements([selectedNode]) @@ -1260,12 +1117,9 @@ const { getNodes, setNodes, - edges, - setEdges, } = store.getState() const nodesToPaste: Node[] = [] - const edgesToPaste: Edge[] = [] const nodes = getNodes() if (clipboardElements.length) { @@ -1274,14 +1128,12 @@ 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 const { newNode, newIterationStartNode, - newLoopStartNode, } = generateNewNode({ type: nodeToPaste.type, data: { @@ -1307,28 +1159,11 @@ newIterationStartNode!.parentId = newNode.id; (newNode.data as IterationNodeType).start_node_id = newIterationStartNode!.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 = handleNodeIterationChildrenCopy(nodeToPaste.id, newNode.id) newChildren.forEach((child) => { - newNode.data._children?.push({ nodeId: child.id, nodeType: child.data.type }) + newNode.data._children?.push(child.id) }) newChildren.push(newIterationStartNode!) - } - - if (nodeToPaste.data.type === BlockEnum.Loop) { - newLoopStartNode!.parentId = newNode.id; - (newNode.data as LoopNodeType).start_node_id = newLoopStartNode!.id - - newChildren = handleNodeLoopChildrenCopy(nodeToPaste.id, newNode.id) - newChildren.forEach((child) => { - newNode.data._children?.push({ nodeId: child.id, nodeType: child.data.type }) - }) - newChildren.push(newLoopStartNode!) } nodesToPaste.push(newNode) @@ -1337,31 +1172,11 @@ 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() } - }, [getNodesReadOnly, workflowStore, store, reactflow, saveStateToHistory, handleSyncWorkflowDraft, handleNodeIterationChildrenCopy, handleNodeLoopChildrenCopy]) + }, [getNodesReadOnly, workflowStore, store, reactflow, saveStateToHistory, handleSyncWorkflowDraft, handleNodeIterationChildrenCopy]) const handleNodesDuplicate = useCallback((nodeId?: string) => { if (getNodesReadOnly()) @@ -1411,7 +1226,7 @@ const nodes = getNodes() const currentNode = nodes.find(n => n.id === nodeId)! - const childrenNodes = nodes.filter(n => currentNode.data._children?.find((c: any) => c.nodeId === n.id)) + const childrenNodes = nodes.filter(n => currentNode.data._children?.includes(n.id)) let rightNode: Node let bottomNode: Node @@ -1433,12 +1248,9 @@ }) if (rightNode! && bottomNode!) { - const parentNode = nodes.find(n => n.id === rightNode.parentId) - const paddingMap = parentNode?.data.type === BlockEnum.Iteration ? ITERATION_PADDING : LOOP_PADDING - - if (width < rightNode!.position.x + rightNode.width! + paddingMap.right) + if (width < rightNode!.position.x + rightNode.width! + ITERATION_PADDING.right) return - if (height < bottomNode.position.y + bottomNode.height! + paddingMap.bottom) + if (height < bottomNode.position.y + bottomNode.height! + ITERATION_PADDING.bottom) return } const newNodes = produce(nodes, (draft) => { @@ -1538,6 +1350,7 @@ handleNodeDelete, handleNodeChange, handleNodeAdd, + handleNodeCancelRunningStatus, handleNodesCancelSelected, handleNodeContextMenu, handleNodesCopy, -- Gitblit v1.8.0