mirror of
https://code.equilibrium.co.ao/ITO/doneit-web.git
synced 2026-04-19 21:06:06 +00:00
51 lines
1.6 KiB
TypeScript
51 lines
1.6 KiB
TypeScript
|
|
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.`;
|
||
|
|
})
|
||
|
|
);
|
||
|
|
}
|
||
|
|
}
|