diff --git a/bzGraflow.js b/bzGraflow.js index 14c938e..6f340ce 100644 --- a/bzGraflow.js +++ b/bzGraflow.js @@ -659,17 +659,17 @@ class BZgraflow extends Buildoz{ // Cleanup placeholders from previous autoPlace() runs. // Each run creates new longLinkPlaceHolder_* IDs; without cleanup they accumulate in the DOM. this.clearFakeNodes() - + let links = Object.values(this.stagedWires).map(w => w?.link).filter(Boolean) + links = links.length ? links : (this.flow?.links || []) // Loops create infinite recursion in dfs for getting parents & adjacency lists: Remove them ! let linksWithoutBackEdges - if(this.hasAnyLoop(this.flow.nodes, this.flow.links)){ - const backEdges = this.findBackEdges(this.flow.nodes, this.flow.links) - linksWithoutBackEdges = this.flow.links.filter((link, idx) => (!backEdges.includes(idx)) && (link.from[0] != link.to[0])) + if(this.hasAnyLoop(this.flow.nodes, links)){ + const backEdges = this.findBackEdges(this.flow.nodes, links) + linksWithoutBackEdges = links.filter((link, idx) => (!backEdges.includes(idx)) && (link.from[0] != link.to[0])) } else { - linksWithoutBackEdges = this.flow.links + linksWithoutBackEdges = links } const { parents, adj } = this.buildGraphStructures(this.flow.nodes, linksWithoutBackEdges) -console.log('parents', parents) const layers = this.computeLayers(this.flow.nodes, parents) // Layer-0 nodes have no parents, so reorderLayers() (which uses parent ordering) cannot @@ -721,7 +721,7 @@ console.log('parents', parents) // If any long-links, create placeholders for skipped layers this._virtualLinks = new Map() - this.flow.longLinks = this.findLongLinks(this.flow.links) + this.flow.longLinks = this.findLongLinks(links) for(const llink of this.flow.longLinks){ let fakeParent = llink.link.from[0] for(const layerIdx of llink.skippedLayers){ @@ -1138,11 +1138,11 @@ console.log('parents', parents) findLongLinks(links) { let linksWithoutBackEdges - if(this.hasAnyLoop(this.flow.nodes, this.flow.links)){ - const backEdges = this.findBackEdges(this.flow.nodes, this.flow.links) - linksWithoutBackEdges = this.flow.links.filter((link, idx) => (!backEdges.includes(idx)) && (link.from[0] != link.to[0])) + if(this.hasAnyLoop(this.flow.nodes, links)){ + const backEdges = this.findBackEdges(this.flow.nodes, links) + linksWithoutBackEdges = links.filter((link, idx) => (!backEdges.includes(idx)) && (link.from[0] != link.to[0])) } else { - linksWithoutBackEdges = this.flow.links + linksWithoutBackEdges = links } /// Yes that means we ignore long & back links ! const { parents } = this.buildGraphStructures(this.flow.nodes, linksWithoutBackEdges)