From 931442d1afed1af608e00caf9afcf4465d6bfa4d Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Wed, 5 Aug 2020 14:05:29 +0300 Subject: [PATCH] feat: create OAuthConfigurationHandler --- .../packages/core/src/lib/handlers/index.ts | 1 + .../handlers/oauth-configuration.handler.ts | 35 +++++++++++++++++++ .../core/src/lib/states/config.state.ts | 11 ++---- 3 files changed, 38 insertions(+), 9 deletions(-) create mode 100644 npm/ng-packs/packages/core/src/lib/handlers/oauth-configuration.handler.ts diff --git a/npm/ng-packs/packages/core/src/lib/handlers/index.ts b/npm/ng-packs/packages/core/src/lib/handlers/index.ts index b666218d93..e11b317f45 100644 --- a/npm/ng-packs/packages/core/src/lib/handlers/index.ts +++ b/npm/ng-packs/packages/core/src/lib/handlers/index.ts @@ -1 +1,2 @@ +export * from './oauth-configuration.handler'; export * from './routes.handler'; diff --git a/npm/ng-packs/packages/core/src/lib/handlers/oauth-configuration.handler.ts b/npm/ng-packs/packages/core/src/lib/handlers/oauth-configuration.handler.ts new file mode 100644 index 0000000000..d9c6806900 --- /dev/null +++ b/npm/ng-packs/packages/core/src/lib/handlers/oauth-configuration.handler.ts @@ -0,0 +1,35 @@ +import { Inject, Injectable } from '@angular/core'; +import { Actions, ofActionSuccessful } from '@ngxs/store'; +import { OAuthService } from 'angular-oauth2-oidc'; +import compare from 'just-compare'; +import { filter, map } from 'rxjs/operators'; +import { SetEnvironment } from '../actions/config.actions'; +import { ABP } from '../models/common'; +import { CORE_OPTIONS } from '../tokens/options.token'; + +@Injectable({ + providedIn: 'root', +}) +export class OAuthConfigurationHandler { + constructor( + private actions: Actions, + private oAuthService: OAuthService, + @Inject(CORE_OPTIONS) private options: ABP.Root, + ) { + this.oAuthService.configure(this.options.environment.oAuthConfig); + + this.listenToSetEnvironment(); + } + + private listenToSetEnvironment() { + this.actions + .pipe(ofActionSuccessful(SetEnvironment)) + .pipe( + map(({ environment }: SetEnvironment) => environment.oAuthConfig), + filter(config => !compare(config, this.options.environment.oAuthConfig)), + ) + .subscribe(config => { + this.oAuthService.configure(config); + }); + } +} diff --git a/npm/ng-packs/packages/core/src/lib/states/config.state.ts b/npm/ng-packs/packages/core/src/lib/states/config.state.ts index 1134c85bce..25c77499d3 100644 --- a/npm/ng-packs/packages/core/src/lib/states/config.state.ts +++ b/npm/ng-packs/packages/core/src/lib/states/config.state.ts @@ -10,9 +10,6 @@ import { SetLanguage } from '../actions/session.actions'; import { ApplicationConfiguration } from '../models/application-configuration'; import { Config } from '../models/config'; import { SessionState } from './session.state'; -import compare from 'just-compare'; -import clone from 'just-clone'; -import { OAuthService } from 'angular-oauth2-oidc'; @State({ name: 'ConfigState', @@ -32,7 +29,7 @@ export class ConfigState { static getOne(key: string) { const selector = createSelector([ConfigState], (state: Config.State) => { - return clone(state[key]); + return state[key]; }); return selector; @@ -197,7 +194,7 @@ export class ConfigState { return selector; } - constructor(private http: HttpClient, private store: Store, private oAuthService: OAuthService) {} + constructor(private http: HttpClient, private store: Store) {} @Action(GetAppConfiguration) addData({ patchState, dispatch }: StateContext) { @@ -241,10 +238,6 @@ export class ConfigState { ) { const { oAuthConfig } = getState().environment; - if (!compare(oAuthConfig, environment.oAuthConfig)) { - this.oAuthService.configure(environment.oAuthConfig); - } - return patchState({ environment, });