feat: actualización a v1.1.9 con Agenda interactiva y correcciones visuales

This commit is contained in:
Carlos Tello
2026-03-27 07:43:41 -03:00
parent d3243c0166
commit f1da6175ae
20 changed files with 1525 additions and 404 deletions
+60 -8
View File
@@ -13,7 +13,7 @@
</ion-buttons>
</div>
</ion-toolbar>
<ion-toolbar color="light" class="ion-no-padding">
<div class="view-segment">
<ion-segment [(ngModel)]="viewMode" (ionChange)="onViewModeChange()" color="primary">
@@ -71,7 +71,7 @@
realiza en la memoria de tu teléfono.</p>
<p><strong>Sin Rastreadores:</strong> No incluimos publicidad, telemetría ni analíticas de terceros.</p>
<p class="ion-text-center"><small>Versión 1.1.5 - 25/03/2026</small></p>
<p class="ion-text-center"><small>Versión 1.1.9 - 26/03/2026</small></p>
</ion-content>
</ng-template>
</ion-modal>
@@ -82,6 +82,38 @@
refreshingText="Actualizando..."></ion-refresher-content>
</ion-refresher>
<!-- Banner: Próxima Clase -->
<div class="proxima-clase-container" *ngIf="viewMode === 'favoritos' && proximaClase && !loading">
<ion-card class="proxima-clase-card" [class.urgente]="proximaClase.diffMs > 0 && proximaClase.diffMs <= 1800000">
<ion-card-content (click)="verAgendaMateria(proximaClase.item)">
<div class="proxima-header">
<div class="proxima-label">
<ion-icon name="time-outline"></ion-icon>
<span>{{ proximaClase.label }}</span>
</div>
<ion-chip [color]="countdownColor(proximaClase.diffMs)" class="countdown-chip"
[class.pulse-chip]="proximaClase.diffMs > 0 && proximaClase.diffMs <= 1800000">
<ion-icon name="alarm-outline"></ion-icon>
<ion-label>{{ formatCountdown(proximaClase.diffMs) }}</ion-label>
</ion-chip>
</div>
<p class="proxima-asignatura">{{ proximaClase.item.asignatura }}</p>
<div class="proxima-detalles">
<span class="proxima-aula">
<ion-icon name="location-outline"></ion-icon>
Aula {{ proximaClase.item.aula }}
</span>
<span class="proxima-hora">
<ion-icon name="calendar-outline"></ion-icon>
{{ proximaClase.item.dia }} {{ proximaClase.item.horario }}
</span>
</div>
</ion-card-content>
</ion-card>
</div>
<div class="loading-container" *ngIf="loading">
<ion-spinner name="crescent" color="primary"></ion-spinner>
<p>Cargando cartelera...</p>
@@ -102,26 +134,43 @@
<ion-card-title>{{ item.asignatura }}</ion-card-title>
</div>
<div class="card-actions">
<!-- Compartir siempre visible -->
<ion-icon class="share-icon" name="share-social-outline" color="medium"
(click)="shareItem(item)"></ion-icon>
<ion-icon class="fav-icon" [name]="isFavorito(item.codigo) ? 'star' : 'star-outline'"
[color]="isFavorito(item.codigo) ? 'warning' : 'medium'" (click)="toggleFavorito(item)"></ion-icon>
<!-- Icono condicional: Hamburguesa en favoritos, Estrella en cartelera -->
<ion-icon class="menu-icon"
[name]="viewMode === 'favoritos' ? 'menu-outline' : (isFavorito(item.codigo) ? 'star' : 'star-outline')"
[color]="(viewMode === 'todas' && isFavorito(item.codigo)) ? 'warning' : 'medium'"
(click)="openMateriaActions(item)"></ion-icon>
</div>
</div>
<!-- Indicador de Próximo Evento (Agenda) -->
<div class="evento-badge-container" *ngIf="getProximoEvento(item.codigo) as proximo">
<ion-badge [color]="isEventoUrgente(proximo.fecha) ? 'danger' : 'secondary'" class="evento-badge">
<ion-icon [name]="proximo.tipo === 'TP' ? 'document-text-outline' : 'calendar-outline'"></ion-icon>
{{ proximo.tipo }}: {{ formatFechaEvento(proximo.fecha) }}
</ion-badge>
</div>
</ion-card-header>
<ion-card-content>
<ion-card-content (click)="verAgendaMateria(item)">
<p><strong>Código:</strong> {{ item.codigo }}</p>
<div class="aula-container">
<span class="aula-tag">{{ item.aula }}</span>
</div>
<p class="schedule-text">{{ item.dia }} - {{ item.horario }}</p>
<div *ngIf="item.link" class="link-container">
<ion-button fill="outline" color="primary" size="small" expand="block" (click)="openLink(item.link!)">
<ion-button fill="outline" color="primary" size="small" expand="block"
(click)="openLink(item.link!); $event.stopPropagation()">
<ion-icon slot="start" name="videocam-outline"></ion-icon>
Ingresar a Clase Virtual
</ion-button>
</div>
</ion-card-content>
</ion-card>
</ion-list>
@@ -133,9 +182,12 @@
<ion-footer>
<ion-toolbar color="primary" class="ion-no-padding">
<div class="footer-content" (click)="openLink('https://www.google.com/maps/place/UdelaCiudad/data=!4m2!3m1!1s0x0:0x6dab35ab5ab98245?sa=X&ved=1t:2428&ictx=111')" style="cursor: pointer;" title="Mostrar en el mapa">
<div class="footer-content"
(click)="openLink('https://www.google.com/maps/place/UdelaCiudad/data=!4m2!3m1!1s0x0:0x6dab35ab5ab98245?sa=X&ved=1t:2428&ictx=111')"
style="cursor: pointer;" title="Mostrar en el mapa">
<div class="footer-text">
<small><ion-icon name="location-outline" style="vertical-align: bottom;"></ion-icon> Tte. Gral. Juan Domingo Perón 802 (C1038AAR)<br />CABA - Argentina</small>
<small><ion-icon name="location-outline" style="vertical-align: bottom;"></ion-icon> Tte. Gral. Juan Domingo
Perón 802 (C1038AAR)<br />CABA - Argentina</small>
</div>
</div>
</ion-toolbar>