in src/components/view/View.tsx [536:574]
private getEdges(): { singles: string[], pairs: string[][]} {
const nodes = this.props.state.nodes;
const edges = this.props.state.edges;
const edgeKeys = Object.keys(edges);
const activeEdges = edgeKeys.filter(
(edgeKey: string) => !!(nodes[edges[edgeKey].src] && nodes[edges[edgeKey].dest])
);
const connectorPlacement = this.props.configService.getConnectorPlacement();
const edgeMapping: { [key: string]: string } = {};
const edgePairs: string[][] = [];
if (
connectorPlacement === ConnectorPlacementType.LEFT_RIGHT ||
connectorPlacement === ConnectorPlacementType.TOP_BOTTOM
) {
return { singles: activeEdges, pairs: [] };
}
activeEdges.forEach((edgeKey: string) => {
const currentEdge = edges[edgeKey];
const edgeSource = nodes[currentEdge.src];
const edgeDestination = nodes[currentEdge.dest];
const edgeMapId = `${edgeSource.id}__${edgeDestination.id}`;
const matchingEdgeId = `${edgeDestination.id}__${edgeSource.id}`;
let edgeOverlap;
if (edgeMapping[matchingEdgeId]) {
edgeOverlap = edgeMapping[matchingEdgeId];
edgePairs.push([currentEdge.id, edgeOverlap]);
delete edgeMapping[matchingEdgeId];
} else {
edgeMapping[edgeMapId] = currentEdge.id;
}
});
const edgeSingles: string[] = Object.keys(edgeMapping).map(val => edgeMapping[val]);
return {
singles: edgeSingles,
pairs: edgePairs
};
}