From 37ee771a1e412a55e81bc6077a1aca37bfd2f2d4 Mon Sep 17 00:00:00 2001 From: Valentin Mihai Date: Sun, 16 Jul 2023 22:36:09 +0300 Subject: [PATCH] RED-6774 - REVIEWERS should no longer send requests --- .../file/annotation-permissions.utils.ts | 44 +++++-------- .../app/models/file/annotation.permissions.ts | 38 +++++------ .../annotation-actions.component.html | 19 ++---- .../manual-annotation-dialog.component.ts | 1 - .../redact-text-dialog.component.ts | 1 - .../remove-redaction-dialog.component.ts | 8 +-- .../services/annotation-actions.service.ts | 4 +- .../pdf-annotation-actions.service.ts | 66 ++----------------- apps/red-ui/src/assets/i18n/redact/en.json | 2 +- apps/red-ui/src/assets/i18n/scm/en.json | 2 +- .../redaction-log/add-redaction.request.ts | 1 - .../redaction-log/manual-redaction-entry.ts | 1 - 12 files changed, 51 insertions(+), 136 deletions(-) diff --git a/apps/red-ui/src/app/models/file/annotation-permissions.utils.ts b/apps/red-ui/src/app/models/file/annotation-permissions.utils.ts index a6a5d31d5..f158e3354 100644 --- a/apps/red-ui/src/app/models/file/annotation-permissions.utils.ts +++ b/apps/red-ui/src/app/models/file/annotation-permissions.utils.ts @@ -5,50 +5,40 @@ import { Dictionary } from '@red/domain'; export const canUndo = (annotation: AnnotationWrapper, isApprover: boolean) => !isApprover && (annotation.isSuggestion || annotation.pending); -export const canAcceptSuggestion = (annotation: AnnotationWrapper, isApprover: boolean, canProcessManualRedaction: boolean) => { - const can = isApprover && (annotation.isSuggestion || annotation.isDeclinedSuggestion); - return annotation.isSuggestionAdd || annotation.isSuggestionRemoveDictionary ? can && canProcessManualRedaction : can; -}; +export const canForceHint = (annotation: AnnotationWrapper, canAddRedaction: boolean) => + canAddRedaction && annotation.isIgnoredHint && !annotation.pending; -export const canRejectSuggestion = (annotation: AnnotationWrapper, isApprover: boolean, canProcessManualRedaction: boolean) => { - const can = isApprover && annotation.isSuggestion; - return annotation.isSuggestionAdd || annotation.isSuggestionRemoveDictionary ? can && canProcessManualRedaction : can; -}; - -export const canForceHint = (annotation: AnnotationWrapper, canAddOrRequestRedaction: boolean) => - canAddOrRequestRedaction && annotation.isIgnoredHint && !annotation.pending; - -export const canForceRedaction = (annotation: AnnotationWrapper, canAddOrRequestRedaction: boolean) => - canAddOrRequestRedaction && annotation.isSkipped && !annotation.isFalsePositive && !annotation.pending; +export const canForceRedaction = (annotation: AnnotationWrapper, canAddRedaction: boolean) => + canAddRedaction && annotation.isSkipped && !annotation.isFalsePositive && !annotation.pending; export const canAcceptRecommendation = (annotation: AnnotationWrapper) => annotation.isRecommendation && !annotation.pending; export const canMarkAsFalsePositive = (annotation: AnnotationWrapper, annotationEntity: Dictionary) => annotation.canBeMarkedAsFalsePositive && annotationEntity.hasDictionary; -export const canRemoveOrSuggestToRemoveOnlyHere = (annotation: AnnotationWrapper, canAddOrRequestRedaction: boolean) => - canAddOrRequestRedaction && !annotation.pending && (annotation.isRedacted || (annotation.isHint && !annotation.isImage)); +export const canRemoveOnlyHere = (annotation: AnnotationWrapper, canAddRedaction: boolean) => + canAddRedaction && !annotation.pending && (annotation.isRedacted || (annotation.isHint && !annotation.isImage)); -export const canRemoveOrSuggestToRemoveFromDictionary = (annotation: AnnotationWrapper) => +export const canRemoveFromDictionary = (annotation: AnnotationWrapper) => annotation.isModifyDictionary && (annotation.isRedacted || annotation.isSkipped || annotation.isHint) && !annotation.pending && !annotation.hasBeenResized; -export const canRemoveOrSuggestToRemoveRedaction = (annotations: AnnotationWrapper[], permissions: AnnotationPermissions) => +export const canRemoveRedaction = (annotations: AnnotationWrapper[], permissions: AnnotationPermissions) => annotations.length === 1 && - (permissions.canRemoveOrSuggestToRemoveOnlyHere || - permissions.canRemoveOrSuggestToRemoveFromDictionary || - permissions.canMarkAsFalsePositive); + (permissions.canRemoveOnlyHere || permissions.canRemoveFromDictionary || permissions.canMarkAsFalsePositive); -export const canChangeLegalBasis = (annotation: AnnotationWrapper, canAddOrRequestRedaction: boolean) => - canAddOrRequestRedaction && annotation.isRedacted && !annotation.pending; +export const canChangeLegalBasis = (annotation: AnnotationWrapper, canAddRedaction: boolean) => + canAddRedaction && annotation.isRedacted && !annotation.pending; -export const canRecategorizeImage = (annotation: AnnotationWrapper) => - ((annotation.isImage && !annotation.isSuggestion) || annotation.isSuggestionRecategorizeImage) && !annotation.pending; +export const canRecategorizeImage = (annotation: AnnotationWrapper, canRecategorize: boolean) => + canRecategorize && + ((annotation.isImage && !annotation.isSuggestion) || annotation.isSuggestionRecategorizeImage) && + !annotation.pending; -export const canResizeAnnotation = (annotation: AnnotationWrapper, canAddOrRequestRedaction: boolean) => - canAddOrRequestRedaction && +export const canResizeAnnotation = (annotation: AnnotationWrapper, canAddRedaction: boolean) => + canAddRedaction && (((annotation.isRedacted || annotation.isImage) && !annotation.isSuggestion) || annotation.isSuggestionResize || annotation.isRecommendation) && diff --git a/apps/red-ui/src/app/models/file/annotation.permissions.ts b/apps/red-ui/src/app/models/file/annotation.permissions.ts index 06736546c..6a48a50dc 100644 --- a/apps/red-ui/src/app/models/file/annotation.permissions.ts +++ b/apps/red-ui/src/app/models/file/annotation.permissions.ts @@ -5,16 +5,14 @@ import { IqserPermissionsService } from '@iqser/common-ui'; import { Roles } from '@users/roles'; import { canAcceptRecommendation, - canAcceptSuggestion, canChangeLegalBasis, canForceHint, canForceRedaction, canMarkAsFalsePositive, canRecategorizeImage, - canRejectSuggestion, - canRemoveOrSuggestToRemoveFromDictionary, - canRemoveOrSuggestToRemoveOnlyHere, - canRemoveOrSuggestToRemoveRedaction, + canRemoveFromDictionary, + canRemoveOnlyHere, + canRemoveRedaction, canResizeAnnotation, canUndo, } from './annotation-permissions.utils'; @@ -23,11 +21,9 @@ export class AnnotationPermissions { canUndo = true; canAcceptRecommendation = true; canMarkAsFalsePositive = true; - canRemoveOrSuggestToRemoveOnlyHere = true; - canRemoveOrSuggestToRemoveFromDictionary = true; - canRemoveOrSuggestToRemoveRedaction = true; - canAcceptSuggestion = true; - canRejectSuggestion = true; + canRemoveOnlyHere = true; + canRemoveFromDictionary = true; + canRemoveRedaction = true; canForceRedaction = true; canChangeLegalBasis = true; canResizeAnnotation = true; @@ -46,27 +42,23 @@ export class AnnotationPermissions { const summedPermissions: AnnotationPermissions = new AnnotationPermissions(); const canAddRedaction = permissionsService.has(Roles.redactions.write); - const canRequestRedaction = permissionsService.has(Roles.redactions.request); - const canProcessManualRedaction = permissionsService.has(Roles.redactions.processManualRequest); - const canAddOrRequestRedaction = canAddRedaction || canRequestRedaction; + const canDoAnyApproverAction = canAddRedaction && isApprover; for (const annotation of annotations) { const permissions: AnnotationPermissions = new AnnotationPermissions(); const annotationEntity = entities.find(entity => entity.type === annotation.type); permissions.canUndo = canUndo(annotation, isApprover); - permissions.canAcceptSuggestion = canAcceptSuggestion(annotation, isApprover, canProcessManualRedaction); - permissions.canRejectSuggestion = canRejectSuggestion(annotation, isApprover, canProcessManualRedaction); - permissions.canForceHint = canForceHint(annotation, canAddOrRequestRedaction); - permissions.canForceRedaction = canForceRedaction(annotation, canAddOrRequestRedaction); + permissions.canForceHint = canForceHint(annotation, canDoAnyApproverAction); + permissions.canForceRedaction = canForceRedaction(annotation, canDoAnyApproverAction); permissions.canAcceptRecommendation = canAcceptRecommendation(annotation); permissions.canMarkAsFalsePositive = canMarkAsFalsePositive(annotation, annotationEntity); - permissions.canRemoveOrSuggestToRemoveOnlyHere = canRemoveOrSuggestToRemoveOnlyHere(annotation, canAddOrRequestRedaction); - permissions.canRemoveOrSuggestToRemoveFromDictionary = canRemoveOrSuggestToRemoveFromDictionary(annotation); - permissions.canRemoveOrSuggestToRemoveRedaction = canRemoveOrSuggestToRemoveRedaction(annotations, permissions); - permissions.canChangeLegalBasis = canChangeLegalBasis(annotation, canAddOrRequestRedaction); - permissions.canRecategorizeImage = canRecategorizeImage(annotation); - permissions.canResizeAnnotation = canResizeAnnotation(annotation, canAddOrRequestRedaction); + permissions.canRemoveOnlyHere = canRemoveOnlyHere(annotation, canAddRedaction); + permissions.canRemoveFromDictionary = canRemoveFromDictionary(annotation); + permissions.canRemoveRedaction = canRemoveRedaction(annotations, permissions); + permissions.canChangeLegalBasis = canChangeLegalBasis(annotation, canDoAnyApproverAction); + permissions.canRecategorizeImage = canRecategorizeImage(annotation, canDoAnyApproverAction); + permissions.canResizeAnnotation = canResizeAnnotation(annotation, canDoAnyApproverAction); summedPermissions._merge(permissions); } diff --git a/apps/red-ui/src/app/modules/file-preview/components/annotation-actions/annotation-actions.component.html b/apps/red-ui/src/app/modules/file-preview/components/annotation-actions/annotation-actions.component.html index fe9b4f66d..94ccbfaba 100644 --- a/apps/red-ui/src/app/modules/file-preview/components/annotation-actions/annotation-actions.component.html +++ b/apps/red-ui/src/app/modules/file-preview/components/annotation-actions/annotation-actions.component.html @@ -51,15 +51,6 @@ icon="iqser:check" > - - [] = []; - if (this.#permissions.canRemoveOrSuggestToRemoveOnlyHere) { + if (this.#permissions.canRemoveOnlyHere) { options.push({ label: this.#translations.ONLY_HERE.label, description: this.#translations.ONLY_HERE.description, @@ -102,7 +102,7 @@ export class RemoveRedactionDialogComponent extends IqserDialogComponent< value: RemoveRedactionOptions.ONLY_HERE, }); } - if (this.#permissions.canRemoveOrSuggestToRemoveFromDictionary) { + if (this.#permissions.canRemoveFromDictionary) { options.push({ label: this.#translations.IN_DOSSIER.label, description: this.#translations.IN_DOSSIER.description, diff --git a/apps/red-ui/src/app/modules/file-preview/services/annotation-actions.service.ts b/apps/red-ui/src/app/modules/file-preview/services/annotation-actions.service.ts index 19397e5d2..b4afed720 100644 --- a/apps/red-ui/src/app/modules/file-preview/services/annotation-actions.service.ts +++ b/apps/red-ui/src/app/modules/file-preview/services/annotation-actions.service.ts @@ -123,8 +123,8 @@ export class AnnotationActionsService { async removeOrSuggestRemoveRedaction(redaction: AnnotationWrapper, permissions) { const removePermissions: RemoveRedactionPermissions = { - canRemoveOrSuggestToRemoveOnlyHere: permissions.canRemoveOrSuggestToRemoveOnlyHere, - canRemoveOrSuggestToRemoveFromDictionary: permissions.canRemoveOrSuggestToRemoveFromDictionary, + canRemoveOnlyHere: permissions.canRemoveOnlyHere, + canRemoveFromDictionary: permissions.canRemoveFromDictionary, canMarkAsFalsePositive: permissions.canMarkAsFalsePositive, }; const dossierTemplate = this._dossierTemplatesService.find(this._state.dossierTemplateId); diff --git a/apps/red-ui/src/app/modules/file-preview/services/pdf-annotation-actions.service.ts b/apps/red-ui/src/app/modules/file-preview/services/pdf-annotation-actions.service.ts index 410899cb4..fe2ee792d 100644 --- a/apps/red-ui/src/app/modules/file-preview/services/pdf-annotation-actions.service.ts +++ b/apps/red-ui/src/app/modules/file-preview/services/pdf-annotation-actions.service.ts @@ -63,15 +63,6 @@ export class PdfAnnotationActionsService { availableActions.push(recategorizeButton); } - // if (permissions.canRemoveOrSuggestToRemoveFromDictionary) { - // const removeFromDictButton = this.#getButton( - // 'remove-from-dict', - // _('annotation-actions.remove-annotation.remove-from-dict'), - // () => this.#annotationActionsService.removeOrSuggestRemoveAnnotation(annotations, true), - // ); - // availableActions.push(removeFromDictButton); - // } - if (permissions.canAcceptRecommendation) { const acceptRecommendationButton = this.#getButton('check', _('annotation-actions.accept-recommendation.label'), () => this.#annotationActionsService.convertRecommendationToAnnotation(annotations), @@ -79,27 +70,6 @@ export class PdfAnnotationActionsService { availableActions.push(acceptRecommendationButton); } - if (permissions.canAcceptSuggestion) { - const acceptSuggestionButton = this.#getButton('check', _('annotation-actions.accept-suggestion.label'), () => - this.#annotationActionsService.acceptSuggestion(annotations), - ); - availableActions.push(acceptSuggestionButton); - } - - if (permissions.canUndo) { - const undoButton = this.#getButton('undo', _('annotation-actions.undo'), () => - this.#annotationActionsService.undoDirectAction(annotations), - ); - availableActions.push(undoButton); - } - - // if (permissions.canMarkAsFalsePositive) { - // const markAsFalsePositiveButton = this.#getButton('thumb-down', _('annotation-actions.remove-annotation.false-positive'), () => - // this.#annotationActionsService.markAsFalsePositive(annotations), - // ); - // availableActions.push(markAsFalsePositiveButton); - // } - if (permissions.canForceRedaction) { const forceRedactionButton = this.#getButton('thumb-up', _('annotation-actions.force-redaction.label'), () => this.#annotationActionsService.forceAnnotation(annotations), @@ -114,27 +84,11 @@ export class PdfAnnotationActionsService { availableActions.push(forceHintButton); } - if (permissions.canRejectSuggestion) { - const rejectSuggestionButton = this.#getButton('close', _('annotation-actions.reject-suggestion'), () => - this.#annotationActionsService.rejectSuggestion(annotations), - ); - availableActions.push(rejectSuggestionButton); - } - - // if (permissions.canRemoveOrSuggestToRemoveOnlyHere) { - // const removeOrSuggestToRemoveOnlyHereButton = this.#getButton( - // 'trash', - // _('annotation-actions.remove-annotation.only-here'), - // () => this.#annotationActionsService.removeOrSuggestRemoveAnnotation(annotations, false), - // ); - // availableActions.push(removeOrSuggestToRemoveOnlyHereButton); - // } - - if (permissions.canRemoveOrSuggestToRemoveRedaction) { - const removeOrSuggestToRemoveButton = this.#getButton('trash', _('annotation-actions.remove-annotation.remove-redaction'), () => + if (permissions.canRemoveRedaction) { + const removeRedactionButton = this.#getButton('trash', _('annotation-actions.remove-annotation.remove-redaction'), () => this.#annotationActionsService.removeOrSuggestRemoveRedaction(annotations[0], permissions), ); - availableActions.push(removeOrSuggestToRemoveButton); + availableActions.push(removeRedactionButton); } return availableActions; @@ -158,21 +112,13 @@ export class PdfAnnotationActionsService { canResize: permissions.length === 1 && permissions[0].canResizeAnnotation, canChangeLegalBasis: permissions.reduce((acc, next) => acc && next.canChangeLegalBasis, true), canRecategorizeImage: permissions.reduce((acc, next) => acc && next.canRecategorizeImage, true), - canRemoveOrSuggestToRemoveFromDictionary: permissions.reduce( - (acc, next) => acc && next.canRemoveOrSuggestToRemoveFromDictionary, - true, - ), + canRemoveFromDictionary: permissions.reduce((acc, next) => acc && next.canRemoveFromDictionary, true), canAcceptRecommendation: permissions.reduce((acc, next) => acc && next.canAcceptRecommendation, true), - canAcceptSuggestion: permissions.reduce((acc, next) => acc && next.canAcceptSuggestion, true), - canUndo: - this.#iqserPermissionsService.has(Roles.redactions.deleteManual) && - permissions.reduce((acc, next) => acc && next.canUndo, true), canMarkAsFalsePositive: permissions.reduce((acc, next) => acc && next.canMarkAsFalsePositive, true), canForceRedaction: permissions.reduce((acc, next) => acc && next.canForceRedaction, true), canForceHint: permissions.reduce((acc, next) => acc && next.canForceHint, true), - canRejectSuggestion: permissions.reduce((acc, next) => acc && next.canRejectSuggestion, true), - canRemoveOrSuggestToRemoveOnlyHere: permissions.reduce((acc, next) => acc && next.canRemoveOrSuggestToRemoveOnlyHere, true), - canRemoveOrSuggestToRemoveRedaction: permissions.reduce((acc, next) => acc && next.canRemoveOrSuggestToRemoveRedaction, true), + canRemoveOnlyHere: permissions.reduce((acc, next) => acc && next.canRemoveOnlyHere, true), + canRemoveRedaction: permissions.reduce((acc, next) => acc && next.canRemoveRedaction, true), }; } } diff --git a/apps/red-ui/src/assets/i18n/redact/en.json b/apps/red-ui/src/assets/i18n/redact/en.json index c23603a67..021c6a57d 100644 --- a/apps/red-ui/src/assets/i18n/redact/en.json +++ b/apps/red-ui/src/assets/i18n/redact/en.json @@ -1958,7 +1958,7 @@ }, "in-dossier": { "description": "Do not {type} \"{value}\" in any document of the current dossier.", - "label": "Remove in dossier" + "label": "Remove from dossier" }, "only-here": { "description": "Do not {type} \"{value}\" at this position in the current document.", diff --git a/apps/red-ui/src/assets/i18n/scm/en.json b/apps/red-ui/src/assets/i18n/scm/en.json index c3b32de3e..1b64ebc2f 100644 --- a/apps/red-ui/src/assets/i18n/scm/en.json +++ b/apps/red-ui/src/assets/i18n/scm/en.json @@ -1958,7 +1958,7 @@ }, "in-dossier": { "description": "Do not {type} \"{value}\" in any document of the current dossier.", - "label": "Remove in dossier" + "label": "Remove from dossier" }, "only-here": { "description": "Do not {type} \"{value}\" at this position in the current document.", diff --git a/libs/red-domain/src/lib/redaction-log/add-redaction.request.ts b/libs/red-domain/src/lib/redaction-log/add-redaction.request.ts index 95e06eece..189d16a88 100644 --- a/libs/red-domain/src/lib/redaction-log/add-redaction.request.ts +++ b/libs/red-domain/src/lib/redaction-log/add-redaction.request.ts @@ -4,7 +4,6 @@ import { DictionaryEntryType } from './dictionary-entry-types'; export interface IAddRedactionRequest { addToDictionary?: boolean; - addToDossierDictionary?: boolean; dictionaryEntryType?: DictionaryEntryType; comment?: { text: string }; legalBasis?: string; diff --git a/libs/red-domain/src/lib/redaction-log/manual-redaction-entry.ts b/libs/red-domain/src/lib/redaction-log/manual-redaction-entry.ts index a8a9abf9d..92712e2f7 100644 --- a/libs/red-domain/src/lib/redaction-log/manual-redaction-entry.ts +++ b/libs/red-domain/src/lib/redaction-log/manual-redaction-entry.ts @@ -3,7 +3,6 @@ import { LogEntryStatus } from './types'; export interface IManualRedactionEntry { addToDictionary?: boolean; - addToDossierDictionary?: boolean; annotationId?: string; fileId?: string; legalBasis?: string;