From f09172490ab21d5cd1e0e6314d3494e96c199503 Mon Sep 17 00:00:00 2001 From: Nicoleta Panaghiu Date: Thu, 14 Dec 2023 11:46:25 +0200 Subject: [PATCH 1/3] RED-7691: prevented double error toaster. --- .../services/manual-redaction.service.ts | 39 ++++++++++++------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/apps/red-ui/src/app/modules/file-preview/services/manual-redaction.service.ts b/apps/red-ui/src/app/modules/file-preview/services/manual-redaction.service.ts index 85891f87e..a8fa7fb05 100644 --- a/apps/red-ui/src/app/modules/file-preview/services/manual-redaction.service.ts +++ b/apps/red-ui/src/app/modules/file-preview/services/manual-redaction.service.ts @@ -18,8 +18,8 @@ import type { import { dictionaryActionsTranslations, manualRedactionActionsTranslations } from '@translations/annotation-actions-translations'; import { Roles } from '@users/roles'; import { NGXLogger } from 'ngx-logger'; -import { of } from 'rxjs'; -import { tap } from 'rxjs/operators'; +import { EMPTY, of, OperatorFunction } from 'rxjs'; +import { catchError, tap } from 'rxjs/operators'; function getResponseType(error: boolean, isConflict: boolean) { const isConflictError = isConflict ? 'conflictError' : 'error'; @@ -63,11 +63,13 @@ export class ManualRedactionService extends GenericService { } changeLegalBasis(body: List, dossierId: string, fileId: string) { - return this.legalBasisChange(body, dossierId, fileId).pipe(this.#showToast('change-legal-basis')); + return this.legalBasisChange(body, dossierId, fileId).pipe( + ...(this.#showToast('change-legal-basis') as [OperatorFunction]), + ); } recategorizeRedactions(body: List, dossierId: string, fileId: string) { - return this.recategorize(body, dossierId, fileId).pipe(this.#showToast('change-type')); + return this.recategorize(body, dossierId, fileId).pipe(...(this.#showToast('change-type') as [OperatorFunction])); } addAnnotation( @@ -77,26 +79,32 @@ export class ManualRedactionService extends GenericService { options?: { hint?: boolean; dictionaryLabel?: string }, ) { const toast = requests[0].addToDictionary - ? this.#showAddToDictionaryToast(requests, options?.dictionaryLabel) + ? [this.#showAddToDictionaryToast(requests, options?.dictionaryLabel)] : this.#showToast(options?.hint ? 'force-hint' : 'add'); const canAddRedaction = this._iqserPermissionsService.has(Roles.redactions.write); if (canAddRedaction) { - return this.add(requests, dossierId, fileId).pipe(toast); + return this.add(requests, dossierId, fileId).pipe(...(toast as [OperatorFunction])); } return of(undefined); } bulkForce(requests: List, dossierId: string, fileId: string, isIgnoredHint = false) { - return this.forceRedaction(requests, dossierId, fileId).pipe(this.#showToast(!isIgnoredHint ? 'force-redaction' : 'force-hint')); + return this.forceRedaction(requests, dossierId, fileId).pipe( + ...(this.#showToast(!isIgnoredHint ? 'force-redaction' : 'force-hint') as [OperatorFunction]), + ); } undoRequest(annotationIds: List, dossierId: string, fileId: string, modifyDictionary = false) { - return this.undo(annotationIds, dossierId, fileId).pipe(this.#showToast('undo', modifyDictionary)); + return this.undo(annotationIds, dossierId, fileId).pipe( + ...(this.#showToast('undo', modifyDictionary) as [OperatorFunction]), + ); } removeRedaction(body: List, dossierId: string, fileId: string, removeFromDictionary = false, isHint = false) { - return this.remove(body, dossierId, fileId).pipe(this.#showToast(!isHint ? 'remove' : 'remove-hint', removeFromDictionary)); + return this.remove(body, dossierId, fileId).pipe( + ...(this.#showToast(!isHint ? 'remove' : 'remove-hint', removeFromDictionary) as [OperatorFunction]), + ); } getTitle(type: ManualRedactionEntryType) { @@ -149,17 +157,18 @@ export class ManualRedactionService extends GenericService { }); } - #showToast(action: ManualRedactionActions | DictionaryActions, isDictionary = false) { - return tap({ - next: () => this._toaster.success(getMessage(action, isDictionary), { positionClass: 'toast-file-preview' }), - error: (error: unknown) => { + #showToast(action: ManualRedactionActions | DictionaryActions, isDictionary = false): OperatorFunction[] { + return [ + catchError((error: unknown) => { const isConflict = (error as HttpErrorResponse).status === HttpStatusCode.Conflict; this._toaster.error(getMessage(action, isDictionary, true, isConflict), { error: error as HttpErrorResponse, positionClass: 'toast-file-preview', }); - }, - }); + return EMPTY; + }), + tap(() => this._toaster.success(getMessage(action, isDictionary), { positionClass: 'toast-file-preview' })), + ]; } #showAddToDictionaryToast(body: List, dictionaryLabel?: string) { From 4138f1b1e31db48884931763dc93383f1487c21f Mon Sep 17 00:00:00 2001 From: Nicoleta Panaghiu Date: Thu, 14 Dec 2023 12:33:48 +0200 Subject: [PATCH 2/3] RED-7691: refactor code. --- .../services/manual-redaction.service.ts | 43 ++++++++----------- 1 file changed, 19 insertions(+), 24 deletions(-) diff --git a/apps/red-ui/src/app/modules/file-preview/services/manual-redaction.service.ts b/apps/red-ui/src/app/modules/file-preview/services/manual-redaction.service.ts index a8fa7fb05..184d986bd 100644 --- a/apps/red-ui/src/app/modules/file-preview/services/manual-redaction.service.ts +++ b/apps/red-ui/src/app/modules/file-preview/services/manual-redaction.service.ts @@ -18,7 +18,7 @@ import type { import { dictionaryActionsTranslations, manualRedactionActionsTranslations } from '@translations/annotation-actions-translations'; import { Roles } from '@users/roles'; import { NGXLogger } from 'ngx-logger'; -import { EMPTY, of, OperatorFunction } from 'rxjs'; +import { EMPTY, of, OperatorFunction, pipe } from 'rxjs'; import { catchError, tap } from 'rxjs/operators'; function getResponseType(error: boolean, isConflict: boolean) { @@ -63,13 +63,11 @@ export class ManualRedactionService extends GenericService { } changeLegalBasis(body: List, dossierId: string, fileId: string) { - return this.legalBasisChange(body, dossierId, fileId).pipe( - ...(this.#showToast('change-legal-basis') as [OperatorFunction]), - ); + return this.legalBasisChange(body, dossierId, fileId).pipe(this.#showToast('change-legal-basis')); } recategorizeRedactions(body: List, dossierId: string, fileId: string) { - return this.recategorize(body, dossierId, fileId).pipe(...(this.#showToast('change-type') as [OperatorFunction])); + return this.recategorize(body, dossierId, fileId).pipe(this.#showToast('change-type')); } addAnnotation( @@ -79,32 +77,26 @@ export class ManualRedactionService extends GenericService { options?: { hint?: boolean; dictionaryLabel?: string }, ) { const toast = requests[0].addToDictionary - ? [this.#showAddToDictionaryToast(requests, options?.dictionaryLabel)] + ? this.#showAddToDictionaryToast(requests, options?.dictionaryLabel) : this.#showToast(options?.hint ? 'force-hint' : 'add'); const canAddRedaction = this._iqserPermissionsService.has(Roles.redactions.write); if (canAddRedaction) { - return this.add(requests, dossierId, fileId).pipe(...(toast as [OperatorFunction])); + return this.add(requests, dossierId, fileId).pipe(toast); } return of(undefined); } bulkForce(requests: List, dossierId: string, fileId: string, isIgnoredHint = false) { - return this.forceRedaction(requests, dossierId, fileId).pipe( - ...(this.#showToast(!isIgnoredHint ? 'force-redaction' : 'force-hint') as [OperatorFunction]), - ); + return this.forceRedaction(requests, dossierId, fileId).pipe(this.#showToast(!isIgnoredHint ? 'force-redaction' : 'force-hint')); } undoRequest(annotationIds: List, dossierId: string, fileId: string, modifyDictionary = false) { - return this.undo(annotationIds, dossierId, fileId).pipe( - ...(this.#showToast('undo', modifyDictionary) as [OperatorFunction]), - ); + return this.undo(annotationIds, dossierId, fileId).pipe(this.#showToast('undo', modifyDictionary)); } removeRedaction(body: List, dossierId: string, fileId: string, removeFromDictionary = false, isHint = false) { - return this.remove(body, dossierId, fileId).pipe( - ...(this.#showToast(!isHint ? 'remove' : 'remove-hint', removeFromDictionary) as [OperatorFunction]), - ); + return this.remove(body, dossierId, fileId).pipe(this.#showToast(!isHint ? 'remove' : 'remove-hint', removeFromDictionary)); } getTitle(type: ManualRedactionEntryType) { @@ -157,8 +149,8 @@ export class ManualRedactionService extends GenericService { }); } - #showToast(action: ManualRedactionActions | DictionaryActions, isDictionary = false): OperatorFunction[] { - return [ + #showToast(action: ManualRedactionActions | DictionaryActions, isDictionary = false) { + return pipe( catchError((error: unknown) => { const isConflict = (error as HttpErrorResponse).status === HttpStatusCode.Conflict; this._toaster.error(getMessage(action, isDictionary, true, isConflict), { @@ -168,13 +160,12 @@ export class ManualRedactionService extends GenericService { return EMPTY; }), tap(() => this._toaster.success(getMessage(action, isDictionary), { positionClass: 'toast-file-preview' })), - ]; + ); } #showAddToDictionaryToast(body: List, dictionaryLabel?: string) { - return tap({ - next: () => this._toaster.success(getDictionaryMessage('add'), { positionClass: 'toast-file-preview' }), - error: (error: unknown) => { + return pipe( + catchError((error: unknown) => { const isConflict = (error as HttpErrorResponse).status === HttpStatusCode.Conflict; this._toaster.error(getDictionaryMessage('add', true, isConflict), { error: error as HttpErrorResponse, @@ -184,7 +175,11 @@ export class ManualRedactionService extends GenericService { }, positionClass: 'toast-file-preview', }); - }, - }); + return EMPTY; + }), + tap({ + next: () => this._toaster.success(getDictionaryMessage('add'), { positionClass: 'toast-file-preview' }), + }), + ); } } From ed349f06972e618c9ebe3f5b425d004a174fc846 Mon Sep 17 00:00:00 2001 From: Nicoleta Panaghiu Date: Thu, 14 Dec 2023 12:43:06 +0200 Subject: [PATCH 3/3] RED-7691: refactor code. --- .../modules/file-preview/services/manual-redaction.service.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/apps/red-ui/src/app/modules/file-preview/services/manual-redaction.service.ts b/apps/red-ui/src/app/modules/file-preview/services/manual-redaction.service.ts index 184d986bd..2864bdc5f 100644 --- a/apps/red-ui/src/app/modules/file-preview/services/manual-redaction.service.ts +++ b/apps/red-ui/src/app/modules/file-preview/services/manual-redaction.service.ts @@ -177,9 +177,7 @@ export class ManualRedactionService extends GenericService { }); return EMPTY; }), - tap({ - next: () => this._toaster.success(getDictionaryMessage('add'), { positionClass: 'toast-file-preview' }), - }), + tap(() => this._toaster.success(getDictionaryMessage('add'), { positionClass: 'toast-file-preview' })), ); } }