diff --git a/src/container/EdgeRenderer/index.tsx b/src/container/EdgeRenderer/index.tsx index 0b83ce99..dc8e960b 100644 --- a/src/container/EdgeRenderer/index.tsx +++ b/src/container/EdgeRenderer/index.tsx @@ -249,6 +249,7 @@ const EdgeRenderer = (props: EdgeRendererProps) => { {edges.map((edge: Edge) => { + // @todo: getSourceTargetNodes is called many times during dragging/creating edges const { sourceNode, targetNode } = getSourceTargetNodes(edge, nodes); return ( { - const sourceNode = nodeHelper(nodes).find((n) => n.id === edge.source) || null; - const targetNode = nodeHelper(nodes).find((n) => n.id === edge.target) || null; - - return { - sourceNode, - targetNode, - }; - - // return nodeHelper(nodes) - // .flatten() - // .reduce( - // (res, node) => { - // if (node.id === edge.source) { - // res.sourceNode = node; - // } - // if (node.id === edge.target) { - // res.targetNode = node; - // } - // return res; - // }, - // { sourceNode: null, targetNode: null } as SourceTargetNode - // ); + return nodeHelper(nodes) + .flatten() + .reduce( + (res, node) => { + if (node.id === edge.source) { + res.sourceNode = node; + } + if (node.id === edge.target) { + res.targetNode = node; + } + return res; + }, + { sourceNode: null, targetNode: null } as SourceTargetNode + ); }; diff --git a/src/utils/nodes.ts b/src/utils/nodes.ts index 47a33898..c5520b1b 100644 --- a/src/utils/nodes.ts +++ b/src/utils/nodes.ts @@ -2,10 +2,9 @@ import { Node } from '../types'; function flat(arr: Node[], target: Node[]) { arr.forEach(function (el) { + target.push(el); if (el.childNodes) { flat(el.childNodes, target); - } else { - target.push(el); } }); }