/* * Copyright (C) 2022 StApps * This program is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, version 3. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * this program. If not, see . */ import {Injectable} from '@angular/core'; import {HttpRequest, HttpHandler, HttpEvent, HttpInterceptor, HttpErrorResponse} from '@angular/common/http'; import {Observable, throwError} from 'rxjs'; import {NGXLogger} from 'ngx-logger'; import {catchError} from 'rxjs/operators'; @Injectable() export class ServiceHandlerInterceptor implements HttpInterceptor { constructor(private readonly logger: NGXLogger) {} intercept(request: HttpRequest, next: HttpHandler): Observable> { return next.handle(request).pipe( // Fixes the issue of errors dropping into "toPromise()" // and being not able to catch it in the "caller methods" catchError((error: HttpErrorResponse) => { const errorMessage = error.error instanceof ErrorEvent ? `Error: ${error.error.message}` : `Error Code: ${error.status}, Message: ${error.message}`; this.logger.error(errorMessage); return throwError(error); }), ); } }