import { HttpErrorResponse } from '@angular/common/http'; import { Component } from '@angular/core'; import { MatDialog } from '@angular/material/dialog'; import { LoaderService } from 'src/app/components/loader/loader.service'; import { MeterData } from 'src/app/core/dataModels/Meterdata'; import { UsageType } from 'src/app/core/dataModels/UsageType'; import { DatabaseService } from 'src/app/core/services/database.service'; import { ErrorService } from 'src/app/core/services/error.service'; import { GlobalService } from 'src/app/core/services/global.service'; import { MeterDataAddDialogComponent } from 'src/app/dialogs/meter-data-add-dialog/meter-data-add-dialog.component'; @Component({ selector: 'app-dashboard', templateUrl: './dashboard.component.html', styleUrls: ['./dashboard.component.scss'], }) export class DashboardComponent { usageTypes = UsageType; meterDataEnergy: MeterData[] = []; meterDataWater: MeterData[] = []; meterDataEnergyDTO: MeterData[] = []; meterDataWaterDTO: MeterData[] = []; energyAverageAmountLastYear1Log: number = 0; energyAverageAmountLastYear1Hem: number = 0; waterAverageAmountLastYear: number = 0; displayedColumns: string[] = ['date', 'amount', 'meter']; constructor( private dataService: DatabaseService, private loaderService: LoaderService, private globalService: GlobalService, private errorService: ErrorService, private dialog: MatDialog ) { this.loadMeterData(); } loadMeterData(): void { this.loaderService.show(); this.dataService.getMeterData().subscribe({ next: (data) => { this.splitMeterData(data); this.loaderService.hide(); console.log('Meter data:', data); }, error: (error: HttpErrorResponse) => { this.errorService.handleError(error); this.loaderService.hide(); }, }); } splitMeterData(meterData: MeterData[]): void { if (meterData) { meterData.forEach((data) => { if (data.type === this.usageTypes.ENERGY) { this.meterDataEnergy.push(data); } else if (data.type === this.usageTypes.WATER) { this.meterDataWater.push(data); } }); this.initEnergyMeterData(); this.initWaterMeterDate(); } } initEnergyMeterData(): void { this.meterDataEnergy = this.globalService.sortMeterData( this.meterDataEnergy ); this.meterDataEnergyDTO = this.meterDataEnergy; } initWaterMeterDate(): void { this.meterDataWater = this.globalService.sortMeterData(this.meterDataWater); this.meterDataWaterDTO = this.meterDataWater; } addMeterData(): void { const dialogRef = this.dialog.open(MeterDataAddDialogComponent, { width: '400px', data: {}, restoreFocus: false, }); dialogRef.afterClosed().subscribe((newMeterData: MeterData) => { console.log({ newMeterData }); if (newMeterData) { this.dataService.addMeterData(newMeterData).subscribe({ next: (meterData: MeterData) => { console.log({ meterData }); }, error: (error: HttpErrorResponse) => { this.errorService.handleError(error); this.loaderService.hide(); }, }); } }); } }