Browse Source

feature(core): add loader actions & dispatch from interceptor

pull/1562/head
mehmet-erim 7 years ago
parent
commit
a2d00356ac
  1. 1
      npm/ng-packs/packages/core/src/lib/actions/index.ts
  2. 11
      npm/ng-packs/packages/core/src/lib/actions/loader.actions.ts
  3. 17
      npm/ng-packs/packages/core/src/lib/interceptors/api.interceptor.ts

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

@ -1,4 +1,5 @@
export * from './config.actions'; export * from './config.actions';
export * from './loader.actions';
export * from './profile.actions'; export * from './profile.actions';
export * from './rest.actions'; export * from './rest.actions';
export * from './session.actions'; export * from './session.actions';

11
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<any>) {}
}
export class LoaderStop {
static readonly type = '[Loader] Stop';
constructor(public payload: HttpRequest<any>) {}
}

17
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 { OAuthService } from 'angular-oauth2-oidc';
import { Store } from '@ngxs/store'; import { Store } from '@ngxs/store';
import { SessionState } from '../states'; import { SessionState } from '../states';
import { LoaderStart, LoaderStop } from '../actions/loader.actions';
import { finalize } from 'rxjs/operators';
@Injectable() @Injectable()
export class ApiInterceptor implements HttpInterceptor { export class ApiInterceptor implements HttpInterceptor {
constructor(private oAuthService: OAuthService, private store: Store) {} constructor(private oAuthService: OAuthService, private store: Store) {}
intercept(request: HttpRequest<any>, next: HttpHandler) { intercept(request: HttpRequest<any>, next: HttpHandler) {
this.store.dispatch(new LoaderStart(request));
const headers = {} as any; const headers = {} as any;
const token = this.oAuthService.getAccessToken(); const token = this.oAuthService.getAccessToken();
if (!request.headers.has('Authorization') && token) { if (!request.headers.has('Authorization') && token) {
headers['Authorization'] = `Bearer ${token}`; headers['Authorization'] = `Bearer ${token}`;
@ -20,10 +25,12 @@ export class ApiInterceptor implements HttpInterceptor {
headers['Accept-Language'] = lang; headers['Accept-Language'] = lang;
} }
return next.handle( return next
request.clone({ .handle(
setHeaders: headers, request.clone({
}), setHeaders: headers,
); }),
)
.pipe(finalize(() => this.store.dispatch(new LoaderStop(request))));
} }
} }

Loading…
Cancel
Save