import {Injectable} from '@angular/core'; import { HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, // HttpResponse, // HttpClient, } from '@angular/common/http'; import { NbComponentStatus, } from '@nebular/theme'; import {Observable, of, throwError} from 'rxjs'; import {catchError, // filter, // map, } from 'rxjs/internal/operators'; import {Router} from '@angular/router'; import { environment } from '../../environments/environment'; import { MessageToasterService } from '../services/message-toaster.service'; @Injectable({ providedIn: 'root', }) export class CommonInterceptorService implements HttpInterceptor { environment: any = environment; constructor( private router: Router, private toasterService: MessageToasterService, ) { } intercept(req: HttpRequest, next: HttpHandler): Observable> { let secureReq = req.clone(); if (req.body) { secureReq = req.clone({ body: req.body, }); // secureReq.body.err = 'hello error!'; } if (!secureReq.url.startsWith('http') && !secureReq.url.endsWith('environment.prod.json')) { let url = secureReq.url; if (!url.startsWith('/')) { url = '/' + url; } secureReq = secureReq.clone({ url: this.environment.apiHost + url, }); } return next.handle(secureReq).pipe( catchError((err: HttpErrorResponse) => this.handleError(err)), ); } private handleError( event: HttpErrorResponse, ): Observable { let message = ''; let errorRes = null; let errorType = ''; let cssType: NbComponentStatus ; switch (event.status) { case 400: message = event.error.errorInfo.message; errorType = 'Business Error'; cssType = 'warning'; if (event.error.errorDetail !== null) { message += '\n' + event.error.errorDetail; } errorRes = of(event); break; case 401: message = 'not login'; errorType = 'Business Error'; cssType = 'warning'; this.router.navigate(['/']); errorRes = of(event) ; break; case 504: message = 'there some error was happend on server.'; errorType = 'System Error'; cssType = 'danger'; this.router.navigate(['/']); errorRes = of(event) ; break; default: errorRes = throwError(event) ; break; } this.toasterService.makeToast(errorType, message, cssType, 5000); return errorRes; } }