Browse Source

Add HttpContext variable and skip it http interceptor logic when it is true

pull/15491/head
Mahmut Gundogdu 4 years ago
parent
commit
4a9f0ba8ae
  1. 30
      npm/ng-packs/packages/core/src/lib/clients/http.client.ts
  2. 1
      npm/ng-packs/packages/core/src/lib/clients/index.ts
  3. 4
      npm/ng-packs/packages/core/src/lib/interceptors/api.interceptor.ts
  4. 3
      npm/ng-packs/packages/core/src/lib/tokens/http-context.token.ts
  5. 1
      npm/ng-packs/packages/core/src/public-api.ts

30
npm/ng-packs/packages/core/src/lib/clients/http.client.ts

@ -0,0 +1,30 @@
import { HttpClient, HttpContext, HttpRequest } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import { IS_EXTERNAL_REQUEST } from '../tokens/http-context.token';
// source : https://github.com/armanozak/demo-angular-server-specific-interceptors
@Injectable({
providedIn: 'root',
})
export class ExternalHttpClient extends HttpClient {
override request(
first: string | HttpRequest<any>,
url?: string,
options: RequestOptions = {},
): Observable<any> {
if (typeof first === 'string') {
this.#setPlaceholderContext(options);
return super.request(first, url, options);
}
this.#setPlaceholderContext(first);
return super.request(first);
}
#setPlaceholderContext(optionsOrRequest: { context?: HttpContext }) {
optionsOrRequest.context ??= new HttpContext();
optionsOrRequest.context.set(IS_EXTERNAL_REQUEST, true);
}
}
type RequestOptions = Parameters<HttpClient['request']>[2];

1
npm/ng-packs/packages/core/src/lib/clients/index.ts

@ -0,0 +1 @@
export * from './http.client';

4
npm/ng-packs/packages/core/src/lib/interceptors/api.interceptor.ts

@ -5,6 +5,7 @@ import { finalize } from 'rxjs/operators';
import { SessionStateService } from '../services/session-state.service';
import { HttpWaitService } from '../services/http-wait.service';
import { TENANT_KEY } from '../tokens/tenant-key.token';
import { IS_EXTERNAL_REQUEST } from '../tokens/http-context.token';
@Injectable({
providedIn: 'root',
@ -18,6 +19,9 @@ export class ApiInterceptor implements HttpInterceptor {
) {}
intercept(request: HttpRequest<any>, next: HttpHandler) {
if (request.context?.get(IS_EXTERNAL_REQUEST)) {
return next.handle(request);
}
this.httpWaitService.addRequest(request);
return next
.handle(

3
npm/ng-packs/packages/core/src/lib/tokens/http-context.token.ts

@ -0,0 +1,3 @@
import { HttpContextToken } from '@angular/common/http';
export const IS_EXTERNAL_REQUEST = new HttpContextToken<boolean>(() => false);

1
npm/ng-packs/packages/core/src/public-api.ts

@ -23,3 +23,4 @@ export * from './lib/strategies';
export * from './lib/tokens';
export * from './lib/utils';
export * from './lib/validators';
export * from './lib/clients';

Loading…
Cancel
Save