From ff0a23b899aa8a9fca8547a386ea347ff9ddea05 Mon Sep 17 00:00:00 2001 From: Hanzo_dev <2002samudiojohan@gmail.com> Date: Mon, 2 Mar 2026 16:04:56 -0500 Subject: [PATCH] fix(map): ensure persistence of routes between views and thorough cleanup on 'X' click --- frontend/src/views/MapView.vue | 37 +++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/frontend/src/views/MapView.vue b/frontend/src/views/MapView.vue index 3b11cc3..0c1e588 100644 --- a/frontend/src/views/MapView.vue +++ b/frontend/src/views/MapView.vue @@ -98,16 +98,20 @@ function closeUberSearch() { async function animateAndReload() { isBannerClosing.value = true; + + // 1. Limpiar estado de datos (Pinia) routeStore.clearSelection(); router.replace({ query: {} }); - // Limpiar mapa sin recargar + // 2. Limpiar visuales del mapa (Markers, Polylines, Unidades) clearMapMarkers(); limpiarCaminata(); + + // 3. Resetear fases de UI showETACard.value = false; 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) { setCenter(userCoords.value.lat, userCoords.value.lng); setZoom(16); @@ -165,9 +169,7 @@ onMounted(async () => { onUnmounted(() => { if (unitFetchInterval.value) clearInterval(unitFetchInterval.value); if (carouselTimer.value) clearInterval(carouselTimer.value); - clearMapMarkers(); - unitMarkers.value.forEach(m => m.setMap(null)); - unitMarkers.value.clear(); + // NOTA: No llamamos a clearMapMarkers() para mantener la ruta si el usuario vuelve }); async function initializeMap() { @@ -191,26 +193,33 @@ async function initializeMap() { }); } - if (routeStore.selectedRouteId && routeStore.selectedRouteStops.length > 0 && routeStore.wasSelectedFromMap) { - updateMapMarkers(); - } else { - clearMapMarkers(); - } - updatePromoMarkers(); if (authStore.userProfile?.auto_location) { locateUser(); } - + 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 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) { reDrawUserMarker(); }