add http interceptor

This commit is contained in:
Peter Maquiran
2023-07-11 17:54:08 +01:00
parent 12178d6c3a
commit 9b690c3848
7 changed files with 118 additions and 38 deletions
@@ -0,0 +1,50 @@
import { HttpHandler, HttpRequest, HttpResponse } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { finalize, tap } from 'rxjs/operators';
import { BackgroundService } from './background.service';
@Injectable({
providedIn: 'root'
})
export class LoggingInterceptorService {
constructor(
private backgroundservice: BackgroundService,
) {}
intercept(req: HttpRequest<any>, next: HttpHandler) {
const started = Date.now();
let ok: string;
// extend server response observable with logging
return next.handle(req)
.pipe(
tap({
// Succeeds when there is a response; ignore other events
next: (event) => {
ok = event instanceof HttpResponse ? 'succeeded' : ''
if(ok == 'succeeded' || (typeof event['status'] == 'number' && event['status'] !=0)) {
// set to online
this.backgroundservice.online();
}
},
// Operation failed; error is an HttpErrorResponse
error: (error) => {
if (error.status === 0 && error.error instanceof ProgressEvent && !req.url.includes('UserAuthentication/Login')) {
// A client-side or network error occurred. Handle it accordingly.
this.backgroundservice.offline();
}
}
}),
// Log when response observable either completes or errors
finalize(() => {
// const elapsed = Date.now() - started;
// const msg = `${req.method} "${req.urlWithParams}"
// ${ok} in ${elapsed} ms.`;
})
);
}
}