From 2ec830ff2b6c83bd4558d29546f5453f7509398a Mon Sep 17 00:00:00 2001 From: Andrew Simachev Date: Tue, 2 Apr 2024 11:53:58 +0200 Subject: [PATCH] JS-4232: fix --- dist/workers/graph.js | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/dist/workers/graph.js b/dist/workers/graph.js index a24cc530e4..f6d4fe01d6 100644 --- a/dist/workers/graph.js +++ b/dist/workers/graph.js @@ -197,33 +197,41 @@ updateForces = () => { // Filter links if (!settings.link) { - nodes = nodes.filter(d => !d.linkCnt); + edges = edges.filter(d => d.type != EdgeType.Link); + + const ids = nodeIdsFromEdges(edges); + nodes = nodes.filter(d => ids.has(d.id) || d.isOrphan); }; // Filter relations if (!settings.relation) { - nodes = nodes.filter(d => !d.relationCnt); + edges = edges.filter(d => d.type != EdgeType.Relation); + + const ids = nodeIdsFromEdges(edges); + nodes = nodes.filter(d => ids.has(d.id) || d.isOrphan); }; - // Filte local only edges + // Filter local only edges if (settings.local) { edges = getEdgesByNodeId(rootId); - const nodeIds = util.arrayUnique([ rootId ].concat(edges.map(d => d.source)).concat(edges.map(d => d.target))); - nodes = nodes.filter(d => nodeIds.includes(d.id)); - }; + const ids = nodeIdsFromEdges(edges); + ids.add(rootId); - let map = getNodeMap(); - edges = edges.filter(d => map.get(d.source) && map.get(d.target)); + nodes = nodes.filter(d => ids.has(d.id)); + }; // Filter orphans if (!settings.orphan) { nodes = nodes.filter(d => !d.isOrphan || d.forceShow); }; - map = getNodeMap(); + let map = getNodeMap(); edges = edges.filter(d => map.get(d.source) && map.get(d.target)); + //map = getNodeMap(); + //edges = edges.filter(d => map.get(d.source) && map.get(d.target)); + // Shallow copy to disable mutations nodes = nodes.map(d => { let o = old.get(d.id); @@ -775,6 +783,10 @@ const getEdgesByNodeId = (id) => { return edges.filter(d => (d.source == id) || (d.target == id)); }; +const nodeIdsFromEdges = (edges) => { + return new Set([].concat(edges.map(d => d.source)).concat(edges.map(d => d.target))); +}; + const getRadius = (d) => { let k = 1; if (settings.icon && images[d.src] && (transform.k >= transformThresholdHalf)) {