refactor(map): fix race conditions and async issues with atomic GPS/Data fetch
This commit is contained in:
@ -37,7 +37,7 @@ const { estasCargando: estasCargandoRuta, errorRuta } = useDirectionsRoute();
|
||||
const { encontrarParadaCercana, paradaCercana, distanciaMetros, duracionCaminata, limpiarCaminata } = useParadaCercana();
|
||||
const { calcularETA, busesActivos, cargando: etaCargando } = useETA();
|
||||
|
||||
const { procesarSeleccionDeRuta } = useFlujoPrincipal();
|
||||
const { procesarSeleccionDeRuta, cargando: flujoCargando } = useFlujoPrincipal();
|
||||
const { limpiarMapa: limpiarTodoCentralizado } = useMapState();
|
||||
|
||||
const showETACard = ref(false);
|
||||
@ -237,20 +237,22 @@ function reDrawUserMarker() {
|
||||
async function updateMapMarkers(skipZoom = false) {
|
||||
if (!isLoaded.value || !map.value || isUpdatingMarkers.value) return;
|
||||
|
||||
isUpdatingMarkers.value = true;
|
||||
const currentRequestRouteId = routeStore.selectedRouteId;
|
||||
const stops = [...routeStore.selectedRouteStops];
|
||||
if (!currentRequestRouteId) {
|
||||
clearMapMarkers();
|
||||
return;
|
||||
}
|
||||
|
||||
isUpdatingMarkers.value = true;
|
||||
|
||||
try {
|
||||
if (!currentRequestRouteId || stops.length === 0) {
|
||||
clearMapMarkers();
|
||||
return;
|
||||
}
|
||||
|
||||
const selectedRouteObj = routeStore.allRoutes.find(r => r.id === currentRequestRouteId) || { id: currentRequestRouteId, short_name: currentRequestRouteId };
|
||||
|
||||
// ── PASO ATÓMICO: Procesar con carga paralela de GPS y Paradas ──
|
||||
// Pasamos [] a paradasExistentes para forzar que procesarSeleccionDeRuta maneje el Promise.all
|
||||
await procesarSeleccionDeRuta(
|
||||
selectedRouteObj,
|
||||
stops as BusStop[],
|
||||
routeStore.selectedRouteStops, // El composable decidirá si necesita recargar en paralelo
|
||||
map.value,
|
||||
addCleanMarker,
|
||||
skipZoom,
|
||||
@ -326,6 +328,7 @@ function selectRouteAndClose(route: any) {
|
||||
highlightOptimalStopForRoute();
|
||||
return;
|
||||
}
|
||||
|
||||
showUberSearch.value = false;
|
||||
routeStore.wasSelectedFromMap = true;
|
||||
routeStore.selectRoute(route.id, route.name);
|
||||
@ -476,8 +479,8 @@ watch([() => authStore.userProfile?.auto_location, isLoaded], ([canLocate, loade
|
||||
<div class="split-view">
|
||||
<div class="map-side">
|
||||
<div class="map-view">
|
||||
<div v-if="estasCargandoRuta || errorRuta" class="status-indicator">
|
||||
<div v-if="estasCargandoRuta" class="loading-pill">{{ t('map.calculatingRoute') }}</div>
|
||||
<div v-if="flujoCargando || estasCargandoRuta || errorRuta" class="status-indicator">
|
||||
<div v-if="flujoCargando || estasCargandoRuta" class="loading-pill">{{ t('map.calculatingRoute') }}</div>
|
||||
<div v-if="errorRuta" class="error-pill">{{ errorRuta }}</div>
|
||||
</div>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user