From 25b456ae8e9b726996d768c407c4737de7ed1453 Mon Sep 17 00:00:00 2001 From: Nicoleta Panaghiu Date: Thu, 2 Nov 2023 16:36:59 +0200 Subject: [PATCH] RED-7558: backport generic error handling. --- .../app/utils/global-error-handler.service.ts | 20 ++++++++++++++++++- apps/red-ui/src/assets/i18n/redact/de.json | 9 ++++++++- apps/red-ui/src/assets/i18n/redact/en.json | 9 ++++++++- apps/red-ui/src/assets/i18n/scm/de.json | 9 ++++++++- apps/red-ui/src/assets/i18n/scm/en.json | 9 ++++++++- libs/common-ui | 2 +- 6 files changed, 52 insertions(+), 6 deletions(-) diff --git a/apps/red-ui/src/app/utils/global-error-handler.service.ts b/apps/red-ui/src/app/utils/global-error-handler.service.ts index 285d8354d..22562a355 100644 --- a/apps/red-ui/src/app/utils/global-error-handler.service.ts +++ b/apps/red-ui/src/app/utils/global-error-handler.service.ts @@ -1,10 +1,28 @@ -import { ErrorHandler, Injectable } from '@angular/core'; +import { ErrorHandler, Inject, Injectable, Injector } from '@angular/core'; +import { HttpErrorResponse, HttpStatusCode } from '@angular/common/http'; +import { Toaster } from '@iqser/common-ui'; +import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; @Injectable() export class GlobalErrorHandler extends ErrorHandler { + constructor(@Inject(Injector) private _injector: Injector) { + super(); + } handleError(error: Error): void { const chunkFailedMessage = /Loading chunk [\d]+ failed/; console.write(error); + if (error.message.includes('HttpErrorResponse')) { + const err = JSON.parse(error.message.split('HttpErrorResponse:')[1]) as HttpErrorResponse; + if (err.status >= HttpStatusCode.BadRequest && err.status <= HttpStatusCode.InternalServerError) { + const toaster = this._injector.get(Toaster); + if (err.error.message) { + toaster.rawError(err.error.message); + } else if ([400, 403, 404, 409, 500].includes(err.status)) { + toaster.rawError(_(`generic-errors.${err.status}`)); + } + } + } + if (error?.message?.includes('An error happened during access validation')) { console.log('User is not authorized to access this page'); } diff --git a/apps/red-ui/src/assets/i18n/redact/de.json b/apps/red-ui/src/assets/i18n/redact/de.json index 3a80574ef..5a5c99dc4 100644 --- a/apps/red-ui/src/assets/i18n/redact/de.json +++ b/apps/red-ui/src/assets/i18n/redact/de.json @@ -2284,5 +2284,12 @@ "select": "Wählen" } }, - "yesterday": "Gestern" + "yesterday": "Gestern", + "generic-errors": { + "400": "", + "403": "", + "404": "", + "409": "", + "500": "" + } } diff --git a/apps/red-ui/src/assets/i18n/redact/en.json b/apps/red-ui/src/assets/i18n/redact/en.json index 2bc80556b..0074415ba 100644 --- a/apps/red-ui/src/assets/i18n/redact/en.json +++ b/apps/red-ui/src/assets/i18n/redact/en.json @@ -2306,5 +2306,12 @@ "select": "Select" } }, - "yesterday": "Yesterday" + "yesterday": "Yesterday", + "generic-errors": { + "400": "The sent request is not valid.", + "403": "Access to the requested resource is not allowed.", + "404": "The requested resource could not be found.", + "409": "The request is incompatible with the current state.", + "500": "The server encountered an unexpected condition that prevented it from fulfilling the request." + } } diff --git a/apps/red-ui/src/assets/i18n/scm/de.json b/apps/red-ui/src/assets/i18n/scm/de.json index d6c71b494..58804880c 100644 --- a/apps/red-ui/src/assets/i18n/scm/de.json +++ b/apps/red-ui/src/assets/i18n/scm/de.json @@ -2273,5 +2273,12 @@ "select": "Wählen" } }, - "yesterday": "Gestern" + "yesterday": "Gestern", + "generic-errors": { + "400": "", + "403": "", + "404": "", + "409": "", + "500": "" + } } diff --git a/apps/red-ui/src/assets/i18n/scm/en.json b/apps/red-ui/src/assets/i18n/scm/en.json index 3785b37a9..50966ac52 100644 --- a/apps/red-ui/src/assets/i18n/scm/en.json +++ b/apps/red-ui/src/assets/i18n/scm/en.json @@ -2295,5 +2295,12 @@ "select": "Select" } }, - "yesterday": "Yesterday" + "yesterday": "Yesterday", + "generic-errors": { + "400": "The sent request is not valid.", + "403": "Access to the requested resource is not allowed.", + "404": "The requested resource could not be found.", + "409": "The request is incompatible with the current state.", + "500": "The server encountered an unexpected condition that prevented it from fulfilling the request." + } } diff --git a/libs/common-ui b/libs/common-ui index 7312caa8d..d6f712232 160000 --- a/libs/common-ui +++ b/libs/common-ui @@ -1 +1 @@ -Subproject commit 7312caa8d0119c5c153f02ddc22075ec9e945451 +Subproject commit d6f712232942f41a47d652cfb6dabc9d6b1694c7