diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/errors/error-500.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/errors/error-500.component.ts
deleted file mode 100644
index d4871f20ab..0000000000
--- a/npm/ng-packs/packages/theme-shared/src/lib/components/errors/error-500.component.ts
+++ /dev/null
@@ -1,33 +0,0 @@
-import { Component, OnInit } from '@angular/core';
-import { Store } from '@ngxs/store';
-
-@Component({
- selector: 'abp-error-500',
- template: `
-
-
-
-
-
- Oops!
-
-
- Sorry, an error has occured.
-
-
-
-
-
-
- `,
- styleUrls: ['error-500.component.scss'],
-})
-export class Error500Component implements OnInit {
- constructor(private store: Store) {}
-
- ngOnInit(): void {}
-}
diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/errors/error-500.component.scss b/npm/ng-packs/packages/theme-shared/src/lib/components/errors/error.component.scss
similarity index 100%
rename from npm/ng-packs/packages/theme-shared/src/lib/components/errors/error-500.component.scss
rename to npm/ng-packs/packages/theme-shared/src/lib/components/errors/error.component.scss
diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/errors/error.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/errors/error.component.ts
new file mode 100644
index 0000000000..f532e8689d
--- /dev/null
+++ b/npm/ng-packs/packages/theme-shared/src/lib/components/errors/error.component.ts
@@ -0,0 +1,45 @@
+import { Component, Renderer2, ElementRef } from '@angular/core';
+
+@Component({
+ selector: 'abp-error',
+ template: `
+
+
+
+
+
+
+ {{ title }}
+
+
+ {{ details }}
+
+
+
+
+
+
+ `,
+ styleUrls: ['error.component.scss'],
+})
+export class ErrorComponent {
+ title = 'Oops!';
+
+ details = 'Sorry, an error has occured.';
+
+ renderer: Renderer2;
+
+ elementRef: ElementRef;
+
+ host: any;
+
+ destroy() {
+ this.renderer.removeChild(this.host, this.elementRef.nativeElement);
+ }
+}
diff --git a/npm/ng-packs/packages/theme-shared/src/lib/handlers/error.handler.ts b/npm/ng-packs/packages/theme-shared/src/lib/handlers/error.handler.ts
index 0d09158e23..07328a1356 100644
--- a/npm/ng-packs/packages/theme-shared/src/lib/handlers/error.handler.ts
+++ b/npm/ng-packs/packages/theme-shared/src/lib/handlers/error.handler.ts
@@ -1,22 +1,19 @@
import { RestOccurError } from '@abp/ng.core';
import { HttpErrorResponse } from '@angular/common/http';
import {
- Injectable,
ApplicationRef,
ComponentFactoryResolver,
- RendererFactory2,
- Inject,
- ReflectiveInjector,
- Injector,
EmbeddedViewRef,
+ Injectable,
+ Injector,
+ RendererFactory2,
} from '@angular/core';
import { Navigate, RouterState } from '@ngxs/router-plugin';
import { Actions, ofActionSuccessful, Store } from '@ngxs/store';
import { Observable } from 'rxjs';
+import { ErrorComponent } from '../components/errors/error.component';
import { Toaster } from '../models/toaster';
import { ConfirmationService } from '../services/confirmation.service';
-import { DOCUMENT } from '@angular/common';
-import { Error500Component } from '../components/errors/error-500.component';
const DEFAULTS = {
defaultError: {
@@ -71,17 +68,17 @@ export class ErrorHandler {
);
break;
case 403:
- this.showError(DEFAULTS.defaultError403.details, DEFAULTS.defaultError403.message);
+ this.show403();
break;
case 404:
this.showError(DEFAULTS.defaultError404.details, DEFAULTS.defaultError404.message);
break;
case 500:
- this.show500Component();
+ this.show500();
break;
case 0:
if ((err as HttpErrorResponse).statusText === 'Unknown Error') {
- this.show500Component();
+ this.show500();
}
break;
default:
@@ -116,11 +113,37 @@ export class ErrorHandler {
);
}
- private show500Component() {
+ private show500() {
+ this.createErrorComponent({
+ title: '500',
+ details: 'Sorry, an error has occured.',
+ });
+ }
+
+ private show403() {
+ this.createErrorComponent({
+ title: DEFAULTS.defaultError403.message,
+ details: DEFAULTS.defaultError403.details,
+ });
+ }
+
+ createErrorComponent(instance: Partial) {
const renderer = this.rendererFactory.createRenderer(null, null);
const host = renderer.selectRootElement('app-root', true);
- const componentRef = this.cfRes.resolveComponentFactory(Error500Component).create(this.injector);
+
+ const componentRef = this.cfRes.resolveComponentFactory(ErrorComponent).create(this.injector);
+
+ for (const key in componentRef.instance) {
+ if (componentRef.instance.hasOwnProperty(key)) {
+ componentRef.instance[key] = instance[key];
+ }
+ }
+
this.appRef.attachView(componentRef.hostView);
renderer.appendChild(host, (componentRef.hostView as EmbeddedViewRef).rootNodes[0]);
+
+ componentRef.instance.renderer = renderer;
+ componentRef.instance.elementRef = componentRef.location;
+ componentRef.instance.host = host;
}
}
diff --git a/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts b/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts
index 5e02fb1c84..c90f969b91 100644
--- a/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts
+++ b/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts
@@ -7,7 +7,7 @@ import { ToastModule } from 'primeng/toast';
import { forkJoin } from 'rxjs';
import { take } from 'rxjs/operators';
import { ConfirmationComponent } from './components/confirmation/confirmation.component';
-import { Error500Component } from './components/errors/error-500.component';
+import { ErrorComponent } from './components/errors/error.component';
import { LoaderBarComponent } from './components/loader-bar/loader-bar.component';
import { ModalComponent } from './components/modal/modal.component';
import { ToastComponent } from './components/toast/toast.component';
@@ -41,9 +41,9 @@ export function appendScript(injector: Injector) {
targetSelector: '.form-group',
}),
],
- declarations: [ConfirmationComponent, ToastComponent, ModalComponent, Error500Component, LoaderBarComponent],
+ declarations: [ConfirmationComponent, ToastComponent, ModalComponent, ErrorComponent, LoaderBarComponent],
exports: [NgbModalModule, ConfirmationComponent, ToastComponent, ModalComponent, LoaderBarComponent],
- entryComponents: [Error500Component],
+ entryComponents: [ErrorComponent],
})
export class ThemeSharedModule {
static forRoot(): ModuleWithProviders {