From 7d33e271ea60cc173f9d35e8bcb7afc9687e8b9f Mon Sep 17 00:00:00 2001
From: Dennis Collaris <d.collaris@me.com>
Date: Sun, 23 Mar 2025 20:49:28 +0100
Subject: [PATCH] fix: app memo is actually empty once unmounted, so app was
 not correctly destroyed

---
 .../visualizations/nodelinkvis/components/NLPixi.tsx  | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/src/lib/vis/visualizations/nodelinkvis/components/NLPixi.tsx b/src/lib/vis/visualizations/nodelinkvis/components/NLPixi.tsx
index 7b1d7a00b..1394937d1 100644
--- a/src/lib/vis/visualizations/nodelinkvis/components/NLPixi.tsx
+++ b/src/lib/vis/visualizations/nodelinkvis/components/NLPixi.tsx
@@ -63,6 +63,7 @@ export const NLPixi = forwardRef((props: Props, refExternal) => {
   let edgeBundling: Point[][];
   const ref = useRef<HTMLDivElement>(null);
   const canvas = useRef<HTMLCanvasElement>(null);
+  const appRef = useRef<Application | null>(null);
   const app = useAsyncMemo(async () => {
     if (canvas.current == null) return null;
     const app = new Application();
@@ -75,6 +76,7 @@ export const NLPixi = forwardRef((props: Props, refExternal) => {
       resolution: window.devicePixelRatio || 2,
       canvas: canvas.current as HTMLCanvasElement,
     });
+    appRef.current = app;
     return app;
   }, [canvas]);
 
@@ -961,7 +963,14 @@ export const NLPixi = forwardRef((props: Props, refExternal) => {
 
       nodeMap.current.clear();
       edgeLabelMap.current.clear();
-      app?.destroy();
+      nodeLabelMap.current.clear();
+
+      appRef.current?.ticker.stop();
+      appRef.current?.destroy(true, {
+        children: true,
+        texture: true,
+        textureSource: true,
+      });
 
       const layout = layoutAlgorithm.current as GraphologyForceAtlas2Webworker;
       if (layout?.cleanup != null) layout.cleanup();
-- 
GitLab