diff --git a/src/frontend/src/pages/FlowPage/components/PageComponent/index.tsx b/src/frontend/src/pages/FlowPage/components/PageComponent/index.tsx index 5493ed12a..bf3629db8 100644 --- a/src/frontend/src/pages/FlowPage/components/PageComponent/index.tsx +++ b/src/frontend/src/pages/FlowPage/components/PageComponent/index.tsx @@ -1,4 +1,4 @@ -import _, { cloneDeep, set } from "lodash"; +import _, { cloneDeep } from "lodash"; import { MouseEvent, useCallback, useEffect, useRef, useState } from "react"; import ReactFlow, { Background, @@ -105,40 +105,42 @@ export default function Page({ ) { event.preventDefault(); takeSnapshot(); - if ( - validateSelection(lastSelection!, edges).length === 0 - ) { - const clonedNodes = cloneDeep(nodes) - const clonedEdges = cloneDeep(edges) - const clonedSelection = cloneDeep(lastSelection) - updateIds({ nodes: clonedNodes, edges: clonedEdges }, clonedSelection!) + if (validateSelection(lastSelection!, edges).length === 0) { + const clonedNodes = cloneDeep(nodes); + const clonedEdges = cloneDeep(edges); + const clonedSelection = cloneDeep(lastSelection); + updateIds( + { nodes: clonedNodes, edges: clonedEdges }, + clonedSelection! + ); const { newFlow, removedEdges } = generateFlow( clonedSelection!, clonedNodes, clonedEdges, getRandomName() ); - const newGroupNode = generateNodeFromFlow( - newFlow, - getNodeId - ); - const newEdges = reconnectEdges( + const newGroupNode = generateNodeFromFlow(newFlow, getNodeId); + const newEdges = reconnectEdges(newGroupNode, removedEdges); + setNodes([ + ...clonedNodes.filter( + (oldNodes) => + !clonedSelection?.nodes.some( + (selectionNode) => selectionNode.id === oldNodes.id + ) + ), newGroupNode, - removedEdges - ); - setNodes([...clonedNodes.filter( - (oldNodes) => - !clonedSelection?.nodes.some( - (selectionNode) => - selectionNode.id === oldNodes.id - )), newGroupNode]) - setEdges([...clonedEdges.filter( - (oldEdge) => - !clonedSelection!.nodes.some( - (selectionNode) => - selectionNode.id === oldEdge.target || - selectionNode.id === oldEdge.source - )), ...newEdges]) + ]); + setEdges([ + ...clonedEdges.filter( + (oldEdge) => + !clonedSelection!.nodes.some( + (selectionNode) => + selectionNode.id === oldEdge.target || + selectionNode.id === oldEdge.source + ) + ), + ...newEdges, + ]); } else { setErrorData({ title: INVALID_SELECTION_ERROR_ALERT, @@ -437,7 +439,7 @@ export default function Page({