diff --git a/libs/shared/lib/graph-layout/graphology-layouts.ts b/libs/shared/lib/graph-layout/graphology-layouts.ts index 67419cbb7b80d399a9810a954cdf0054d2b7127d..bd0e4caffcbfbe4df6704c19e442d6b1c8107a88 100644 --- a/libs/shared/lib/graph-layout/graphology-layouts.ts +++ b/libs/shared/lib/graph-layout/graphology-layouts.ts @@ -186,10 +186,16 @@ export class GraphologyForceAtlas2 extends GraphologyLayout { * This is a ConcreteProduct */ export class GraphologyForceAtlas2Webworker extends GraphologyLayout { + protected _layout: FA2Layout | null = null; + constructor() { super('Graphology_forceAtlas2_webworker'); } + public cleanup() { + this._layout?.kill(); + } + public override async layout( graph: Graph<Attributes, Attributes, Attributes>, boundingBox?: { x1: number; x2: number; y1: number; y2: number }, @@ -213,12 +219,12 @@ export class GraphologyForceAtlas2Webworker extends GraphologyLayout { }; } - const layout = new FA2Layout(graph, { settings }); - layout.start(); + this._layout = new FA2Layout(graph, { settings }); + this._layout.start(); // stop the layout after 10 seconds setTimeout(() => { - layout.stop(); + this._layout?.stop(); }, 10000); } } diff --git a/libs/shared/lib/vis/visualizations/nodelinkvis/components/NLPixi.tsx b/libs/shared/lib/vis/visualizations/nodelinkvis/components/NLPixi.tsx index 40a6ec192c1a36c2839e9e40236cede778c91c10..6e1277c661cae41d4b710a484e4465caa1bdf286 100644 --- a/libs/shared/lib/vis/visualizations/nodelinkvis/components/NLPixi.tsx +++ b/libs/shared/lib/vis/visualizations/nodelinkvis/components/NLPixi.tsx @@ -18,7 +18,7 @@ import { import { useAppDispatch, useML, useSearchResultData } from '../../../../data-access'; import { NLPopup } from './NLPopup'; import { hslStringToHex, nodeColor } from './utils'; -import { CytoscapeLayout, GraphologyLayout, LayoutFactory, Layouts } from '../../../../graph-layout'; +import { CytoscapeLayout, GraphologyLayout, LayoutFactory, Layouts, GraphologyForceAtlas2Webworker } from '../../../../graph-layout'; import { MultiGraph } from 'graphology'; import { Viewport } from 'pixi-viewport'; import { NodelinkVisProps } from '../nodelinkvis'; @@ -532,6 +532,9 @@ export const NLPixi = (props: Props) => { linkGfx.clear(); nodeLayer.removeChildren(); labelLayer.removeChildren(); + + const layout = layoutAlgorithm.current as GraphologyForceAtlas2Webworker; + if(layout?.cleanup != null) layout.cleanup(); }; }, []);