From 512b7c4fe991f99196e6cb9db8e93cdc406c9ee4 Mon Sep 17 00:00:00 2001 From: Graham McIntire Date: Mon, 23 Mar 2026 14:08:18 -0500 Subject: [PATCH] fix: clean up map resize hook listeners --- assets/js/map.ts | 14 +++++++++++--- assets/js/types/map.d.ts | 1 + 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/assets/js/map.ts b/assets/js/map.ts index 06b3133..63cf41e 100644 --- a/assets/js/map.ts +++ b/assets/js/map.ts @@ -835,7 +835,10 @@ let MapAPRSMap = { // Store the event handler so we can remove it later self.popupNavigationHandler = (e: Event) => { - const target = e.target as HTMLElement; + const target = e.target; + if (!(target instanceof Element)) { + return; + } // Check if clicked element or its parent is a LiveView navigation link const navLink = target.closest(".aprs-lv-link") as HTMLAnchorElement; @@ -1492,13 +1495,14 @@ let MapAPRSMap = { }); // Resize map when slideover toggles (class changes handled by LiveView JS commands) - self.el.addEventListener("phx:map-resize", () => { + self.mapResizeHandler = () => { setTimeout(() => { if (self.map) { self.map.invalidateSize(); } }, 350); - }); + }; + self.el.addEventListener("phx:map-resize", self.mapResizeHandler); // Handle bounds-based marker filtering self.handleEvent( @@ -2504,6 +2508,10 @@ let MapAPRSMap = { window.removeEventListener("resize", self.resizeHandler); self.resizeHandler = undefined; } + if (self.mapResizeHandler !== undefined) { + self.el.removeEventListener("phx:map-resize", self.mapResizeHandler); + self.mapResizeHandler = undefined; + } // Remove map event handlers if (self.map !== undefined && self.mapEventHandlers !== undefined) { diff --git a/assets/js/types/map.d.ts b/assets/js/types/map.d.ts index 06cb94c..6178f9e 100644 --- a/assets/js/types/map.d.ts +++ b/assets/js/types/map.d.ts @@ -30,6 +30,7 @@ export interface LiveViewHookContext { mapEventHandlers?: Map; isDestroyed?: boolean; popupNavigationHandler?: (e: Event) => void; + mapResizeHandler?: () => void; moveEndHandler?: () => void; zoomEndHandler?: () => void; rfPathLines?: Array; // Array of Leaflet polylines and markers for RF path visualization