fix: add safety checks for marker cluster removal

- Check if markerClusterGroup is ready before removing markers
- Verify _map and _topClusterLevel exist in cluster group
- Add try-catch blocks to handle removal errors gracefully
- Clean up tracking maps even if layer removal fails
- Prevents 'can't access property "_childClusters"' errors
This commit is contained in:
Graham McIntire 2025-10-12 12:50:06 -05:00
parent 81d8605dc8
commit 8a70011679
No known key found for this signature in database

View file

@ -1619,9 +1619,27 @@ let MapAPRSMap = {
const markerState = self.markerStates!.get(markerId);
if (marker) {
self.markerLayer!.removeLayer(marker);
self.markers!.delete(markerId);
self.markerStates!.delete(markerId);
try {
// Remove marker from appropriate layer with safety checks
if (self.markerClusterGroup && self.markerClusterGroup.hasLayer(marker)) {
// Check if cluster group is ready before removing
if (self.markerClusterGroup._map && self.markerClusterGroup._topClusterLevel) {
self.markerClusterGroup.removeLayer(marker);
} else {
console.warn("Cluster group not ready, skipping marker removal:", markerId);
}
} else if (self.markerLayer && self.markerLayer.hasLayer(marker)) {
self.markerLayer.removeLayer(marker);
}
self.markers!.delete(markerId);
self.markerStates!.delete(markerId);
} catch (error) {
console.error("Error removing marker:", markerId, error);
// Still clean up tracking maps even if layer removal failed
self.markers!.delete(markerId);
self.markerStates!.delete(markerId);
}
}
// Remove trail - use callsign_group for proper trail identification
@ -1801,11 +1819,29 @@ let MapAPRSMap = {
const marker = self.markers!.get(markerId);
if (marker) {
// Remove marker from map but don't touch trails
self.markerLayer!.removeLayer(marker);
self.markers!.delete(markerId);
self.markerStates!.delete(markerId);
// Note: We intentionally don't remove trails here
try {
// Remove marker from appropriate layer with safety checks
if (self.markerClusterGroup && self.markerClusterGroup.hasLayer(marker)) {
// Check if cluster group is ready before removing
if (self.markerClusterGroup._map && self.markerClusterGroup._topClusterLevel) {
self.markerClusterGroup.removeLayer(marker);
} else {
console.warn("Cluster group not ready, skipping marker removal:", markerId);
}
} else if (self.markerLayer && self.markerLayer.hasLayer(marker)) {
self.markerLayer.removeLayer(marker);
}
// Always clean up the tracking maps
self.markers!.delete(markerId);
self.markerStates!.delete(markerId);
// Note: We intentionally don't remove trails here
} catch (error) {
console.error("Error removing marker:", markerId, error);
// Still clean up tracking maps even if layer removal failed
self.markers!.delete(markerId);
self.markerStates!.delete(markerId);
}
}
},