fix: corrección de errores en mapa y filtros de horarios

This commit is contained in:
2026-02-27 21:24:26 -05:00
parent d33c4c4ab1
commit 8084032f25
4 changed files with 108 additions and 153 deletions

View File

@ -27,9 +27,9 @@ const mapStore = useMapStore();
const busStopStore = useBusStopStore();
const couponStore = useCouponStore();
const { map, isLoaded, error: mapsError, initMap, addCleanMarker, addHtmlMarker, setCenter, setZoom, addMarker, clearAllOverlays } = useGoogleMaps();
const { map, isLoaded, error: mapsError, initMap, addCleanMarker, addHtmlMarker, setCenter, setZoom, addMarker } = useGoogleMaps();
const { estasCargando: estasCargandoRuta, errorRuta } = useDirectionsRoute();
const { encontrarParadaCercana, limpiarCaminata, paradaCercana, distanciaMetros, duracionCaminata } = useParadaCercana();
const { encontrarParadaCercana, paradaCercana, distanciaMetros, duracionCaminata } = useParadaCercana();
const { calcularETA, busesActivos, cargando: etaCargando } = useETA();
const { procesarSeleccionDeRuta } = useFlujoPrincipal();
@ -107,7 +107,7 @@ function closeUberSearch() {
}
async function clearAllMapData() {
console.log('🤖 JARVIS: Iniciando PURGA nuclear...');
console.log('🤖 JARVIS: Iniciando PURGA nuclear centralizada...');
// 1. UI inmediata
showUberSearch.value = false;
@ -124,85 +124,23 @@ async function clearAllMapData() {
routeStore.clearSelection();
lastProcessedRouteId.value = null;
// 4. Limpiar markers locales
const sweep = (arrayRef: any) => {
if (!arrayRef.value) return;
arrayRef.value.forEach((m: any) => {
try { if (m && m.setMap) m.setMap(null); } catch (e) {}
});
arrayRef.value = [];
};
sweep(markers);
sweep(promoMarkers);
// Limpiar unidades de transporte
if (unitMarkers.value) {
unitMarkers.value.forEach((m: any) => {
try { if (m && m.setMap) m.setMap(null); } catch (e) {}
});
unitMarkers.value.clear();
}
// 5. Limpiar polilíneas (CORREGIDO: agregar walkingPolylineBorder)
if (polyline.value) {
polyline.value.setMap(null);
polyline.value = null;
}
if (walkingPolyline.value) {
walkingPolyline.value.setMap(null);
walkingPolyline.value = null;
}
// ✅ NUEVO: limpiar el borde blanco de la ruta caminando
if (walkingPolylineBorder.value) {
walkingPolylineBorder.value.setMap(null);
walkingPolylineBorder.value = null;
}
// 6. Limpiar pulso de parada óptima (CORREGIDO)
if (optimalStopPulse.value) {
try {
// Intentar setMap primero
if (typeof optimalStopPulse.value.setMap === 'function') {
optimalStopPulse.value.setMap(null);
}
// Si es un overlay HTML, también intentar remove()
if (typeof optimalStopPulse.value.remove === 'function') {
optimalStopPulse.value.remove();
}
// Si tiene onRemove (OverlayView pattern)
if (typeof optimalStopPulse.value.onRemove === 'function') {
optimalStopPulse.value.onRemove();
}
} catch(e) {
console.warn('SIBU | No se pudo limpiar optimalStopPulse:', e);
}
optimalStopPulse.value = null;
}
// 7. Limpiar composables
limpiarCaminata();
// 8. Barrido profundo de Google Maps overlays
if (typeof clearAllOverlays === 'function') {
try { clearAllOverlays(); } catch (e) {}
}
// 9. Purgación centralizada (useMapState)
// 4. LIMPIEZA CENTRALIZADA (useMapState)
// Esto limpia markers, renderers, polylines, overlays HTML, etc.
limpiarTodoCentralizado();
// 10. Restaurar SOLO el marcador del usuario
// 5. Limpiar referencias locales del componente (aunque no tengan mapa asignado ya)
markers.value = [];
promoMarkers.value = [];
unitMarkers.value.clear();
polyline.value = null;
walkingPolyline.value = null;
walkingPolylineBorder.value = null;
optimalStopPulse.value = null;
// 6. Restaurar SOLO el marcador del usuario si tenemos ubicación
await nextTick();
if (userCoords.value) {
const { lat, lng } = userCoords.value;
// Limpiar marcador anterior del usuario
if (userMarker.value) {
try {
if (userMarker.value.setMap) userMarker.value.setMap(null);
if (userMarker.value.remove) userMarker.value.remove();
} catch(e) {}
}
// Redibujar solo el sonar del usuario
userMarker.value = addHtmlMarker(
{ lat, lng },
sonarHtml,
@ -210,7 +148,7 @@ async function clearAllMapData() {
);
}
console.log('🤖 JARVIS: Purga completada. Solo queda el usuario ✓');
console.log('🤖 JARVIS: Purga completada ✓');
} catch (err) {
console.error('❌ JARVIS: Error en purga:', err);
}
@ -758,6 +696,8 @@ function calculateWalkingPath(origin: { lat: number, lng: number }, targetStop:
if (walkingPolyline.value) walkingPolyline.value.setMap(null);
if (walkingPolylineBorder.value) walkingPolylineBorder.value.setMap(null);
const { registrarPolyline: regPoly } = useMapState();
// CAPA 1: Borde blanco (Para dar contraste estilo Google Maps)
walkingPolylineBorder.value = new google.maps.Polyline({
path: route.overview_path,
@ -768,6 +708,7 @@ function calculateWalkingPath(origin: { lat: number, lng: number }, targetStop:
map: map.value,
zIndex: 5
});
regPoly(walkingPolylineBorder.value);
// CAPA 2: Línea Indigo Central (La ruta principal)
walkingPolyline.value = new google.maps.Polyline({
@ -779,6 +720,7 @@ function calculateWalkingPath(origin: { lat: number, lng: number }, targetStop:
map: map.value,
zIndex: 10
});
regPoly(walkingPolyline.value);
// Ajustar zoom para mostrar toda la ruta de caminata
if (map.value) {