first commit
This commit is contained in:
@@ -0,0 +1,116 @@
|
||||
import { Component, OnInit, signal } from '@angular/core';
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { MeteocatService } from '../../services/meteocat.service';
|
||||
import { Municipi } from '../../models/municipi.model';
|
||||
import { PrediccioDiaria } from '../../models/prediccio-diaria.model';
|
||||
import { PrediccioHoraria } from '../../models/prediccio-horaria.model';
|
||||
import { EstacioMesCercanaResponse } from '../../models/estacio-mes-cercana.model';
|
||||
import { PrediccioDiariaComponent } from '../prediccio-diaria/prediccio-diaria';
|
||||
import { PrediccioHorariaComponent } from '../prediccio-horaria/prediccio-horaria';
|
||||
|
||||
@Component({
|
||||
selector: 'app-home',
|
||||
imports: [CommonModule, PrediccioDiariaComponent, PrediccioHorariaComponent],
|
||||
templateUrl: './home.html',
|
||||
styleUrl: './home.scss',
|
||||
})
|
||||
export class Home implements OnInit {
|
||||
// Lliçà d'Amunt por defecto
|
||||
readonly municipiCodi = '081075';
|
||||
|
||||
municipi = signal<Municipi | null>(null);
|
||||
prediccioDiaria = signal<PrediccioDiaria[]>([]);
|
||||
prediccioHoraria = signal<PrediccioHoraria[]>([]);
|
||||
estacioInfo = signal<EstacioMesCercanaResponse | null>(null);
|
||||
|
||||
loading = signal(true);
|
||||
error = signal<string | null>(null);
|
||||
|
||||
constructor(private meteocatService: MeteocatService) {}
|
||||
|
||||
ngOnInit(): void {
|
||||
this.loadWeatherData();
|
||||
}
|
||||
|
||||
loadWeatherData(): void {
|
||||
this.loading.set(true);
|
||||
this.error.set(null);
|
||||
|
||||
// Cargar municipio
|
||||
this.meteocatService.getMunicipiByCode(this.municipiCodi).subscribe({
|
||||
next: (municipi) => {
|
||||
this.municipi.set(municipi);
|
||||
},
|
||||
error: (err) => {
|
||||
console.error('Error al cargar municipio:', err);
|
||||
this.error.set('Error al cargar información del municipio');
|
||||
}
|
||||
});
|
||||
|
||||
// Cargar predicción diaria
|
||||
this.meteocatService.getPrediccioDiaria(this.municipiCodi).subscribe({
|
||||
next: (prediccions) => {
|
||||
this.prediccioDiaria.set(prediccions);
|
||||
},
|
||||
error: (err) => {
|
||||
console.error('Error al cargar predicción diaria:', err);
|
||||
this.error.set('Error al cargar predicción diaria');
|
||||
}
|
||||
});
|
||||
|
||||
// Cargar predicción horaria
|
||||
this.meteocatService.getPrediccioHoraria(this.municipiCodi).subscribe({
|
||||
next: (prediccions) => {
|
||||
// Filtrar solo predicciones desde la hora actual y limitamos a 48 horas
|
||||
const now = new Date();
|
||||
const filtered = prediccions
|
||||
.filter(p => {
|
||||
const predDate = new Date(p.dataHora);
|
||||
return predDate >= now;
|
||||
})
|
||||
.slice(0, 48); // Limitar a 48 horas
|
||||
|
||||
this.prediccioHoraria.set(filtered);
|
||||
this.loading.set(false);
|
||||
},
|
||||
error: (err) => {
|
||||
console.error('Error al cargar predicción horaria:', err);
|
||||
this.error.set('Error al cargar predicción horaria');
|
||||
this.loading.set(false);
|
||||
}
|
||||
});
|
||||
|
||||
// Cargar estación XEMA más cercana
|
||||
this.meteocatService.getEstacioCercana(this.municipiCodi).subscribe({
|
||||
next: (response) => {
|
||||
this.estacioInfo.set(response);
|
||||
},
|
||||
error: (err) => {
|
||||
console.error('Error al cargar estación XEMA:', err);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
getCurrentTemperature(): number | null {
|
||||
const horariaData = this.prediccioHoraria();
|
||||
if (horariaData && horariaData.length > 0) {
|
||||
return horariaData[0].temperatura;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
getTodayMinMax(): { min: number; max: number } | null {
|
||||
const diariaData = this.prediccioDiaria();
|
||||
if (diariaData && diariaData.length > 0) {
|
||||
return {
|
||||
min: diariaData[0].temperaturaMinima,
|
||||
max: diariaData[0].temperaturaMaxima
|
||||
};
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
refresh(): void {
|
||||
this.loadWeatherData();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user