File

projects/prestations-ng/src/foehn-page/foehn-transmit-waiting-modal/demande-transmit-interceptor.ts

Index

Properties
Methods
Accessors

Constructor

constructor(transmitModalService: FoehnTransmitWaitingModalService)
Parameters :
Name Type Optional
transmitModalService FoehnTransmitWaitingModalService No

Methods

Private buildTransmitUrl
buildTransmitUrl()
Returns : string
intercept
intercept(request: HttpRequest<>, next: HttpHandler)
Parameters :
Name Type Optional
request HttpRequest<> No
next HttpHandler No
Returns : Observable<HttpEvent<>>

Properties

Private _prefix
Type : string

Accessors

prefix
setprefix(prefix: string)
Parameters :
Name Type Optional
prefix string No
Returns : void
import {
    HTTP_INTERCEPTORS,
    HttpEvent,
    HttpEventType,
    HttpHandler,
    HttpInterceptor,
    HttpRequest,
    HttpResponse
} from '@angular/common/http';
import { ExistingProvider, Injectable } from '@angular/core';
import { Observable, tap, throwError } from 'rxjs';
import { catchError } from 'rxjs/operators';

import { FoehnTransmitWaitingModalService } from './foehn-transmit-waiting-modal.service';

@Injectable({
    providedIn: 'root'
})
export class DemandeTransmitInterceptor implements HttpInterceptor {
    private _prefix: string;

    constructor(
        private transmitModalService: FoehnTransmitWaitingModalService
    ) {}

    set prefix(prefix: string) {
        this._prefix = prefix;
    }

    intercept(
        request: HttpRequest<unknown>,
        next: HttpHandler
    ): Observable<HttpEvent<unknown>> {
        return next.handle(request).pipe(
            tap((httpEvent: HttpEvent<unknown>) => {
                if (request.url.search(this.buildTransmitUrl()) === -1) {
                    return;
                }
                if (httpEvent.type === HttpEventType.Sent) {
                    this.transmitModalService.toggleModalVisibility(true);
                }
                if (httpEvent instanceof HttpResponse) {
                    this.transmitModalService.toggleModalVisibility(false);
                }
            }),
            catchError((err: unknown) => {
                this.transmitModalService.toggleModalVisibility(false);
                return throwError(() => err);
            })
        );
    }

    private buildTransmitUrl(): string {
        if (!this._prefix) {
            return 'api/transmission';
        }
        return `api/${this._prefix}/transmission`;
    }
}

export const DEMANDE_TRANSMIT_INTERCEPTOR_PROVIDER: ExistingProvider[] = [
    {
        provide: HTTP_INTERCEPTORS,
        useExisting: DemandeTransmitInterceptor,
        multi: true
    }
];

results matching ""

    No results matching ""