From a2d00356acd4c0dec2e7bce188a8541b351d13ce Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Wed, 31 Jul 2019 15:10:07 +0300 Subject: [PATCH] feature(core): add loader actions & dispatch from interceptor --- .../packages/core/src/lib/actions/index.ts | 1 + .../core/src/lib/actions/loader.actions.ts | 11 +++++++++++ .../src/lib/interceptors/api.interceptor.ts | 17 ++++++++++++----- 3 files changed, 24 insertions(+), 5 deletions(-) create mode 100644 npm/ng-packs/packages/core/src/lib/actions/loader.actions.ts diff --git a/npm/ng-packs/packages/core/src/lib/actions/index.ts b/npm/ng-packs/packages/core/src/lib/actions/index.ts index 54a0e9ab48..cf05aac81d 100644 --- a/npm/ng-packs/packages/core/src/lib/actions/index.ts +++ b/npm/ng-packs/packages/core/src/lib/actions/index.ts @@ -1,4 +1,5 @@ export * from './config.actions'; +export * from './loader.actions'; export * from './profile.actions'; export * from './rest.actions'; export * from './session.actions'; diff --git a/npm/ng-packs/packages/core/src/lib/actions/loader.actions.ts b/npm/ng-packs/packages/core/src/lib/actions/loader.actions.ts new file mode 100644 index 0000000000..6338172a6e --- /dev/null +++ b/npm/ng-packs/packages/core/src/lib/actions/loader.actions.ts @@ -0,0 +1,11 @@ +import { HttpRequest } from '@angular/common/http'; + +export class LoaderStart { + static readonly type = '[Loader] Start'; + constructor(public payload: HttpRequest) {} +} + +export class LoaderStop { + static readonly type = '[Loader] Stop'; + constructor(public payload: HttpRequest) {} +} diff --git a/npm/ng-packs/packages/core/src/lib/interceptors/api.interceptor.ts b/npm/ng-packs/packages/core/src/lib/interceptors/api.interceptor.ts index d1465ff5a2..a29169de61 100644 --- a/npm/ng-packs/packages/core/src/lib/interceptors/api.interceptor.ts +++ b/npm/ng-packs/packages/core/src/lib/interceptors/api.interceptor.ts @@ -3,13 +3,18 @@ import { HttpInterceptor, HttpHandler, HttpRequest } from '@angular/common/http' import { OAuthService } from 'angular-oauth2-oidc'; import { Store } from '@ngxs/store'; import { SessionState } from '../states'; +import { LoaderStart, LoaderStop } from '../actions/loader.actions'; +import { finalize } from 'rxjs/operators'; @Injectable() export class ApiInterceptor implements HttpInterceptor { constructor(private oAuthService: OAuthService, private store: Store) {} intercept(request: HttpRequest, next: HttpHandler) { + this.store.dispatch(new LoaderStart(request)); + const headers = {} as any; + const token = this.oAuthService.getAccessToken(); if (!request.headers.has('Authorization') && token) { headers['Authorization'] = `Bearer ${token}`; @@ -20,10 +25,12 @@ export class ApiInterceptor implements HttpInterceptor { headers['Accept-Language'] = lang; } - return next.handle( - request.clone({ - setHeaders: headers, - }), - ); + return next + .handle( + request.clone({ + setHeaders: headers, + }), + ) + .pipe(finalize(() => this.store.dispatch(new LoaderStop(request)))); } }