+
+
~{{ formatDurationMinutes(bus.etaMinutos) }}
- min
+ min
+
+
+
+ {{ Math.abs(bus.etaMinutos) }}
+ min
-
-
+
+
En Vía
-
+
Programado
-
- Ya pasó
+
+ Hace poco
@@ -197,8 +202,8 @@ const showTooltip = ref(false);
const upcomingBuses = computed(() => props.buses.filter(b => b.estado !== 'pasó'));
const lastPastBus = computed(() => {
const pastBuses = props.buses.filter(b => b.estado === 'pasó');
- // useETA ordena por etaMinutos asc, así que en negativos (-20, -10, -5) el último es el más reciente
- return pastBuses.length > 0 ? pastBuses[pastBuses.length - 1] : null;
+ // useETA ordena pasó descendente (más reciente primero), tomamos [0]
+ return pastBuses.length > 0 ? pastBuses[0] : null;
});
const displayBuses = computed(() => {
diff --git a/frontend/src/composables/useETA.ts b/frontend/src/composables/useETA.ts
index 4812d87..f74d6f0 100644
--- a/frontend/src/composables/useETA.ts
+++ b/frontend/src/composables/useETA.ts
@@ -159,9 +159,9 @@ export function useETA() {
estado = 'pasó';
}
- // Conservar buses que pasaron hace poco (ej: últimos 30 minutos)
- // para que el usuario sepa que acaba de perder uno
- if (etaMinutos < -30) continue;
+ // Conservar buses que pasaron en la última hora y media
+ // para que el usuario siempre vea el bus anterior
+ if (etaMinutos < -90) continue;
resultados.push({
horario_id: h.id,
@@ -175,6 +175,8 @@ export function useETA() {
resultados.sort((a, b) => {
const prioridad = { 'en_camino': 0, 'próximo': 1, 'pasó': 2 };
if (prioridad[a.estado] !== prioridad[b.estado]) return prioridad[a.estado] - prioridad[b.estado];
+ // Para pasó: ordenar descendente (menos negativo primero = más reciente primero)
+ if (a.estado === 'pasó') return b.etaMinutos - a.etaMinutos;
return a.etaMinutos - b.etaMinutos;
});