From 5207a855be23cacd5c9ccf9235f7eb2b9ebd654d Mon Sep 17 00:00:00 2001 From: Andreas Coroiu Date: Fri, 9 Dec 2022 11:38:03 +0100 Subject: [PATCH] [EC-827] feat: add logging to async actions (#4206) --- .../src/async-actions/bit-action.directive.ts | 11 +++++++++-- .../src/async-actions/bit-submit.directive.ts | 5 ++++- .../src/async-actions/standalone.stories.ts | 7 +++++++ 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/libs/components/src/async-actions/bit-action.directive.ts b/libs/components/src/async-actions/bit-action.directive.ts index 4fb28a4b1fb..0ea479f190b 100644 --- a/libs/components/src/async-actions/bit-action.directive.ts +++ b/libs/components/src/async-actions/bit-action.directive.ts @@ -1,6 +1,7 @@ import { Directive, HostListener, Input, OnDestroy, Optional } from "@angular/core"; import { BehaviorSubject, finalize, Subject, takeUntil, tap } from "rxjs"; +import { LogService } from "@bitwarden/common/abstractions/log.service"; import { ValidationService } from "@bitwarden/common/abstractions/validation.service"; import { ButtonLikeAbstraction } from "../shared/button-like.abstraction"; @@ -23,7 +24,8 @@ export class BitActionDirective implements OnDestroy { constructor( private buttonComponent: ButtonLikeAbstraction, - @Optional() private validationService?: ValidationService + @Optional() private validationService?: ValidationService, + @Optional() private logService?: LogService ) {} get loading() { @@ -44,7 +46,12 @@ export class BitActionDirective implements OnDestroy { this.loading = true; functionToObservable(this.handler) .pipe( - tap({ error: (err: unknown) => this.validationService?.showError(err) }), + tap({ + error: (err: unknown) => { + this.logService?.error(`Async action exception: ${err}`); + this.validationService?.showError(err); + }, + }), finalize(() => (this.loading = false)), takeUntil(this.destroy$) ) diff --git a/libs/components/src/async-actions/bit-submit.directive.ts b/libs/components/src/async-actions/bit-submit.directive.ts index 1fee5283bda..82b459c2d56 100644 --- a/libs/components/src/async-actions/bit-submit.directive.ts +++ b/libs/components/src/async-actions/bit-submit.directive.ts @@ -2,6 +2,7 @@ import { Directive, Input, OnDestroy, OnInit, Optional } from "@angular/core"; import { FormGroupDirective } from "@angular/forms"; import { BehaviorSubject, catchError, filter, of, Subject, switchMap, takeUntil } from "rxjs"; +import { LogService } from "@bitwarden/common/abstractions/log.service"; import { ValidationService } from "@bitwarden/common/abstractions/validation.service"; import { FunctionReturningAwaitable, functionToObservable } from "../utils/function-to-observable"; @@ -24,7 +25,8 @@ export class BitSubmitDirective implements OnInit, OnDestroy { constructor( private formGroupDirective: FormGroupDirective, - @Optional() validationService?: ValidationService + @Optional() validationService?: ValidationService, + @Optional() logService?: LogService ) { formGroupDirective.ngSubmit .pipe( @@ -39,6 +41,7 @@ export class BitSubmitDirective implements OnInit, OnDestroy { return awaitable.pipe( catchError((err: unknown) => { + logService?.error(`Async submit exception: ${err}`); validationService?.showError(err); return of(undefined); }) diff --git a/libs/components/src/async-actions/standalone.stories.ts b/libs/components/src/async-actions/standalone.stories.ts index cd0c6239b06..5a8edfaaac4 100644 --- a/libs/components/src/async-actions/standalone.stories.ts +++ b/libs/components/src/async-actions/standalone.stories.ts @@ -3,6 +3,7 @@ import { action } from "@storybook/addon-actions"; import { Meta, moduleMetadata, Story } from "@storybook/angular"; import { delay, of } from "rxjs"; +import { LogService } from "@bitwarden/common/abstractions/log.service"; import { ValidationService } from "@bitwarden/common/abstractions/validation.service"; import { ButtonModule } from "../button"; @@ -68,6 +69,12 @@ export default { showError: action("ValidationService.showError"), } as Partial, }, + { + provide: LogService, + useValue: { + error: action("LogService.error"), + } as Partial, + }, ], }), ],