From 3e12f4bfa7763783dc86166c792d477d3a5a8179 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adina=20=C8=9Aeudan?= Date: Wed, 25 Aug 2021 14:33:04 +0300 Subject: [PATCH] Error interceptor --- apps/red-ui/src/app/app.module.ts | 6 ++++++ .../default-colors-screen.component.ts | 2 +- .../digital-signature-screen.component.ts | 3 +-- .../dossier-overview-screen.component.ts | 12 ++--------- .../src/app/utils/server-error-interceptor.ts | 20 +++++++++++++++++++ libs/common-ui | 2 +- 6 files changed, 31 insertions(+), 14 deletions(-) create mode 100644 apps/red-ui/src/app/utils/server-error-interceptor.ts diff --git a/apps/red-ui/src/app/app.module.ts b/apps/red-ui/src/app/app.module.ts index 6d9101e6b..a1d9b56cd 100644 --- a/apps/red-ui/src/app/app.module.ts +++ b/apps/red-ui/src/app/app.module.ts @@ -37,6 +37,7 @@ import { PruningTranslationLoader } from '@utils/pruning-translation-loader'; import { DatePipe } from '@shared/pipes/date.pipe'; import * as links from '../assets/help-mode/links.json'; import { HELP_DOCS, IqserHelpModeModule } from '@iqser/common-ui'; +import { ServerErrorInterceptor } from '@utils/server-error-interceptor'; export function httpLoaderFactory(httpClient: HttpClient) { return new PruningTranslationLoader(httpClient, '/assets/i18n/', '.json'); @@ -96,6 +97,11 @@ const components = [ ServiceWorkerModule.register('ngsw-worker.js', { enabled: environment.production }) ], providers: [ + { + provide: HTTP_INTERCEPTORS, + multi: true, + useClass: ServerErrorInterceptor + }, { provide: ErrorHandler, useClass: GlobalErrorHandler diff --git a/apps/red-ui/src/app/modules/admin/screens/default-colors/default-colors-screen.component.ts b/apps/red-ui/src/app/modules/admin/screens/default-colors/default-colors-screen.component.ts index e8159746a..3fdb6fe75 100644 --- a/apps/red-ui/src/app/modules/admin/screens/default-colors/default-colors-screen.component.ts +++ b/apps/red-ui/src/app/modules/admin/screens/default-colors/default-colors-screen.component.ts @@ -3,7 +3,7 @@ import { AppStateService } from '@state/app-state.service'; import { Colors, DictionaryControllerService } from '@redaction/red-ui-http'; import { ActivatedRoute } from '@angular/router'; import { AdminDialogService } from '../../services/admin-dialog.service'; -import { CircleButtonTypes, DefaultListingServices, ListingComponent, LoadingService, TableColumnConfig } from '@iqser/common-ui'; +import { CircleButtonTypes, DefaultListingServices, Listable, ListingComponent, LoadingService, TableColumnConfig } from '@iqser/common-ui'; import { DefaultColorType } from '@models/default-color-key.model'; import { defaultColorsTranslations } from '../../translations/default-colors-translations'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; diff --git a/apps/red-ui/src/app/modules/admin/screens/digital-signature/digital-signature-screen.component.ts b/apps/red-ui/src/app/modules/admin/screens/digital-signature/digital-signature-screen.component.ts index d763dc76c..e4f5ca79c 100644 --- a/apps/red-ui/src/app/modules/admin/screens/digital-signature/digital-signature-screen.component.ts +++ b/apps/red-ui/src/app/modules/admin/screens/digital-signature/digital-signature-screen.component.ts @@ -1,9 +1,8 @@ import { Component, OnDestroy } from '@angular/core'; import { DigitalSignature, DigitalSignatureControllerService } from '@redaction/red-ui-http'; import { FormBuilder, FormGroup, Validators } from '@angular/forms'; -import { AutoUnsubscribe, IconButtonTypes, Toaster } from '@iqser/common-ui'; import { lastIndexOfEnd } from '@utils/functions'; -import { AutoUnsubscribe, IconButtonTypes, LoadingService } from '@iqser/common-ui'; +import { AutoUnsubscribe, IconButtonTypes, LoadingService, Toaster } from '@iqser/common-ui'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { UserService } from '@services/user.service'; import { RouterHistoryService } from '@services/router-history.service'; diff --git a/apps/red-ui/src/app/modules/dossier/screens/dossier-overview-screen/dossier-overview-screen.component.ts b/apps/red-ui/src/app/modules/dossier/screens/dossier-overview-screen/dossier-overview-screen.component.ts index 54f96ccf4..1497fb6dd 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/dossier-overview-screen/dossier-overview-screen.component.ts +++ b/apps/red-ui/src/app/modules/dossier/screens/dossier-overview-screen/dossier-overview-screen.component.ts @@ -10,15 +10,6 @@ import { TemplateRef, ViewChild } from '@angular/core'; -import { - CircleButtonTypes, - DefaultListingServices, - keyChecker, - ListingComponent, - NestedFilter, - TableColumnConfig, - Toaster -} from '@iqser/common-ui'; import { AppStateService } from '@state/app-state.service'; import { FileDropOverlayService } from '@upload-download/services/file-drop-overlay.service'; import { FileUploadModel } from '@upload-download/model/file-upload.model'; @@ -45,7 +36,8 @@ import { ListingComponent, LoadingService, NestedFilter, - TableColumnConfig + TableColumnConfig, + Toaster } from '@iqser/common-ui'; import { DossierAttributesService } from '@shared/services/controller-wrappers/dossier-attributes.service'; import { DossierAttributeWithValue } from '@models/dossier-attributes.model'; diff --git a/apps/red-ui/src/app/utils/server-error-interceptor.ts b/apps/red-ui/src/app/utils/server-error-interceptor.ts new file mode 100644 index 000000000..d0ac65079 --- /dev/null +++ b/apps/red-ui/src/app/utils/server-error-interceptor.ts @@ -0,0 +1,20 @@ +import { HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { ErrorService } from '@iqser/common-ui'; +import { Observable, throwError } from 'rxjs'; +import { catchError, map } from 'rxjs/operators'; + +@Injectable() +export class ServerErrorInterceptor implements HttpInterceptor { + constructor(private readonly _errorService: ErrorService) {} + + intercept(req: HttpRequest, next: HttpHandler): Observable> { + return next.handle(req).pipe( + map((event: HttpEvent) => event), + catchError((error: HttpErrorResponse) => { + if ([0, 500].includes(error.status)) this._errorService.set(error); + return throwError(error); + }) + ); + } +} diff --git a/libs/common-ui b/libs/common-ui index 69135886a..82f27f1ed 160000 --- a/libs/common-ui +++ b/libs/common-ui @@ -1 +1 @@ -Subproject commit 69135886ab3cfb65843e87e2407c40fc30960f1f +Subproject commit 82f27f1ed9ff98c98877c4cf128b4b41832a1724