private getEdges()

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
    };
  }