fix: prevent map reload on packet updates in info page

- Add DOM existence check before reinitializing map
- Implement initialization flag to prevent race conditions
- Improve cleanup in destroyed() to prevent memory leaks
- Map now only updates marker position when location changes
This commit is contained in:
Graham McIntire 2025-08-05 13:37:36 -05:00
parent 657a0dd703
commit db456f84a6
No known key found for this signature in database

View file

@ -18,7 +18,8 @@ export const InfoMap = {
} }
// If map doesn't exist yet, initialize it // If map doesn't exist yet, initialize it
if (!this.map) { if (!this.map || !this.map._container || !this.map._container.parentNode) {
// Map was destroyed or removed from DOM, reinitialize
this.initializeMap(); this.initializeMap();
return; return;
} }
@ -48,11 +49,18 @@ export const InfoMap = {
}, },
initializeMap() { initializeMap() {
// Prevent multiple simultaneous initializations
if (this.initializing) {
return;
}
// Check if Leaflet is available // Check if Leaflet is available
if (typeof L === "undefined") { if (typeof L === "undefined") {
console.error("Leaflet not loaded for InfoMap"); console.error("Leaflet not loaded for InfoMap");
return; return;
} }
this.initializing = true;
// Get data from element attributes // Get data from element attributes
const lat = parseFloat(this.el.dataset.lat); const lat = parseFloat(this.el.dataset.lat);
@ -105,8 +113,12 @@ export const InfoMap = {
} }
}, 250); }, 250);
// Mark initialization as complete
this.initializing = false;
} catch (error) { } catch (error) {
console.error("Error initializing InfoMap:", error); console.error("Error initializing InfoMap:", error);
this.initializing = false;
} }
}, },
@ -138,9 +150,13 @@ export const InfoMap = {
}, },
destroyed() { destroyed() {
// Clean up map and reset state
if (this.map) { if (this.map) {
this.map.remove(); this.map.remove();
this.map = null; this.map = null;
} }
this.marker = null;
this.lastSymbolHtml = null;
this.initializing = false;
} }
}; };