From 06e1c5d68d4200e786dbd60febad35741abb20c5 Mon Sep 17 00:00:00 2001 From: heheer Date: Fri, 11 Oct 2024 12:09:33 +0800 Subject: [PATCH] fix: not delete edges when deleting non-deletable nodes (#2887) --- .../Flow/hooks/useWorkflow.tsx | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/hooks/useWorkflow.tsx b/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/hooks/useWorkflow.tsx index 65db3e116..976b8b2ff 100644 --- a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/hooks/useWorkflow.tsx +++ b/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/hooks/useWorkflow.tsx @@ -31,8 +31,6 @@ import { Input_Template_Node_Width } from '@fastgpt/global/core/workflow/template/input'; import { FlowNodeItemType } from '@fastgpt/global/core/workflow/type/node'; -import { getHandleId } from '@fastgpt/global/core/workflow/utils'; -import { IfElseResultEnum } from '@fastgpt/global/core/workflow/template/system/ifElse/constant'; /* Compute helper lines for snapping nodes to each other @@ -439,6 +437,15 @@ export const useWorkflow = () => { onNodesChange([change]); + // Remove the edges connected to the node + const nodeEdges = edges.filter((edge) => edge.source === nodeId || edge.target === nodeId); + onEdgesChange( + nodeEdges.map((edge) => ({ + type: 'remove', + id: edge.id + })) + ); + return; }); const handleSelectNode = useMemoizedFn((change: NodeSelectionChange) => { @@ -538,9 +545,14 @@ export const useWorkflow = () => { const handleEdgeChange = useCallback( (changes: EdgeChange[]) => { - onEdgesChange(changes); + // If any node is selected, don't remove edges + const changesFiltered = changes.filter( + (change) => !(change.type === 'remove' && nodes.some((node) => node.selected)) + ); + + onEdgesChange(changesFiltered); }, - [onEdgesChange] + [nodes, onEdgesChange] ); const onNodeDragStop = useCallback(