From c3629d660c8e2eb6a457350c20a78c2284dd79dd Mon Sep 17 00:00:00 2001 From: jgor20 <102353650+jgor20@users.noreply.github.com> Date: Sat, 10 Jan 2026 22:58:11 +0000 Subject: [PATCH] fix(webui): prevent duplicate visibility change listeners in health check Ensure the visibility change event listener for health checks is set up only once and properly removed on destroy to avoid memory leaks and duplicate handlers. --- public/js/data-store.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/public/js/data-store.js b/public/js/data-store.js index c1332e7..d1a4e68 100644 --- a/public/js/data-store.js +++ b/public/js/data-store.js @@ -100,10 +100,10 @@ document.addEventListener('alpine:init', () => { clearInterval(this.healthCheckTimer); } - // Setup visibility change listener + // Setup visibility change listener (only once) if (!this._healthVisibilitySetup) { this._healthVisibilitySetup = true; - document.addEventListener('visibilitychange', () => { + this._visibilityHandler = () => { if (document.hidden) { // Tab hidden - stop health checks this.stopHealthCheck(); @@ -111,7 +111,8 @@ document.addEventListener('alpine:init', () => { // Tab visible - restart health checks this.startHealthCheck(); } - }); + }; + document.addEventListener('visibilitychange', this._visibilityHandler); } // Perform immediate health check @@ -271,6 +272,9 @@ document.addEventListener('alpine:init', () => { destroy() { this.stopHealthCheck(); + if (this._visibilityHandler) { + document.removeEventListener('visibilitychange', this._visibilityHandler); + } } }); });