File

src/lib/core/network-loading.service.ts

Constructor

constructor(plex: Plex, networkLoading: boolean)

Methods

intercept
intercept(req: HttpRequest, next: HttpHandler)
Returns: Observable<HttpEvent<any>>

Properties

count
count: number
Default value: 0
import { Observable } from 'rxjs';
import { finalize } from 'rxjs/operators';
import { Injectable, InjectionToken, Inject } from '@angular/core';
import { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent } from '@angular/common/http';
import { Plex } from './service';

export const NETWORK_LOADING = new InjectionToken<boolean>('network-loading');

@Injectable()
export class NetworkLoadingInterceptor implements HttpInterceptor {

    count = 0;

    constructor(
        private plex: Plex,
        @Inject(NETWORK_LOADING) private networkLoading: boolean
    ) { }

    intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
        if (!this.networkLoading) {
            return next.handle(req);
        }

        if (['POST', 'PUT', 'PATCH', 'DELETE'].includes(req.method)) {
            this.plex.updateNetwork('inc');
        }

        this.plex.showLoader();

        this.count++;

        return next.handle(req).pipe(
            finalize(() => {
                this.count--;

                this.plex.hideLoader();

                if (['POST', 'PUT', 'PATCH', 'DELETE'].includes(req.method)) {
                    this.plex.updateNetwork('dec');
                }
            })
        );
    }
}

results matching ""

    No results matching ""