RED-5912 - Suggestions make redactions disappear in PREVIEW mode

This commit is contained in:
Valentin Mihai 2023-05-30 10:55:42 +02:00
parent 1d4184be1b
commit 63595742b5
5 changed files with 48 additions and 35 deletions

View File

@ -363,7 +363,7 @@ export class FileWorkloadComponent extends AutoUnsubscribe implements OnInit, On
if (this._viewModeService.isRedacted) {
annotations = annotations.filter(a => !bool(a.isChangeLogRemoved));
annotations = this._suggestionsService.convertWorkloadRemoveSuggestionsToRedactions(annotations);
annotations = this._suggestionsService.filterWorkloadSuggestionsInPreview(annotations);
}
this.displayedAnnotations = this._annotationProcessingService.filterAndGroupAnnotations(annotations, primary, secondary);

View File

@ -210,7 +210,8 @@ export class FileDataService extends EntitiesService<AnnotationWrapper, Annotati
}
return filtered;
}, []);
this._suggestionsService.removedRedactions = await this.#buildAnnotations(redactionLogCopy, file);
const annotations = await this.#buildAnnotations(redactionLogCopy, file);
this._suggestionsService.removedRedactions = annotations.filter(a => !a.isSkipped);
}
}

View File

@ -24,39 +24,47 @@ export class SuggestionsService {
}
hideSuggestionsInPreview(annotations: Annotation[]): void {
if (!this._userPreferenceService.getDisplaySuggestionsInPreview()) {
const suggestions = annotations.filter(a => bool(a.getCustomData('suggestion')));
this._annotationManager.hide(suggestions);
this.#convertSuggestionsToRedactions(suggestions);
if (this._readableRedactionsService.active) {
if (this._userPreferenceService.getDisplaySuggestionsInPreview()) {
const suggestionsRemove = annotations.filter(
a => bool(a.getCustomData('suggestionRemove')) || bool(a.getCustomData('suggestionRecategorizeImage')),
);
this._annotationManager.hide(suggestionsRemove);
return;
}
}
const suggestionsToHide = annotations.filter(
a =>
(bool(a.getCustomData('suggestionAdd')) && !bool(a.getCustomData('suggestionAddToFalsePositive'))) ||
bool(a.getCustomData('suggestionRecategorizeImage')),
);
annotations.forEach(a => {
if (bool(a.getCustomData('suggestionRemove'))) {
const foundRedaction = this.#removedRedactions.find(r => r.id === a.Id);
if (!foundRedaction) {
suggestionsToHide.push(a);
}
}
});
this._annotationManager.hide(suggestionsToHide);
}
convertWorkloadRemoveSuggestionsToRedactions(annotations: AnnotationWrapper[]): AnnotationWrapper[] {
if (!this._userPreferenceService.getDisplaySuggestionsInPreview()) {
annotations = annotations.filter(a => !a.isSuggestion);
annotations = [...annotations, ...this.#removedRedactions];
filterWorkloadSuggestionsInPreview(annotations: AnnotationWrapper[]): AnnotationWrapper[] {
if (this._readableRedactionsService.active) {
if (this._userPreferenceService.getDisplaySuggestionsInPreview()) {
return annotations.filter(a => !a.isSuggestionRemove && !a.isSuggestionRecategorizeImage);
}
}
annotations = annotations.filter(a => !a.isSuggestionAdd || a.isSuggestionAddToFalsePositive);
for (let i = annotations.length - 1; i >= 0; i--) {
const foundRemovedRedaction = this.#removedRedactions.find(r => r.id === annotations[i].id);
if (foundRemovedRedaction) {
annotations[i] = foundRemovedRedaction;
} else if (annotations[i].isSuggestionRemove) {
annotations.splice(i, 1);
}
}
return annotations;
}
#convertSuggestionsToRedactions(suggestions: Annotation[]): void {
suggestions = this.#filterSuggestions(suggestions);
suggestions.forEach(s => s.setCustomData('suggestion', 'false'));
this._readableRedactionsService.setAnnotationsColor(suggestions, 'redactionColor');
this._readableRedactionsService.setAnnotationsOpacity(suggestions);
this._annotationManager.show(suggestions);
}
#filterSuggestions(suggestions: Annotation[]): Annotation[] {
const filteredSuggestions = [];
this.#removedRedactions.forEach(r => {
const found = suggestions.find(s => s.Id === r.annotationId);
if (found) {
filteredSuggestions.push(found);
}
});
return filteredSuggestions;
}
}

View File

@ -156,7 +156,10 @@ export class AnnotationDrawService {
annotation.setCustomData('redact-manager', 'true');
annotation.setCustomData('redaction', String(annotationWrapper.previewAnnotation));
annotation.setCustomData('suggestion', String(annotationWrapper.isSuggestion));
annotation.setCustomData('suggestionAdd', String(annotationWrapper.isSuggestionAdd));
annotation.setCustomData('suggestionAddToFalsePositive', String(annotationWrapper.isSuggestionAddToFalsePositive));
annotation.setCustomData('suggestionRemove', String(annotationWrapper.isSuggestionRemove));
annotation.setCustomData('suggestionRecategorizeImage', String(annotationWrapper.isSuggestionRecategorizeImage));
annotation.setCustomData('skipped', String(annotationWrapper.isSkipped));
annotation.setCustomData('changeLog', String(annotationWrapper.isChangeLogEntry));
annotation.setCustomData('changeLogRemoved', String(annotationWrapper.isChangeLogRemoved));

View File

@ -1,5 +1,5 @@
import { Inject, Injectable } from '@angular/core';
import { BASE_HREF_FN, BaseHrefFn, bool } from '@iqser/common-ui';
import { inject, Injectable } from '@angular/core';
import { BASE_HREF_FN } from '@iqser/common-ui';
import { TranslateService } from '@ngx-translate/core';
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
import { HeaderElements } from '../../file-preview/utils/constants';
@ -13,12 +13,12 @@ import Annotation = Core.Annotations.Annotation;
@Injectable()
export class ReadableRedactionsService {
readonly active$: Observable<boolean>;
private readonly _convertPath = inject(BASE_HREF_FN);
readonly #enableIcon = this._convertPath('/assets/icons/general/redaction-preview.svg');
readonly #disableIcon = this._convertPath('/assets/icons/general/redaction-final.svg');
readonly #active$ = new BehaviorSubject<boolean>(true);
constructor(
@Inject(BASE_HREF_FN) private readonly _convertPath: BaseHrefFn,
private readonly _pdf: PdfViewer,
private readonly _translateService: TranslateService,
private readonly _annotationManager: REDAnnotationManager,
@ -79,7 +79,8 @@ export class ReadableRedactionsService {
setAnnotationsOpacity(annotations: Annotation[], restoreToOriginal = false) {
annotations.forEach(annotation => {
annotation['Opacity'] = restoreToOriginal ? parseFloat(annotation.getCustomData('opacity')) : 0.5;
const isSuggestion = annotation.getCustomData('suggestion');
annotation['Opacity'] = restoreToOriginal || isSuggestion ? parseFloat(annotation.getCustomData('opacity')) : 0.5;
});
}