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 bb9ca0e16..87ffb175e 100644 --- a/apps/red-ui/src/app/models/file/annotation.permissions.ts +++ b/apps/red-ui/src/app/models/file/annotation.permissions.ts @@ -16,6 +16,7 @@ import { canUndo, } from './annotation-permissions.utils'; import { AnnotationWrapper } from './annotation.wrapper'; +import { IMAGE_CATEGORIES } from '../../modules/file-preview/utils/constants'; export class AnnotationPermissions { canUndo = true; @@ -30,6 +31,8 @@ export class AnnotationPermissions { canRecategorizeAnnotation = true; canForceHint = true; canEditAnnotations = true; + canEditHints = true; + canEditImages = true; static forUser( isApprover: boolean, @@ -58,7 +61,11 @@ export class AnnotationPermissions { permissions.canChangeLegalBasis = canChangeLegalBasis(annotation, canAddRedaction); permissions.canRecategorizeAnnotation = canRecategorizeAnnotation(annotation, canAddRedaction); permissions.canResizeAnnotation = canResizeAnnotation(annotation, canAddRedaction); - permissions.canEditAnnotations = annotation.isSkipped || annotation.isRedacted; + + permissions.canEditAnnotations = (annotation.isSkipped || annotation.isRedacted) && !annotation.isImage; + permissions.canEditHints = + annotation.isIgnoredHint || annotation.isDictBasedHint || annotation.isHint || annotation.isSuggestionForceHint; + permissions.canEditImages = [...IMAGE_CATEGORIES, 'ocr'].includes(annotation.type); summedPermissions._merge(permissions); } @@ -79,6 +86,8 @@ export class AnnotationPermissions { result.canRemoveRedaction = permissions.reduce((acc, next) => acc && next.canRemoveRedaction, true); result.canUndo = permissions.reduce((acc, next) => acc && next.canUndo, true); result.canEditAnnotations = permissions.reduce((acc, next) => acc && next.canEditAnnotations, true); + result.canEditHints = permissions.reduce((acc, next) => acc && next.canEditHints, true); + result.canEditImages = permissions.reduce((acc, next) => acc && next.canEditImages, true); return result; } diff --git a/apps/red-ui/src/app/modules/file-preview/components/annotation-actions/annotation-actions.component.ts b/apps/red-ui/src/app/modules/file-preview/components/annotation-actions/annotation-actions.component.ts index 60cd1703f..0d7097ec4 100644 --- a/apps/red-ui/src/app/modules/file-preview/components/annotation-actions/annotation-actions.component.ts +++ b/apps/red-ui/src/app/modules/file-preview/components/annotation-actions/annotation-actions.component.ts @@ -39,24 +39,35 @@ export class AnnotationActionsComponent implements OnChanges { }); readonly #isDocumine = getConfig().IS_DOCUMINE; + constructor( + readonly viewModeService: ViewModeService, + readonly helpModeService: HelpModeService, + readonly multiSelectService: MultiSelectService, + private readonly _state: FilePreviewStateService, + private readonly _permissionsService: PermissionsService, + private readonly _iqserPermissionsService: IqserPermissionsService, + private readonly _annotationManager: REDAnnotationManager, + readonly annotationActionsService: AnnotationActionsService, + readonly annotationReferencesService: AnnotationReferencesService, + ) {} + get annotations(): AnnotationWrapper[] { return this.#annotations; } - @Input() - set annotations(annotations: AnnotationWrapper[]) { - this.#annotations = annotations.filter(a => a !== undefined); - this.isImage = this.#annotations?.reduce((accumulator, annotation) => annotation.isImage && accumulator, true); - this._annotationId = this.#annotations[0]?.id; - } - get canEdit(): boolean { - const documineCanEditRedactions = + const canEditRedactions = this.annotationPermissions.canChangeLegalBasis || this.annotationPermissions.canRecategorizeAnnotation || this.annotationPermissions.canForceHint || this.annotationPermissions.canForceRedaction; - return this.#isDocumine && this.annotations.length > 1 ? this.annotationPermissions.canEditAnnotations : documineCanEditRedactions; + return this.annotations.length > 1 + ? this.#isDocumine + ? this.annotationPermissions.canEditAnnotations + : this.annotationPermissions.canEditHints || + this.annotationPermissions.canEditImages || + this.annotationPermissions.canEditAnnotations + : canEditRedactions; } get canRemoveRedaction(): boolean { @@ -76,17 +87,12 @@ export class AnnotationActionsComponent implements OnChanges { return this.annotations.every(a => a.superType === type); } - constructor( - readonly viewModeService: ViewModeService, - readonly helpModeService: HelpModeService, - readonly multiSelectService: MultiSelectService, - private readonly _state: FilePreviewStateService, - private readonly _permissionsService: PermissionsService, - private readonly _iqserPermissionsService: IqserPermissionsService, - private readonly _annotationManager: REDAnnotationManager, - readonly annotationActionsService: AnnotationActionsService, - readonly annotationReferencesService: AnnotationReferencesService, - ) {} + @Input() + set annotations(annotations: AnnotationWrapper[]) { + this.#annotations = annotations.filter(a => a !== undefined); + this.isImage = this.#annotations?.reduce((accumulator, annotation) => annotation.isImage && accumulator, true); + this._annotationId = this.#annotations[0]?.id; + } ngOnChanges(): void { this.#setPermissions(); diff --git a/apps/red-ui/src/app/modules/file-preview/dialogs/edit-redaction-dialog/edit-redaction-dialog.component.html b/apps/red-ui/src/app/modules/file-preview/dialogs/edit-redaction-dialog/edit-redaction-dialog.component.html index 68e887241..bb1270077 100644 --- a/apps/red-ui/src/app/modules/file-preview/dialogs/edit-redaction-dialog/edit-redaction-dialog.component.html +++ b/apps/red-ui/src/app/modules/file-preview/dialogs/edit-redaction-dialog/edit-redaction-dialog.component.html @@ -7,20 +7,27 @@ >
-
+
- {{ redactedText }} + +
    +
  • {{ text }}
  • +
+
- + {{ displayedDictionaryLabel }} - + - +
- +