import { HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http'; import { Observable } from 'rxjs'; import { PoComponentInjectorService } from '../../services/po-component-injector/po-component-injector.service'; import { PoHttpRequesControltService } from './po-http-request-control-service'; /** * @description * * O serviço PO Http Request Interceptor realiza a contabilização de requisições pendentes na aplicação. * * Existe a possibilidade de não efetuar a contabilização das requisições pendentes, utilizando o parâmetro * `X-PO-No-Count-Pending-Requests`. Para isso deve ser informado no cabeçalho da requisição com o valor `'true'`, * por exemplo: * * ``` * ... * const headers = { 'X-PO-No-Count-Pending-Requests': 'true' }; * * this.http.get(`/customers/1`, { headers: headers }); * ... * * ``` * Para obter a quantidade de requisições pendentes, deve inscrever-se no método `getCountPendingRequests` do * serviço `PoHttpRequestInterceptorService`, com isso, ao realizar requisições utilizando `HttpClient`, * será retornado a quantidade de requisições pendentes. * * Também existe a possibildade de travar a tela e mostrar uma imagem de _loading_ durante o processamento de uma requisição * deve-se passar o parâmetro `X-PO-Screen-Lock` no cabeçalho da requisição com valor `'true'`. * * por exemplo: * * ``` * ... * const headers = { 'X-PO-Screen-Lock': 'true' }; * * this.http.get(`/customers/1`, { headers: headers }); * ... * * ``` * > Após a validação no interceptor, o parâmetro será removido do cabeçalho da requisição. * * ## Configuração * * É necessário configurar o `HttpClient` para utilizar os interceptors registrados via Dependency Injection (DI) * por meio da função `provideHttpClient(withInterceptorsFromDi())`. * * ### 1) NgModule * * ``` * import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'; * import { PoModule } from '@po-ui/ng-components'; * ... * * @NgModule({ * imports: [ * ... * PoModule * ], * declarations: [ * AppComponent, * ... * ], * providers: [ * provideHttpClient(withInterceptorsFromDi()), * ... * ], * bootstrap: [AppComponent] * }) * export class AppModule { } * ``` * * Ao importar o módulo `PoModule` na aplicação, o `po-http-request-interceptor` é automaticamente configurado sem a necessidade * de qualquer configuração extra. * * ### 2) Standalone * * No arquivo contendo a configuração da aplicação (geralmente `src/app/app.config.ts`), adicione os providers e configure o `HttpClient`, * como no exemplo abaixo: * * ``` * import { ApplicationConfig, importProvidersFrom } from '@angular/core'; * import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'; * import { provideAnimations } from '@angular/platform-browser/animations'; * import { PoHttpRequestModule } from '@po-ui/ng-components'; * * export const appConfig: ApplicationConfig = { * providers: [ * ... * provideHttpClient(withInterceptorsFromDi()), * importProvidersFrom([ * PoHttpRequestModule * ]), * ... * ] * }; * ``` * * ## Como usar * * Segue abaixo um exemplo de uso: * * ``` * import { HttpClient } from '@angular/common/http'; * * ... * * @Injectable({ * providedIn: 'root' * }) * export class CustomersService { * * headers = { 'X-PO-No-Count-Pending-Requests': true, 'X-PO-Screen-Lock': 'true' } * pendingRequests: number = 0; * subscription: Subscription; * * constructor( * private http: HttpClient, * private httpRequestInterceptor: PoHttpRequestInterceptorService) { } * * ngOnDestroy(): void { * this.subscription.unsubscribe(); * } * * ngOnInit(): void { * this.subscription = this.httpRequestInterceptor.getCountPendingRequests().subscribe(data => { * this.pendingRequests = data; * }); * } * * getCustomers() { * return this.http.get(`/customers/1`, { headers: headers }); * } * * ... * * } * ``` * * @example * * * * */ export declare class PoHttpRequestInterceptorService implements HttpInterceptor { private readonly controlHttpRequest; private readonly poComponentInjector; private loadingOverlayComponent; private pendingRequests; private overlayRequests; constructor(controlHttpRequest: PoHttpRequesControltService, poComponentInjector: PoComponentInjectorService); intercept(request: HttpRequest, next: HttpHandler): Observable>; getCountPendingRequests(): Observable; private buildLoading; private destroyLoading; private requestCloneWithoutHeaderParam; private setCountPendingRequests; private setCountOverlayRequests; }