From 75c4d3e85c019b68dad7457a7f6a3a390087b45b Mon Sep 17 00:00:00 2001 From: anovazzi1 Date: Wed, 19 Jul 2023 17:37:54 -0300 Subject: [PATCH] refactor(reactflowUtils.ts): add type definitions for updateEdgesHandleIdsType to improve code readability and maintainability feat(reactflowUtils.ts): implement updateEdgesHandleIds function to update handle ids in edges based on node changes --- .../src/types/utils/reactflowUtils.ts | 6 +++ src/frontend/src/utils/reactflowUtils.ts | 40 ++++++++++++++++++- 2 files changed, 44 insertions(+), 2 deletions(-) diff --git a/src/frontend/src/types/utils/reactflowUtils.ts b/src/frontend/src/types/utils/reactflowUtils.ts index ecbbda4e4..d7207ac62 100644 --- a/src/frontend/src/types/utils/reactflowUtils.ts +++ b/src/frontend/src/types/utils/reactflowUtils.ts @@ -8,3 +8,9 @@ export type cleanEdgesType = { }; updateEdge: (edge: Edge[]) => void; }; + +export type updateEdgesHandleIdsType = { + nodes: NodeType[]; + edges: Edge[]; + setEdges: (edges: Edge[]) => void; +}; diff --git a/src/frontend/src/utils/reactflowUtils.ts b/src/frontend/src/utils/reactflowUtils.ts index 063daee74..d08204685 100644 --- a/src/frontend/src/utils/reactflowUtils.ts +++ b/src/frontend/src/utils/reactflowUtils.ts @@ -1,8 +1,16 @@ import _ from "lodash"; import { Connection, ReactFlowInstance } from "reactflow"; import { APITemplateType } from "../types/api"; -import { FlowType, NodeType } from "../types/flow"; -import { cleanEdgesType } from "../types/utils/reactflowUtils"; +import { + FlowType, + NodeType, + sourceHandleType, + targetHandleType, +} from "../types/flow"; +import { + cleanEdgesType, + updateEdgesHandleIdsType, +} from "../types/utils/reactflowUtils"; import { toNormalCase } from "./utils"; export function cleanEdges({ @@ -232,3 +240,31 @@ export function addVersionToDuplicates(flow: FlowType, flows: FlowType[]) { return newName; } + +export function updateEdgesHandleIds({ + edges, + nodes, + setEdges, +}: updateEdgesHandleIdsType) { + let newEdges = _.cloneDeep(edges); + newEdges.forEach((edge) => { + const sourceNode = edge.source; + const targetNode = edge.target; + let source = edge.sourceHandle; + let target = edge.targetHandle; + //right + let newSource: sourceHandleType; + //left + let newTarget: targetHandleType; + if (target) { + let splittedtarget = target.split("|"); + let inputTypes: string[]; + if (splittedtarget[0].split(";").length > 1) { + newTarget.inputTypes = splittedtarget[0].split(";"); + } else { + newTarget.type = splittedtarget[0]; + } + } + }); + setEdges(newEdges); +}