From df361fb3d91c6edce56d94c42ae5f2594983224a Mon Sep 17 00:00:00 2001 From: bnymncoskuner Date: Mon, 19 Apr 2021 14:00:13 +0300 Subject: [PATCH 1/2] fix: provide a way to handle app config error --- .../packages/core/src/lib/tokens/app-config.token.ts | 7 +++++++ npm/ng-packs/packages/core/src/lib/tokens/index.ts | 1 + .../packages/core/src/lib/utils/initial-utils.ts | 12 +++++++++++- 3 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 npm/ng-packs/packages/core/src/lib/tokens/app-config.token.ts diff --git a/npm/ng-packs/packages/core/src/lib/tokens/app-config.token.ts b/npm/ng-packs/packages/core/src/lib/tokens/app-config.token.ts new file mode 100644 index 0000000000..73151da743 --- /dev/null +++ b/npm/ng-packs/packages/core/src/lib/tokens/app-config.token.ts @@ -0,0 +1,7 @@ +import { InjectionToken } from '@angular/core'; + +export type AppConfigInitErrorFn = (error: any) => void; + +export const APP_CONFIG_INITIALIZATION_ERROR = new InjectionToken( + 'APP_CONFIG_INITIALIZATION_ERROR', +); diff --git a/npm/ng-packs/packages/core/src/lib/tokens/index.ts b/npm/ng-packs/packages/core/src/lib/tokens/index.ts index afad50b1c8..c40fbc1bc0 100644 --- a/npm/ng-packs/packages/core/src/lib/tokens/index.ts +++ b/npm/ng-packs/packages/core/src/lib/tokens/index.ts @@ -2,3 +2,4 @@ export * from './list.token'; export * from './lodaer-delay.token'; export * from './manage-profile.token'; export * from './options.token'; +export * from './app-config.token'; diff --git a/npm/ng-packs/packages/core/src/lib/utils/initial-utils.ts b/npm/ng-packs/packages/core/src/lib/utils/initial-utils.ts index 9d5f7483fe..c416eaec79 100644 --- a/npm/ng-packs/packages/core/src/lib/utils/initial-utils.ts +++ b/npm/ng-packs/packages/core/src/lib/utils/initial-utils.ts @@ -1,7 +1,8 @@ import { registerLocaleData } from '@angular/common'; import { Injector } from '@angular/core'; import { OAuthService } from 'angular-oauth2-oidc'; -import { tap } from 'rxjs/operators'; +import { tap, catchError } from 'rxjs/operators'; +import { throwError } from 'rxjs'; import { ABP } from '../models/common'; import { Environment } from '../models/environment'; import { AbpApplicationConfigurationService } from '../proxy/volo/abp/asp-net-core/mvc/application-configurations/abp-application-configuration.service'; @@ -12,6 +13,7 @@ import { EnvironmentService } from '../services/environment.service'; import { SessionStateService } from '../services/session-state.service'; import { clearOAuthStorage } from '../strategies/auth-flow.strategy'; import { CORE_OPTIONS } from '../tokens/options.token'; +import { APP_CONFIG_INITIALIZATION_ERROR } from '../tokens/app-config.token'; import { getRemoteEnv } from './environment-utils'; import { parseTenantFromUrl } from './multi-tenancy-utils'; @@ -38,6 +40,14 @@ export function getInitialData(injector: Injector) { const currentTenant = configState.getOne('currentTenant') as CurrentTenantDto; injector.get(SessionStateService).setTenant(currentTenant); }), + catchError(error => { + const appConfig = injector.get(APP_CONFIG_INITIALIZATION_ERROR); + if (appConfig && appConfig.length) { + appConfig.forEach(fn => fn(error)); + } + + return throwError(error); + }), ) .toPromise(); }; From 250de034cd8f0ce42e44c3f76b7aba2445114390 Mon Sep 17 00:00:00 2001 From: bnymncoskuner Date: Mon, 19 Apr 2021 14:09:32 +0300 Subject: [PATCH 2/2] refactor: better naming for app init error --- .../packages/core/src/lib/tokens/app-config.token.ts | 6 +++--- npm/ng-packs/packages/core/src/lib/utils/initial-utils.ts | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/npm/ng-packs/packages/core/src/lib/tokens/app-config.token.ts b/npm/ng-packs/packages/core/src/lib/tokens/app-config.token.ts index 73151da743..a6343af170 100644 --- a/npm/ng-packs/packages/core/src/lib/tokens/app-config.token.ts +++ b/npm/ng-packs/packages/core/src/lib/tokens/app-config.token.ts @@ -1,7 +1,7 @@ import { InjectionToken } from '@angular/core'; -export type AppConfigInitErrorFn = (error: any) => void; +export type AppInitErrorFn = (error: any) => void; -export const APP_CONFIG_INITIALIZATION_ERROR = new InjectionToken( - 'APP_CONFIG_INITIALIZATION_ERROR', +export const APP_INIT_ERROR_HANDLERS = new InjectionToken( + 'APP_INIT_ERROR_HANDLERS', ); diff --git a/npm/ng-packs/packages/core/src/lib/utils/initial-utils.ts b/npm/ng-packs/packages/core/src/lib/utils/initial-utils.ts index c416eaec79..c4edc800b5 100644 --- a/npm/ng-packs/packages/core/src/lib/utils/initial-utils.ts +++ b/npm/ng-packs/packages/core/src/lib/utils/initial-utils.ts @@ -13,7 +13,7 @@ import { EnvironmentService } from '../services/environment.service'; import { SessionStateService } from '../services/session-state.service'; import { clearOAuthStorage } from '../strategies/auth-flow.strategy'; import { CORE_OPTIONS } from '../tokens/options.token'; -import { APP_CONFIG_INITIALIZATION_ERROR } from '../tokens/app-config.token'; +import { APP_INIT_ERROR_HANDLERS } from '../tokens/app-config.token'; import { getRemoteEnv } from './environment-utils'; import { parseTenantFromUrl } from './multi-tenancy-utils'; @@ -41,9 +41,9 @@ export function getInitialData(injector: Injector) { injector.get(SessionStateService).setTenant(currentTenant); }), catchError(error => { - const appConfig = injector.get(APP_CONFIG_INITIALIZATION_ERROR); - if (appConfig && appConfig.length) { - appConfig.forEach(fn => fn(error)); + const appInitErrorHandlers = injector.get(APP_INIT_ERROR_HANDLERS); + if (appInitErrorHandlers && appInitErrorHandlers.length) { + appInitErrorHandlers.forEach(fn => fn(error)); } return throwError(error);