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;