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:
parent
81d8605dc8
commit
8a70011679
1 changed files with 44 additions and 8 deletions
|
|
@ -1619,9 +1619,27 @@ let MapAPRSMap = {
|
||||||
const markerState = self.markerStates!.get(markerId);
|
const markerState = self.markerStates!.get(markerId);
|
||||||
|
|
||||||
if (marker) {
|
if (marker) {
|
||||||
self.markerLayer!.removeLayer(marker);
|
try {
|
||||||
self.markers!.delete(markerId);
|
// Remove marker from appropriate layer with safety checks
|
||||||
self.markerStates!.delete(markerId);
|
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
|
// Remove trail - use callsign_group for proper trail identification
|
||||||
|
|
@ -1801,11 +1819,29 @@ let MapAPRSMap = {
|
||||||
const marker = self.markers!.get(markerId);
|
const marker = self.markers!.get(markerId);
|
||||||
|
|
||||||
if (marker) {
|
if (marker) {
|
||||||
// Remove marker from map but don't touch trails
|
try {
|
||||||
self.markerLayer!.removeLayer(marker);
|
// Remove marker from appropriate layer with safety checks
|
||||||
self.markers!.delete(markerId);
|
if (self.markerClusterGroup && self.markerClusterGroup.hasLayer(marker)) {
|
||||||
self.markerStates!.delete(markerId);
|
// Check if cluster group is ready before removing
|
||||||
// Note: We intentionally don't remove trails here
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue