fix(map): ensure persistence of routes between views and thorough cleanup on 'X' click

This commit is contained in:
2026-03-02 16:04:56 -05:00
parent a175a1f76a
commit ff0a23b899

View File

@ -98,16 +98,20 @@ function closeUberSearch() {
async function animateAndReload() { async function animateAndReload() {
isBannerClosing.value = true; isBannerClosing.value = true;
// 1. Limpiar estado de datos (Pinia)
routeStore.clearSelection(); routeStore.clearSelection();
router.replace({ query: {} }); router.replace({ query: {} });
// Limpiar mapa sin recargar // 2. Limpiar visuales del mapa (Markers, Polylines, Unidades)
clearMapMarkers(); clearMapMarkers();
limpiarCaminata(); limpiarCaminata();
// 3. Resetear fases de UI
showETACard.value = false; showETACard.value = false;
routePhase.value = 'idle'; routePhase.value = 'idle';
// Recentrar en el usuario si está disponible (soft-reset) // 4. Recentrar en el usuario si está disponible (soft-reset)
if (userCoords.value) { if (userCoords.value) {
setCenter(userCoords.value.lat, userCoords.value.lng); setCenter(userCoords.value.lat, userCoords.value.lng);
setZoom(16); setZoom(16);
@ -165,9 +169,7 @@ onMounted(async () => {
onUnmounted(() => { onUnmounted(() => {
if (unitFetchInterval.value) clearInterval(unitFetchInterval.value); if (unitFetchInterval.value) clearInterval(unitFetchInterval.value);
if (carouselTimer.value) clearInterval(carouselTimer.value); if (carouselTimer.value) clearInterval(carouselTimer.value);
clearMapMarkers(); // NOTA: No llamamos a clearMapMarkers() para mantener la ruta si el usuario vuelve
unitMarkers.value.forEach(m => m.setMap(null));
unitMarkers.value.clear();
}); });
async function initializeMap() { async function initializeMap() {
@ -191,26 +193,33 @@ async function initializeMap() {
}); });
} }
if (routeStore.selectedRouteId && routeStore.selectedRouteStops.length > 0 && routeStore.wasSelectedFromMap) {
updateMapMarkers();
} else {
clearMapMarkers();
}
updatePromoMarkers(); updatePromoMarkers();
if (authStore.userProfile?.auto_location) { if (authStore.userProfile?.auto_location) {
locateUser(); locateUser();
} }
if (routeStore.selectedRouteId && routeStore.wasSelectedFromMap) { if (routeStore.selectedRouteId && routeStore.wasSelectedFromMap) {
highlightOptimalStopForRoute(); if (routeStore.selectedRouteStops.length === 0) {
await routeStore.loadRouteStops(routeStore.selectedRouteId);
}
updateMapMarkers();
routePhase.value = 'navigating'; // Restaurar en modo navegación al volver
} else {
clearMapMarkers();
} }
} }
// MARKER RECYCLING & REACTIVITY OPTIMIZATION // MARKER RECYCLING & REACTIVITY OPTIMIZATION
function clearMapMarkers() { function clearMapMarkers() {
limpiarTodoCentralizado() limpiarTodoCentralizado();
// Limpiar también los marcadores de las unidades (buses)
if (unitMarkers.value.size > 0) {
unitMarkers.value.forEach(m => m.setMap(null));
unitMarkers.value.clear();
}
if (userCoords.value) { if (userCoords.value) {
reDrawUserMarker(); reDrawUserMarker();
} }