(edges: Edge[], nodes: Node[])
| 166 | } |
| 167 | |
| 168 | const updateEdges = (edges: Edge[], nodes: Node[]): Edge[] => { |
| 169 | const isMultiOutput = (source: string) => { |
| 170 | return source.includes('conditionAgentflow') || source.includes('conditionAgentAgentflow') || source.includes('humanInputAgentflow') |
| 171 | } |
| 172 | const findNodeColor = (nodeId: string) => { |
| 173 | const node = nodes.find((node) => node.id === nodeId) |
| 174 | return node?.data?.color |
| 175 | } |
| 176 | |
| 177 | // filter out edges that do not exist in nodes |
| 178 | edges = edges.filter((edge) => { |
| 179 | return nodes.some((node) => node.id === edge.source || node.id === edge.target) |
| 180 | }) |
| 181 | |
| 182 | // filter out the edge that has hideInput/hideOutput on the source/target node |
| 183 | const indexToDelete = [] |
| 184 | for (let i = 0; i < edges.length; i += 1) { |
| 185 | const edge = edges[i] |
| 186 | const sourceNode = nodes.find((node) => node.id === edge.source) |
| 187 | if (sourceNode?.data?.hideOutput) { |
| 188 | indexToDelete.push(i) |
| 189 | } |
| 190 | |
| 191 | const targetNode = nodes.find((node) => node.id === edge.target) |
| 192 | if (targetNode?.data?.hideInput) { |
| 193 | indexToDelete.push(i) |
| 194 | } |
| 195 | } |
| 196 | |
| 197 | // delete the edges at the index in indexToDelete |
| 198 | for (let i = indexToDelete.length - 1; i >= 0; i -= 1) { |
| 199 | edges.splice(indexToDelete[i], 1) |
| 200 | } |
| 201 | |
| 202 | const updatedEdges = edges.map((edge) => { |
| 203 | return { |
| 204 | ...edge, |
| 205 | data: { |
| 206 | ...edge.data, |
| 207 | sourceColor: findNodeColor(edge.source), |
| 208 | targetColor: findNodeColor(edge.target), |
| 209 | edgeLabel: isMultiOutput(edge.source) && edge.label && edge.label.trim() !== '' ? edge.label.trim() : undefined, |
| 210 | isHumanInput: edge.source.includes('humanInputAgentflow') ? true : false |
| 211 | }, |
| 212 | type: 'agentFlow', |
| 213 | id: `${edge.source}-${edge.sourceHandle}-${edge.target}-${edge.targetHandle}` |
| 214 | } |
| 215 | }) as Edge[] |
| 216 | |
| 217 | if (updatedEdges.length > 0) { |
| 218 | updatedEdges.forEach((edge) => { |
| 219 | if (isMultiOutput(edge.source)) { |
| 220 | if (edge.sourceHandle.includes('true')) { |
| 221 | edge.sourceHandle = edge.sourceHandle.replace('true', '0') |
| 222 | } else if (edge.sourceHandle.includes('false')) { |
| 223 | edge.sourceHandle = edge.sourceHandle.replace('false', '1') |
| 224 | } |
| 225 | } |
no test coverage detected