diff options
Diffstat (limited to 'src/pybind/mgr/dashboard/frontend/src/app/shared/services/js-error-handler.service.ts')
-rw-r--r-- | src/pybind/mgr/dashboard/frontend/src/app/shared/services/js-error-handler.service.ts | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/pybind/mgr/dashboard/frontend/src/app/shared/services/js-error-handler.service.ts b/src/pybind/mgr/dashboard/frontend/src/app/shared/services/js-error-handler.service.ts new file mode 100644 index 000000000..de42d005e --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/src/app/shared/services/js-error-handler.service.ts @@ -0,0 +1,33 @@ +import { ErrorHandler, Injectable, Injector } from '@angular/core'; +import { Router } from '@angular/router'; + +import { DashboardError } from '~/app/core/error/error'; +import { LoggingService } from '../api/logging.service'; + +@Injectable() +export class JsErrorHandler implements ErrorHandler { + constructor(private injector: Injector, private router: Router) {} + + handleError(error: any) { + const loggingService = this.injector.get(LoggingService); + const url = window.location.href; + const message = error && error.message; + const stack = error && error.stack; + loggingService.jsError(url, message, stack).subscribe(); + if (error.rejection instanceof DashboardError) { + setTimeout( + () => + this.router.navigate(['error'], { + state: { + message: error.rejection.message, + header: error.rejection.header, + icon: error.rejection.icon + } + }), + 50 + ); + } else { + throw error; + } + } +} |