diff --git a/src/Vegasco-Web/src/app/modules/entries/entries/entries.component.ts b/src/Vegasco-Web/src/app/modules/entries/entries/entries.component.ts index 803e9e5..93de58e 100644 --- a/src/Vegasco-Web/src/app/modules/entries/entries/entries.component.ts +++ b/src/Vegasco-Web/src/app/modules/entries/entries/entries.component.ts @@ -11,10 +11,13 @@ import { SelectModule } from 'primeng/select'; import { SkeletonModule } from 'primeng/skeleton'; import { BehaviorSubject, + catchError, combineLatest, + EMPTY, map, Observable, - startWith + startWith, + throwError } from 'rxjs'; import { EntriesOverviewService } from './services/entries-overview.service'; import { EntryCardComponent } from './components/entry-card/entry-card.component'; @@ -22,6 +25,7 @@ import { matAddSharp, } from '@ng-icons/material-icons/sharp'; import { NgIconComponent, provideIcons } from '@ng-icons/core'; +import { HttpErrorResponse } from '@angular/common/http'; @Component({ selector: 'app-entries', @@ -62,7 +66,10 @@ export class EntriesComponent { constructor() { const entries = this.entriesOverviewService.getEntries() - .pipe(takeUntilDestroyed()); + .pipe( + takeUntilDestroyed(), + catchError((error) => this.handleGetEntriesError(error)) + ); this.consumptionEntries$ = combineLatest([ entries, @@ -97,4 +104,32 @@ export class EntriesComponent { detail: 'Der Eintrag wurde erfolgreich gelöscht.', }); } + + private handleGetEntriesError(error: unknown): Observable { + if (!(error instanceof HttpErrorResponse)) { + return throwError(() => new Error('An unexpected error occurred')); + } + + switch (true) { + case error.status >= 500 && error.status <= 599: + this.messageService.add({ + severity: 'error', + summary: 'Serverfehler', + detail: + 'Beim Abrufen der Einträge ist ein Fehler aufgetreten. Bitte versuche es erneut.', + }); + break; + default: + console.error(error); + this.messageService.add({ + severity: 'error', + summary: 'Unerwarteter Fehler', + detail: + 'Beim Abrufen der Einträge hat der Server eine unerwartete Antwort zurückgegeben.', + }); + break; + } + + return EMPTY; + } }