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..a6343af170 --- /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 AppInitErrorFn = (error: any) => void; + +export const APP_INIT_ERROR_HANDLERS = new InjectionToken( + 'APP_INIT_ERROR_HANDLERS', +); 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..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 @@ -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_INIT_ERROR_HANDLERS } 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 appInitErrorHandlers = injector.get(APP_INIT_ERROR_HANDLERS); + if (appInitErrorHandlers && appInitErrorHandlers.length) { + appInitErrorHandlers.forEach(fn => fn(error)); + } + + return throwError(error); + }), ) .toPromise(); };