diff --git a/apps/red-ui/src/app/modules/account/utils/dialog-defaults.ts b/apps/red-ui/src/app/modules/account/utils/dialog-defaults.ts index a723d5878..b5090ec0d 100644 --- a/apps/red-ui/src/app/modules/account/utils/dialog-defaults.ts +++ b/apps/red-ui/src/app/modules/account/utils/dialog-defaults.ts @@ -2,11 +2,12 @@ import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { addHintTranslations } from '@translations/add-hint-translations'; import { redactTextTranslations } from '@translations/redact-text-translations'; import { removeRedactionTranslations } from '@translations/remove-redaction-translations'; -import { RedactOrHintOptions, RemoveRedactionOptions } from '../../file-preview/utils/dialog-types'; +import { ForceAnnotationOptions, RedactOrHintOptions, RemoveRedactionOptions } from '../../file-preview/utils/dialog-types'; export const SystemDefaults = { ADD_REDACTION_DEFAULT: RedactOrHintOptions.IN_DOSSIER, ADD_HINT_DEFAULT: RedactOrHintOptions.IN_DOSSIER, + FORCE_REDACTION_DEFAULT: ForceAnnotationOptions.ONLY_HERE, REMOVE_REDACTION_DEFAULT: RemoveRedactionOptions.ONLY_HERE, REMOVE_HINT_DEFAULT: RemoveRedactionOptions.ONLY_HERE, REMOVE_RECOMMENDATION_DEFAULT: RemoveRedactionOptions.DO_NOT_RECOMMEND, @@ -28,6 +29,10 @@ export const redactionAddOptions = [ label: redactTextTranslations.onlyHere.label, value: RedactOrHintOptions.ONLY_HERE, }, + { + label: redactTextTranslations.inDocument.label, + value: RedactOrHintOptions.IN_DOCUMENT, + }, { label: redactTextTranslations.inDossier.label, value: RedactOrHintOptions.IN_DOSSIER, diff --git a/apps/red-ui/src/app/modules/file-preview/dialogs/force-redaction-dialog/force-annotation-dialog.component.html b/apps/red-ui/src/app/modules/file-preview/dialogs/force-redaction-dialog/force-annotation-dialog.component.html index 8d9139b12..9a34be925 100644 --- a/apps/red-ui/src/app/modules/file-preview/dialogs/force-redaction-dialog/force-annotation-dialog.component.html +++ b/apps/red-ui/src/app/modules/file-preview/dialogs/force-redaction-dialog/force-annotation-dialog.component.html @@ -2,32 +2,40 @@
-
- -
- - - - - {{ option.label }} - - - -
+
+ @if (!isImageHint) { + + } -
- - -
+ @if (!isHintDialog && !isDocumine) { + + +
+ + + + @for (option of legalOptions; track option) { + + {{ option.label }} + + } + + +
+ +
+ + +
+ }
diff --git a/apps/red-ui/src/app/modules/file-preview/dialogs/force-redaction-dialog/force-annotation-dialog.component.ts b/apps/red-ui/src/app/modules/file-preview/dialogs/force-redaction-dialog/force-annotation-dialog.component.ts index 28630826d..2bf000c19 100644 --- a/apps/red-ui/src/app/modules/file-preview/dialogs/force-redaction-dialog/force-annotation-dialog.component.ts +++ b/apps/red-ui/src/app/modules/file-preview/dialogs/force-redaction-dialog/force-annotation-dialog.component.ts @@ -25,6 +25,11 @@ import { MatFormField } from '@angular/material/form-field'; import { MatOption, MatSelect, MatSelectTrigger } from '@angular/material/select'; import { MatTooltip } from '@angular/material/tooltip'; import { TranslateModule } from '@ngx-translate/core'; +import { DetailsRadioOption } from '@common-ui/inputs/details-radio/details-radio-option'; +import { ForceAnnotationOption, RedactOrHintOption } from '../../utils/dialog-types'; +import { getForceAnnotationOptions, getRedactOrHintOptions } from '../../utils/dialog-options'; +import { DetailsRadioComponent } from '@common-ui/inputs/details-radio/details-radio.component'; +import { SystemDefaults } from '../../../account/utils/dialog-defaults'; export interface LegalBasisOption { label?: string; @@ -55,10 +60,12 @@ const DOCUMINE_LEGAL_BASIS = 'n-a.'; CircleButtonComponent, NgForOf, HelpButtonComponent, + DetailsRadioComponent, ], }) export class ForceAnnotationDialogComponent extends BaseDialogComponent implements OnInit { readonly isDocumine = getConfig().IS_DOCUMINE; + readonly options: DetailsRadioOption[]; readonly tableColumns = [ { @@ -85,6 +92,7 @@ export class ForceAnnotationDialogComponent extends BaseDialogComponent implemen private readonly _data: { readonly dossier: Dossier; readonly hint: boolean; annotations: AnnotationWrapper[] }, ) { super(_dialogRef); + this.options = getForceAnnotationOptions(this.isDocumine, this.isHintDialog); this.form = this.#getForm(); } @@ -137,6 +145,7 @@ export class ForceAnnotationDialogComponent extends BaseDialogComponent implemen return this._formBuilder.group({ reason: this._data.hint ? ['Forced Hint'] : [null, !this.isDocumine ? Validators.required : null], comment: [null], + option: this.options.find(o => o.value === SystemDefaults.FORCE_REDACTION_DEFAULT), }); } @@ -145,6 +154,7 @@ export class ForceAnnotationDialogComponent extends BaseDialogComponent implemen request.legalBasis = !this.isDocumine ? this.form.get('reason').value.legalBasis : DOCUMINE_LEGAL_BASIS; request.comment = this.form.get('comment').value; + request.option = this.form.get('option').value.value; return request; } diff --git a/apps/red-ui/src/app/modules/file-preview/dialogs/redact-recommendation-dialog/redact-recommendation-dialog.component.ts b/apps/red-ui/src/app/modules/file-preview/dialogs/redact-recommendation-dialog/redact-recommendation-dialog.component.ts index dc50676e2..ef4ce7d20 100644 --- a/apps/red-ui/src/app/modules/file-preview/dialogs/redact-recommendation-dialog/redact-recommendation-dialog.component.ts +++ b/apps/red-ui/src/app/modules/file-preview/dialogs/redact-recommendation-dialog/redact-recommendation-dialog.component.ts @@ -22,7 +22,13 @@ import { ValueColumn, } from '../../components/selected-annotations-table/selected-annotations-table.component'; import { getRedactOrHintOptions } from '../../utils/dialog-options'; -import { RedactOrHintOption, RedactOrHintOptions, RedactRecommendationData, RedactRecommendationResult } from '../../utils/dialog-types'; +import { + RedactOrHintOption, + RedactOrHintOptions, + RedactRecommendationData, + RedactRecommendationResult, + ResizeOptions, +} from '../../utils/dialog-types'; import { LegalBasisOption } from '../manual-redaction-dialog/manual-annotation-dialog.component'; @Component({ @@ -156,6 +162,7 @@ export class RedactRecommendationDialogComponent this.close({ redaction, isMulti: this.isMulti, + bulkLocal: this.form.controls.option.value.value === ResizeOptions.IN_DOCUMENT, }); } diff --git a/apps/red-ui/src/app/modules/file-preview/dialogs/redact-text-dialog/redact-text-dialog.component.scss b/apps/red-ui/src/app/modules/file-preview/dialogs/redact-text-dialog/redact-text-dialog.component.scss index 22fe3116d..64afce14d 100644 --- a/apps/red-ui/src/app/modules/file-preview/dialogs/redact-text-dialog/redact-text-dialog.component.scss +++ b/apps/red-ui/src/app/modules/file-preview/dialogs/redact-text-dialog/redact-text-dialog.component.scss @@ -1,5 +1,5 @@ .dialog-content { - height: 493px; + height: 530px; overflow-y: auto; } diff --git a/apps/red-ui/src/app/modules/file-preview/dialogs/redact-text-dialog/redact-text-dialog.component.ts b/apps/red-ui/src/app/modules/file-preview/dialogs/redact-text-dialog/redact-text-dialog.component.ts index ceea04f86..df94ab8bb 100644 --- a/apps/red-ui/src/app/modules/file-preview/dialogs/redact-text-dialog/redact-text-dialog.component.ts +++ b/apps/red-ui/src/app/modules/file-preview/dialogs/redact-text-dialog/redact-text-dialog.component.ts @@ -21,7 +21,7 @@ import { firstValueFrom, Observable } from 'rxjs'; import { map, tap } from 'rxjs/operators'; import { SystemDefaultOption, SystemDefaults } from '../../../account/utils/dialog-defaults'; import { getRedactOrHintOptions } from '../../utils/dialog-options'; -import { RedactOrHintOption, RedactOrHintOptions, RedactTextData, RedactTextResult } from '../../utils/dialog-types'; +import { RedactOrHintOption, RedactOrHintOptions, RedactTextData, RedactTextResult, ResizeOptions } from '../../utils/dialog-types'; import { LegalBasisOption } from '../manual-redaction-dialog/manual-annotation-dialog.component'; const MAXIMUM_TEXT_AREA_WIDTH = 421; @@ -165,7 +165,7 @@ export class RedactTextDialogComponent if (!this.#applyToAllDossiers) { const selectedDictionaryType = this.form.controls.dictionary.value; const selectedDictionary = this.dictionaries.find(d => d.type === selectedDictionaryType); - this.options[1].extraOption.disabled = selectedDictionary.dossierDictionaryOnly; + this.options[2].extraOption.disabled = selectedDictionary.dossierDictionaryOnly; } } @@ -175,6 +175,7 @@ export class RedactTextDialogComponent this.close({ redaction, dictionary: this.dictionaries.find(d => d.type === this.form.controls.dictionary.value), + bulkLocal: this.form.controls.option.value.value === ResizeOptions.IN_DOCUMENT, }); } @@ -188,14 +189,18 @@ export class RedactTextDialogComponent #setupValidators(option: RedactOrHintOption) { switch (option) { - case RedactOrHintOptions.IN_DOSSIER: - this.form.controls.reason.clearValidators(); - this.form.controls.dictionary.addValidators(Validators.required); - break; case RedactOrHintOptions.ONLY_HERE: this.form.controls.dictionary.clearValidators(); this.form.controls.reason.addValidators(Validators.required); break; + case RedactOrHintOptions.IN_DOCUMENT: + this.form.controls.dictionary.clearValidators(); + this.form.controls.reason.addValidators(Validators.required); + break; + case RedactOrHintOptions.IN_DOSSIER: + this.form.controls.reason.clearValidators(); + this.form.controls.dictionary.addValidators(Validators.required); + break; } this.form.controls.reason.updateValueAndValidity(); @@ -251,7 +256,7 @@ export class RedactTextDialogComponent #resetValues() { this.#applyToAllDossiers = this.applyToAll; - this.options[1].extraOption.checked = this.#applyToAllDossiers; + this.options[2].extraOption.checked = this.#applyToAllDossiers; if (this.dictionaryRequest) { this.form.controls.reason.setValue(null); this.form.controls.dictionary.setValue(null); diff --git a/apps/red-ui/src/app/modules/file-preview/dialogs/remove-redaction-dialog/remove-redaction-dialog.component.ts b/apps/red-ui/src/app/modules/file-preview/dialogs/remove-redaction-dialog/remove-redaction-dialog.component.ts index 431d41fbc..48e4d99d2 100644 --- a/apps/red-ui/src/app/modules/file-preview/dialogs/remove-redaction-dialog/remove-redaction-dialog.component.ts +++ b/apps/red-ui/src/app/modules/file-preview/dialogs/remove-redaction-dialog/remove-redaction-dialog.component.ts @@ -26,7 +26,13 @@ import { } from '../../components/selected-annotations-table/selected-annotations-table.component'; import { DialogHelpModeKeys } from '../../utils/constants'; import { getRemoveRedactionOptions } from '../../utils/dialog-options'; -import { RemoveRedactionData, RemoveRedactionOption, RemoveRedactionOptions, RemoveRedactionResult } from '../../utils/dialog-types'; +import { + RemoveRedactionData, + RemoveRedactionOption, + RemoveRedactionOptions, + RemoveRedactionResult, + ResizeOptions, +} from '../../utils/dialog-types'; @Component({ templateUrl: './remove-redaction-dialog.component.html', @@ -174,7 +180,10 @@ export class RemoveRedactionDialogComponent extends IqserDialogComponent< } save(): void { - this.close(this.form.getRawValue()); + this.close({ + ...this.form.getRawValue(), + bulkLocal: this.form.controls.option.value.value === ResizeOptions.IN_DOCUMENT, + }); } #getOption(option: RemoveRedactionOption): DetailsRadioOption { diff --git a/apps/red-ui/src/app/modules/file-preview/file-preview-screen.component.ts b/apps/red-ui/src/app/modules/file-preview/file-preview-screen.component.ts index 958ee18f9..7701d687c 100644 --- a/apps/red-ui/src/app/modules/file-preview/file-preview-screen.component.ts +++ b/apps/red-ui/src/app/modules/file-preview/file-preview-screen.component.ts @@ -468,6 +468,7 @@ export class FilePreviewScreenComponent extends AutoUnsubscribe implements OnIni const add$ = this._manualRedactionService.addAnnotation([result.redaction], this.dossierId, this.fileId, { hint, dictionaryLabel: result.dictionary?.label, + bulkLocal: result.bulkLocal, }); const addAndReload$ = add$.pipe( 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 7673762e6..519cf8c7a 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 @@ -32,6 +32,7 @@ import { ResizeRedactionDialogComponent } from '../dialogs/resize-redaction-dial import { EditRedactionData, EditRedactResult, + ForceAnnotationOptions, RemoveRedactionData, RemoveRedactionOptions, RemoveRedactionPermissions, @@ -80,14 +81,22 @@ export class AnnotationActionsService { const { dossierId, fileId } = this._state; const data = { dossier: this._state.dossier(), annotations, hint }; this._dialogService.openDialog('forceAnnotation', data, (request: ILegalBasisChangeRequest) => { - this.#processObsAndEmit( - this._manualRedactionService.bulkForce( + let obs$; + if (request.option === ForceAnnotationOptions.ONLY_HERE) { + obs$ = this._manualRedactionService.bulkForce( annotations.map(a => ({ ...request, annotationId: a.id })), dossierId, fileId, annotations[0].isIgnoredHint, - ), - ).then(); + ); + } else { + console.log('annotation: ', annotations[0]); + obs$ = this._manualRedactionService.addAnnotation(annotations, dossierId, fileId, { + hint, + bulkLocal: true, + }); + } + this.#processObsAndEmit(obs$).then(); }); } @@ -436,6 +445,7 @@ export class AnnotationActionsService { const includeUnprocessed = redactions.every(redaction => this.#includeUnprocessed(redaction, true)); const body = redactions.map(redaction => ({ annotationId: redaction.id, + value: redaction.value, comment: dialogResult.comment, removeFromDictionary, removeFromAllDossiers: !!dialogResult.option.extraOption?.checked || !!dialogResult.applyToAllDossiers, @@ -444,7 +454,15 @@ export class AnnotationActionsService { const isHint = redactions.every(r => r.isHint); const { dossierId, fileId } = this._state; this.#processObsAndEmit( - this._manualRedactionService.removeRedaction(body, dossierId, fileId, removeFromDictionary, isHint, includeUnprocessed), + this._manualRedactionService.removeRedaction( + body, + dossierId, + fileId, + removeFromDictionary, + isHint, + includeUnprocessed, + dialogResult.bulkLocal, + ), ).then(); } 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 dd90f6be4..630592f99 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 @@ -39,6 +39,7 @@ function getMessage(action: ManualRedactionActions, isDictionary = false, error export class ManualRedactionService extends GenericService { protected readonly _defaultModelPath = 'manualRedaction'; readonly #bulkRedaction = `${this._defaultModelPath}/bulk/redaction`; + readonly #bulkLocal = `${this._defaultModelPath}/bulk-local`; constructor( private readonly _toaster: Toaster, @@ -80,14 +81,14 @@ export class ManualRedactionService extends GenericService { requests: List, dossierId: string, fileId: string, - options?: { hint?: boolean; dictionaryLabel?: string }, + options?: { hint?: boolean; dictionaryLabel?: string; bulkLocal?: boolean }, ) { const toast = requests[0].addToDictionary ? 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, options.bulkLocal).pipe(toast); } return of(undefined); @@ -108,8 +109,9 @@ export class ManualRedactionService extends GenericService { removeFromDictionary = false, isHint = false, includeUnprocessed = false, + bulkLocal = false, ) { - return this.remove(body, dossierId, fileId, includeUnprocessed).pipe( + return this.remove(body, dossierId, fileId, includeUnprocessed, bulkLocal).pipe( this.#showToast(!isHint ? 'remove' : 'remove-hint', removeFromDictionary), ); } @@ -127,8 +129,9 @@ export class ManualRedactionService extends GenericService { } } - add(body: List, dossierId: string, fileId: string) { - return this._post(body, `${this.#bulkRedaction}/add/${dossierId}/${fileId}`).pipe(this.#log('Add', body)); + add(body: List, dossierId: string, fileId: string, bulkLocal = false) { + const bulkPath = bulkLocal ? this.#bulkLocal : this.#bulkRedaction; + return this._post(bulkLocal ? body[0] : body, `${bulkPath}/add/${dossierId}/${fileId}`).pipe(this.#log('Add', body)); } recategorize(body: List, dossierId: string, fileId: string, includeUnprocessed = false) { @@ -142,8 +145,13 @@ export class ManualRedactionService extends GenericService { return super.delete(annotationIds, url).pipe(this.#log('Undo', annotationIds)); } - remove(body: List, dossierId: string, fileId: string, includeUnprocessed = false) { - return this._post(body, `${this.#bulkRedaction}/remove/${dossierId}/${fileId}?includeUnprocessed=${includeUnprocessed}`).pipe( + remove(body: List, dossierId: string, fileId: string, includeUnprocessed = false, bulkLocal = false) { + const bulkPath = bulkLocal ? this.#bulkLocal : this.#bulkRedaction; + const newBody = { + value: body[0].value, + rectangle: false, + }; + return this._post(newBody, `${bulkPath}/remove/${dossierId}/${fileId}?includeUnprocessed=${includeUnprocessed}`).pipe( this.#log('Remove', body), ); } diff --git a/apps/red-ui/src/app/modules/file-preview/services/pdf-proxy.service.ts b/apps/red-ui/src/app/modules/file-preview/services/pdf-proxy.service.ts index 976be8626..607d21538 100644 --- a/apps/red-ui/src/app/modules/file-preview/services/pdf-proxy.service.ts +++ b/apps/red-ui/src/app/modules/file-preview/services/pdf-proxy.service.ts @@ -224,6 +224,7 @@ export class PdfProxyService { const selectedQuads: Record = this._pdf.documentViewer.getSelectedTextQuads(); const text = this._documentViewer.selectedText; const manualRedactionEntry = this.#getManualRedaction(selectedQuads, text, true); + console.log('manualRedactionEntry: ', manualRedactionEntry); this.redactTextRequested$.next({ manualRedactionEntry, type }); } diff --git a/apps/red-ui/src/app/modules/file-preview/utils/dialog-options.ts b/apps/red-ui/src/app/modules/file-preview/utils/dialog-options.ts index 7aff7bccd..217c4e891 100644 --- a/apps/red-ui/src/app/modules/file-preview/utils/dialog-options.ts +++ b/apps/red-ui/src/app/modules/file-preview/utils/dialog-options.ts @@ -7,6 +7,7 @@ import { removeAnnotationTranslations } from '@translations/remove-annotation-tr import { removeRedactionTranslations } from '@translations/remove-redaction-translations'; import { resizeRedactionTranslations } from '@translations/resize-redaction-translations'; import { + ForceAnnotationOption, RedactOrHintOption, RedactOrHintOptions, RemoveRedactionData, @@ -17,6 +18,7 @@ import { } from './dialog-types'; const PIN_ICON = 'red:push-pin'; +const DOCUMENT_ICON = 'iqser:document'; const FOLDER_ICON = 'red:folder'; const REMOVE_FROM_DICT_ICON = 'red:remove-from-dict'; @@ -77,6 +79,15 @@ export const getRedactOrHintOptions = ( return options; } + if (!isHint) { + options.push({ + label: redactTextTranslations.inDocument.label, + description: redactTextTranslations.inDocument.description, + icon: DOCUMENT_ICON, + value: ResizeOptions.IN_DOCUMENT, + }); + } + options.push({ label: translations.inDossier.label, description: translations.inDossier.description, @@ -140,6 +151,7 @@ export const getRemoveRedactionOptions = ( applyToAllDossiers: boolean, isDocumine: boolean = false, ): DetailsRadioOption[] => { + console.log('TEST'); const translations = isDocumine ? removeAnnotationTranslations : removeRedactionTranslations; const { permissions, redactions, isApprover, falsePositiveContext } = data; const isBulk = redactions.length > 1; @@ -156,6 +168,13 @@ export const getRemoveRedactionOptions = ( icon: PIN_ICON, value: RemoveRedactionOptions.ONLY_HERE, }); + + options.push({ + label: removeRedactionTranslations.IN_DOCUMENT.label, + description: removeRedactionTranslations.IN_DOCUMENT.description, + icon: DOCUMENT_ICON, + value: RemoveRedactionOptions.IN_DOCUMENT, + }); } if (permissions.canRemoveFromDictionary) { options.push({ @@ -217,3 +236,24 @@ export const getRemoveRedactionOptions = ( } return options; }; + +export const getForceAnnotationOptions = (isDocumine: boolean, isHint: boolean): DetailsRadioOption[] => { + if (isDocumine || isHint) { + return []; + } + + return [ + { + label: redactTextTranslations.onlyHere.label, + description: redactTextTranslations.onlyHere.description, + icon: PIN_ICON, + value: ResizeOptions.ONLY_HERE, + }, + { + label: redactTextTranslations.inDocument.label, + description: redactTextTranslations.inDocument.description, + icon: DOCUMENT_ICON, + value: ResizeOptions.IN_DOCUMENT, + }, + ]; +}; diff --git a/apps/red-ui/src/app/modules/file-preview/utils/dialog-types.ts b/apps/red-ui/src/app/modules/file-preview/utils/dialog-types.ts index 8fcac6603..d7efb27eb 100644 --- a/apps/red-ui/src/app/modules/file-preview/utils/dialog-types.ts +++ b/apps/red-ui/src/app/modules/file-preview/utils/dialog-types.ts @@ -5,16 +5,25 @@ import { Dictionary, Dossier, File, IAddRedactionRequest, IManualRedactionEntry export const RedactOrHintOptions = { ONLY_HERE: 'ONLY_HERE', + IN_DOCUMENT: 'IN_DOCUMENT', IN_DOSSIER: 'IN_DOSSIER', } as const; export type RedactOrHintOption = keyof typeof RedactOrHintOptions; +export const ForceAnnotationOptions = { + ONLY_HERE: 'ONLY_HERE', + IN_DOCUMENT: 'IN_DOCUMENT', +} as const; + +export type ForceAnnotationOption = keyof typeof ForceAnnotationOptions; + export const ResizeOptions = RedactOrHintOptions; export type ResizeRedactionOption = RedactOrHintOption; export const RemoveRedactionOptions = { ONLY_HERE: 'ONLY_HERE', + IN_DOCUMENT: 'IN_DOCUMENT', IN_DOSSIER: 'IN_DOSSIER', FALSE_POSITIVE: 'FALSE_POSITIVE', DO_NOT_RECOMMEND: 'DO_NOT_RECOMMEND', @@ -46,6 +55,7 @@ export type AddHintData = RedactTextData; export interface RedactTextResult { redaction: IManualRedactionEntry; dictionary: Dictionary; + bulkLocal?: boolean; } export type RedactRecommendationData = EditRedactionData; @@ -53,6 +63,7 @@ export type RedactRecommendationData = EditRedactionData; export interface RedactRecommendationResult { redaction: IAddRedactionRequest; isMulti: boolean; + bulkLocal: boolean; } export interface EditRedactResult { @@ -112,6 +123,7 @@ export interface RemoveRedactionResult { comment: string; option: DetailsRadioOption; applyToAllDossiers?: boolean; + bulkLocal?: boolean; } export type RemoveAnnotationResult = RemoveRedactionResult; diff --git a/apps/red-ui/src/app/translations/redact-text-translations.ts b/apps/red-ui/src/app/translations/redact-text-translations.ts index 76bfadb81..a5166ca86 100644 --- a/apps/red-ui/src/app/translations/redact-text-translations.ts +++ b/apps/red-ui/src/app/translations/redact-text-translations.ts @@ -9,11 +9,15 @@ export interface DialogOption { extraOptionDescription?: string; } -export const redactTextTranslations: Record<'onlyHere' | 'inDossier', DialogOption> = { +export const redactTextTranslations: Record<'onlyHere' | 'inDocument' | 'inDossier', DialogOption> = { onlyHere: { label: _('redact-text.dialog.content.options.only-here.label'), description: _('redact-text.dialog.content.options.only-here.description'), }, + inDocument: { + label: _('redact-text.dialog.content.options.in-document.label'), + description: _('redact-text.dialog.content.options.in-document.description'), + }, inDossier: { label: _('redact-text.dialog.content.options.in-dossier.label'), description: _('redact-text.dialog.content.options.in-dossier.description'), diff --git a/apps/red-ui/src/app/translations/remove-annotation-translations.ts b/apps/red-ui/src/app/translations/remove-annotation-translations.ts index 478c9de8d..e6cd09f1a 100644 --- a/apps/red-ui/src/app/translations/remove-annotation-translations.ts +++ b/apps/red-ui/src/app/translations/remove-annotation-translations.ts @@ -8,6 +8,10 @@ export const removeAnnotationTranslations: { [key in RemoveAnnotationOption]: Di description: _('remove-annotation.dialog.content.options.only-here.description'), descriptionBulk: _('remove-annotation.dialog.content.options.only-here.description-bulk'), }, + IN_DOCUMENT: { + label: _('remove-annotation.dialog.content.options.in-document.label'), + description: _('remove-annotation.dialog.content.options.in-document.description'), + }, IN_DOSSIER: { label: _('remove-annotation.dialog.content.options.in-dossier.label'), labelBulk: _('remove-annotation.dialog.content.options.in-dossier.label-bulk'), diff --git a/apps/red-ui/src/app/translations/remove-redaction-translations.ts b/apps/red-ui/src/app/translations/remove-redaction-translations.ts index 41d5f8b86..910415bca 100644 --- a/apps/red-ui/src/app/translations/remove-redaction-translations.ts +++ b/apps/red-ui/src/app/translations/remove-redaction-translations.ts @@ -8,6 +8,10 @@ export const removeRedactionTranslations: { [key in RemoveRedactionOption]: Dial description: _('remove-redaction.dialog.content.options.only-here.description'), descriptionBulk: _('remove-redaction.dialog.content.options.only-here.description-bulk'), }, + IN_DOCUMENT: { + label: _('remove-redaction.dialog.content.options.in-document.label'), + description: _('remove-redaction.dialog.content.options.in-document.description'), + }, IN_DOSSIER: { label: _('remove-redaction.dialog.content.options.in-dossier.label'), labelBulk: _('remove-redaction.dialog.content.options.in-dossier.label-bulk'), diff --git a/apps/red-ui/src/assets/config/config.json b/apps/red-ui/src/assets/config/config.json index 5f6c0ce6e..deb14e6da 100644 --- a/apps/red-ui/src/assets/config/config.json +++ b/apps/red-ui/src/assets/config/config.json @@ -1,7 +1,7 @@ { "ADMIN_CONTACT_NAME": null, "ADMIN_CONTACT_URL": null, - "API_URL": "https://dan2.iqser.cloud", + "API_URL": "https://dan1.iqser.cloud", "APP_NAME": "RedactManager", "IS_DOCUMINE": false, "RULE_EDITOR_DEV_ONLY": false, @@ -13,7 +13,7 @@ "MAX_RETRIES_ON_SERVER_ERROR": 3, "OAUTH_CLIENT_ID": "redaction", "OAUTH_IDP_HINT": null, - "OAUTH_URL": "https://dan2.iqser.cloud/auth", + "OAUTH_URL": "https://dan1.iqser.cloud/auth", "RECENT_PERIOD_IN_HOURS": 24, "SELECTION_MODE": "structural", "MANUAL_BASE_URL": "https://docs.redactmanager.com/preview", diff --git a/apps/red-ui/src/assets/i18n/redact/de.json b/apps/red-ui/src/assets/i18n/redact/de.json index 09ccabbb5..ea6e33f05 100644 --- a/apps/red-ui/src/assets/i18n/redact/de.json +++ b/apps/red-ui/src/assets/i18n/redact/de.json @@ -242,7 +242,6 @@ "label": "Nur hier hinzufügen" } }, - "selected-text": "Ausgewählter Text:", "type": "Typ", "type-placeholder": "Typ auswählen..." }, @@ -276,9 +275,6 @@ "watermarks": "Wasserzeichen" }, "analysis-disabled": "", - "annotation": { - "pending": "(Analyse steht aus)" - }, "annotation-actions": { "accept-recommendation": { "label": "Empfehlung annehmen" @@ -334,14 +330,14 @@ "error": "Rekategorisierung des Bilds fehlgeschlagen: {error}", "success": "Bild wurde einer neuen Kategorie zugeordnet." }, - "remove": { - "error": "Entfernen der Schwärzung fehlgeschlagen: {error}", - "success": "Schwärzung wurde entfernt" - }, "remove-hint": { "error": "Entfernen des Hinweises fehlgeschlagen: {error}", "success": "Hinweis wurde entfernt" }, + "remove": { + "error": "Entfernen der Schwärzung fehlgeschlagen: {error}", + "success": "Schwärzung wurde entfernt" + }, "undo": { "error": "Die Aktion konnte nicht rückgängig gemacht werden. Fehler: {error}", "success": "Rücksetzung erfolgreich" @@ -354,15 +350,15 @@ "remove-highlights": { "label": "Ausgewählte Markierungen entfernen" }, - "resize": { - "label": "Größe ändern" - }, "resize-accept": { "label": "Neue Größe speichern" }, "resize-cancel": { "label": "Größenänderung abbrechen" }, + "resize": { + "label": "Größe ändern" + }, "see-references": { "label": "Referenzen anzeigen" }, @@ -396,6 +392,9 @@ "skipped": "Ignorierte Schwärzung", "text-highlight": "Markierung" }, + "annotation": { + "pending": "(Analyse steht aus)" + }, "annotations": "Annotationen", "archived-dossiers-listing": { "no-data": { @@ -639,18 +638,14 @@ "warning": "Warnung: Wiederherstellung des Benutzers nicht möglich." }, "confirmation-dialog": { - "approve-file": { - "question": "Dieses Dokument enthält ungesehene Änderungen, die sich durch die Reanalyse ergeben haben.

Möchten Sie es trotzdem freigeben?", - "title": "Warnung!" - }, "approve-file-without-analysis": { "confirmationText": "Ohne Analyse freigeben", "denyText": "Abbrechen", "question": "Analyse zur Erkennung neuer Schwärzungen erforderlich.", "title": "Warnung!" }, - "approve-multiple-files": { - "question": "Mindestens eine der ausgewählten Dateien enthält ungesehene Änderungen, die im Zuge einer Reanalyse hinzugefügt wurden.

Möchen Sie die Dateien wirklich freigeben?", + "approve-file": { + "question": "Dieses Dokument enthält ungesehene Änderungen, die sich durch die Reanalyse ergeben haben.

Möchten Sie es trotzdem freigeben?", "title": "Warnung!" }, "approve-multiple-files-without-analysis": { @@ -659,6 +654,10 @@ "question": "Für mindestens eine Datei ist ein Analyselauf zur Erkennung neuer Schwärzungen erforderlich.", "title": "Warnung" }, + "approve-multiple-files": { + "question": "Mindestens eine der ausgewählten Dateien enthält ungesehene Änderungen, die im Zuge einer Reanalyse hinzugefügt wurden.

Möchen Sie die Dateien wirklich freigeben?", + "title": "Warnung!" + }, "assign-file-to-me": { "question": { "multiple": "Dieses Dokument wird gerade von einer anderen Person geprüft.

Möchten Sie sich die Datei dennoch zuweisen?", @@ -1028,13 +1027,13 @@ "recent": "Neu ({hours} h)", "unassigned": "Keinem Bearbeiter zugewiesen" }, - "reanalyse": { - "action": "Datei analysieren" - }, "reanalyse-dossier": { "error": "Einplanung der Dateien für die Reanalyse fehlgeschlagen. Bitte versuchen Sie es noch einmal.", "success": "Dateien für Reanalyse vorgesehen." }, + "reanalyse": { + "action": "Datei analysieren" + }, "report-download": "", "start-auto-analysis": "Auto-Analyse aktivieren", "stop-auto-analysis": "Auto-Analyse anhalten", @@ -1104,14 +1103,6 @@ "total-documents": "Dokumente", "total-people": "{count} {count, plural, one{Benutzer} other {Benutzer}}" }, - "dossier-templates": { - "label": "Dossier-Vorlagen", - "status": { - "active": "Aktiv", - "inactive": "Inaktiv", - "incomplete": "Unvollständig" - } - }, "dossier-templates-listing": { "action": { "clone": "Vorlage klonen", @@ -1146,6 +1137,14 @@ "title": "{length} {length, plural, one{Dossier-Vorlage} other{Dossier-Vorlagen}}" } }, + "dossier-templates": { + "label": "Dossier-Vorlagen", + "status": { + "active": "Aktiv", + "inactive": "Inaktiv", + "incomplete": "Unvollständig" + } + }, "dossier-watermark-selector": { "heading": "Wasserzeichen auf Dokumenten", "no-watermark": "Kein Wasserzeichen in der Dossier-Vorlage verfügbar:
Bitten Sie Ihren Admin, eines zu konfigurieren.", @@ -1341,15 +1340,6 @@ "title": "{length} {length, plural, one{Wörterbuch} other{Wörterbücher}}" } }, - "entity": { - "info": { - "actions": { - "revert": "Zurücksetzen", - "save": "Änderungen speichern" - }, - "heading": "Entität bearbeiten" - } - }, "entity-rules-screen": { "error": { "generic": "Fehler: Aktualisierung der Entitätsregeln fehlgeschlagen." @@ -1363,19 +1353,28 @@ "title": "Entitätsregeln-Editor", "warnings-found": "{warnings, plural, one{A warning} other{{warnings} warnings}} in Regeln gefunden" }, + "entity": { + "info": { + "actions": { + "revert": "Zurücksetzen", + "save": "Änderungen speichern" + }, + "heading": "Entität bearbeiten" + } + }, "error": { "deleted-entity": { "dossier": { "action": "Zurück zur Übersicht", "label": "Dieses Dossier wurde gelöscht!" }, - "file": { - "action": "Zurück zum Dossier", - "label": "Diese Datei wurde gelöscht!" - }, "file-dossier": { "action": "Zurück zur Übersicht", "label": "Das Dossier dieser Datei wurde gelöscht!" + }, + "file": { + "action": "Zurück zum Dossier", + "label": "Diese Datei wurde gelöscht!" } }, "file-preview": { @@ -1393,12 +1392,6 @@ }, "exact-date": "{day}. {month} {year} um {hour}:{minute} Uhr", "file": "Datei", - "file-attribute": { - "update": { - "error": "Aktualisierung des Werts für das Datei-Attribut fehlgeschlagen. Bitte versuchen Sie es noch einmal.", - "success": "Der Wert für das Dateiattribut wurde erfolgreich aktualisiert." - } - }, "file-attribute-encoding-types": { "ascii": "ASCII", "iso": "ISO-8859-1", @@ -1409,6 +1402,12 @@ "number": "Nummer", "text": "Freier Text" }, + "file-attribute": { + "update": { + "error": "Aktualisierung des Werts für das Datei-Attribut fehlgeschlagen. Bitte versuchen Sie es noch einmal.", + "success": "Der Wert für das Dateiattribut wurde erfolgreich aktualisiert." + } + }, "file-attributes-configurations": { "cancel": "Abbrechen", "form": { @@ -1626,15 +1625,6 @@ "csv": "Die Datei-Attribute wurden erfolgreich aus der hochgeladenen CSV-Datei importiert." } }, - "filter": { - "analysis": "Analyse erforderlich", - "comment": "Kommentare", - "hint": "Nur Hinweise", - "image": "Bilder", - "none": "Keine Annotationen", - "redaction": "Schwärzungen", - "updated": "Aktualisiert" - }, "filter-menu": { "filter-options": "Filteroptionen", "filter-types": "Filter", @@ -1644,6 +1634,15 @@ "unseen-pages": "Nur Annotationen auf ungesehenen Seiten", "with-comments": "Nur Annotationen mit Kommentaren" }, + "filter": { + "analysis": "Analyse erforderlich", + "comment": "Kommentare", + "hint": "Nur Hinweise", + "image": "Bilder", + "none": "Keine Annotationen", + "redaction": "Schwärzungen", + "updated": "Aktualisiert" + }, "filters": { "assigned-people": "Bearbeiter", "documents-status": "Dokumentenstatus", @@ -1922,13 +1921,6 @@ "user-promoted-to-approver": "{user} wurde im Dossier {dossierHref, select, null{{dossierName}} other{{dossierName}}} zum Genehmiger ernannt!", "user-removed-as-dossier-member": "{user} wurde als Mitglied von: {dossierHref, select, null{{dossierName}} other{{dossierName}}} entfernt!" }, - "notifications": { - "button-text": "Benachrichtigungen", - "deleted-dossier": "Gelöschtes Dossier", - "label": "Benachrichtigungen", - "mark-all-as-read": "Alle als gelesen markieren", - "mark-as": "Als {type, select, read{gelesen} unread{ungelesen} other{}} markieren" - }, "notifications-screen": { "category": { "email-notifications": "E-Mail-Benachrichtigungen", @@ -1942,6 +1934,7 @@ "dossier": "Benachrichtigungen zu Dossiers", "other": "Andere Benachrichtigungen" }, + "options-title": "Wählen Sie aus, bei welchen Aktivitäten Sie benachrichtigt werden möchten", "options": { "ASSIGN_APPROVER": "Wenn ich einem Dokument als Genehmiger zugewiesen werde", "ASSIGN_REVIEWER": "Wenn ich einem Dokument als Prüfer zugewiesen werde", @@ -1959,7 +1952,6 @@ "USER_PROMOTED_TO_APPROVER": "Wenn ich Genehmiger in einem Dossier werde", "USER_REMOVED_AS_DOSSIER_MEMBER": "Wenn ich die Dossier-Mitgliedschaft verliere" }, - "options-title": "Wählen Sie aus, bei welchen Aktivitäten Sie benachrichtigt werden möchten", "schedule": { "daily": "Tägliche Zusammenfassung", "instant": "Sofort", @@ -1967,6 +1959,13 @@ }, "title": "Benachrichtigungseinstellungen" }, + "notifications": { + "button-text": "Benachrichtigungen", + "deleted-dossier": "Gelöschtes Dossier", + "label": "Benachrichtigungen", + "mark-all-as-read": "Alle als gelesen markieren", + "mark-as": "Als {type, select, read{gelesen} unread{ungelesen} other{}} markieren" + }, "ocr": { "confirmation-dialog": { "cancel": "Abbrechen", @@ -2058,16 +2057,16 @@ "warnings-label": "Dialoge und Meldungen", "warnings-subtitle": "„Nicht mehr anzeigen“-Optionen" }, - "processing": { - "basic": "Verarbeitung läuft", - "ocr": "OCR" - }, "processing-status": { "ocr": "OCR", "pending": "Ausstehend", "processed": "Verarbeitet", "processing": "Verarbeitung läuft" }, + "processing": { + "basic": "Verarbeitung läuft", + "ocr": "OCR" + }, "readonly": "Lesemodus", "readonly-archived": "Lesemodus (archiviert)", "redact-text": { @@ -2082,6 +2081,10 @@ "edit-text": "Text bearbeiten", "legal-basis": "Rechtsgrundlage", "options": { + "in-document": { + "description": "", + "label": "" + }, "in-dossier": { "description": "Fügen Sie die Schwärzung zu jedem Dokument in {dossierName} hinzu.", "extraOptionLabel": "In alle aktiven und zukünftigen Dossiers übernehmen", @@ -2121,6 +2124,10 @@ "description-bulk": "", "label": "In diesem Kontext aus dem Dossier entfernen" }, + "in-document": { + "description": "", + "label": "" + }, "in-dossier": { "description": "Annotieren Sie den Begriff in diesem Dossier nicht.", "description-bulk": "", @@ -2161,6 +2168,10 @@ "extraOptionLabel": "In alle aktiven und zukünftigen Dossiers übernehmen", "label": "In diesem Kontext aus Dossier entfernen" }, + "in-document": { + "description": "", + "label": "" + }, "in-dossier": { "description": "Der Begriff wird in keinem Dokument dieses Dossiers {type, select, hint{annotiert} other{automatisch geschwärzt}}.", "description-bulk": "Die ausgewählten Begriffe werden in diesem Dossier nicht {type, select, hint{annotiert} other{automatisch geschwärzt}}.", @@ -2303,12 +2314,6 @@ "red-user-admin": "Benutzeradmin", "regular": "regulärer Benutzer" }, - "search": { - "active-dossiers": "Dokumente in aktiven Dossiers", - "all-dossiers": "Alle Dokumente", - "placeholder": "Dokumente durchsuchen...", - "this-dossier": "In diesem Dossier" - }, "search-screen": { "cols": { "assignee": "Bearbeiter", @@ -2332,6 +2337,12 @@ "no-match": "Der Suchbegriff wurde in keinem der Dokumente gefunden.", "table-header": "{length} {length, plural, one{Suchergebnis} other{Suchergebnisse}}" }, + "search": { + "active-dossiers": "Dokumente in aktiven Dossiers", + "all-dossiers": "Alle Dokumente", + "placeholder": "Dokumente durchsuchen...", + "this-dossier": "In diesem Dossier" + }, "seconds": "Sekunden", "size": "Größe", "smtp-auth-config": { @@ -2587,4 +2598,4 @@ } }, "yesterday": "Gestern" -} \ No newline at end of file +} diff --git a/apps/red-ui/src/assets/i18n/redact/en.json b/apps/red-ui/src/assets/i18n/redact/en.json index 765ae48f9..1208b8d24 100644 --- a/apps/red-ui/src/assets/i18n/redact/en.json +++ b/apps/red-ui/src/assets/i18n/redact/en.json @@ -242,7 +242,6 @@ "label": "Add hint only here" } }, - "selected-text": "Selected text:", "type": "Type", "type-placeholder": "Select type..." }, @@ -2082,6 +2081,10 @@ "edit-text": "Edit text", "legal-basis": "Legal basis", "options": { + "in-document": { + "description": "Add redaction for each occurrence of the term in this document.", + "label": "Redact in document" + }, "in-dossier": { "description": "Add redaction in every document in {dossierName}.", "extraOptionLabel": "Apply to all active and future dossiers", @@ -2121,6 +2124,10 @@ "description-bulk": "", "label": "Remove from dossier in this context" }, + "in-document": { + "description": "", + "label": "" + }, "in-dossier": { "description": "Do not annotate the term in this dossier.", "description-bulk": "", @@ -2161,6 +2168,10 @@ "extraOptionLabel": "Apply to all active and future dossiers", "label": "Remove from dossier in this context" }, + "in-document": { + "description": "Do not auto-redact the selected term in any pages of this document.", + "label": "Remove from document" + }, "in-dossier": { "description": "Do not {type, select, hint{annotate} other{auto-redact}} the selected term in any document of this dossier.", "description-bulk": "Do not {type, select, hint{annotate} other{auto-redact}} the selected terms in this dossier.", @@ -2587,4 +2598,4 @@ } }, "yesterday": "Yesterday" -} \ No newline at end of file +} diff --git a/apps/red-ui/src/assets/i18n/scm/de.json b/apps/red-ui/src/assets/i18n/scm/de.json index 3348899e0..ab563171b 100644 --- a/apps/red-ui/src/assets/i18n/scm/de.json +++ b/apps/red-ui/src/assets/i18n/scm/de.json @@ -242,7 +242,6 @@ "label": "Add hint only here" } }, - "selected-text": "Selected text:", "type": "Type", "type-placeholder": "Select type..." }, @@ -276,9 +275,6 @@ "watermarks": "Watermarks" }, "analysis-disabled": "Analysis disabled", - "annotation": { - "pending": "(Pending analysis)" - }, "annotation-actions": { "accept-recommendation": { "label": "Empfehlung annehmen" @@ -334,14 +330,14 @@ "error": "Rekategorisierung des Bildes gescheitert: {error}", "success": "Bild wurde einer neuen Kategorie zugeordnet." }, - "remove": { - "error": "Fehler beim Entfernen der Schwärzung: {error}", - "success": "Schwärzung entfernt!" - }, "remove-hint": { "error": "Failed to remove hint: {error}", "success": "Hint removed!" }, + "remove": { + "error": "Fehler beim Entfernen der Schwärzung: {error}", + "success": "Schwärzung entfernt!" + }, "undo": { "error": "Die Aktion konnte nicht rückgängig gemacht werden. Fehler: {error}", "success": "erfolgreich Rückgängig gemacht" @@ -354,15 +350,15 @@ "remove-highlights": { "label": "Remove selected earmarks" }, - "resize": { - "label": "Größe ändern" - }, "resize-accept": { "label": "Größe speichern" }, "resize-cancel": { "label": "Größenänderung abbrechen" }, + "resize": { + "label": "Größe ändern" + }, "see-references": { "label": "See references" }, @@ -396,6 +392,9 @@ "skipped": "Übersprungen", "text-highlight": "Earmark" }, + "annotation": { + "pending": "(Pending analysis)" + }, "annotations": "Annotations", "archived-dossiers-listing": { "no-data": { @@ -639,18 +638,14 @@ "warning": "Achtung: Diese Aktion kann nicht rückgängig gemacht werden!" }, "confirmation-dialog": { - "approve-file": { - "question": "Dieses Dokument enthält ungesehene Änderungen. Möchten Sie es trotzdem genehmigen?", - "title": "Warnung!" - }, "approve-file-without-analysis": { "confirmationText": "Approve without analysis", "denyText": "Cancel", "question": "Analysis required to detect new components.", "title": "Warning!" }, - "approve-multiple-files": { - "question": "Mindestens eine der ausgewählten Dateien enthält ungesehene Änderungen. Möchten Sie sie trotzdem genehmigen?", + "approve-file": { + "question": "Dieses Dokument enthält ungesehene Änderungen. Möchten Sie es trotzdem genehmigen?", "title": "Warnung!" }, "approve-multiple-files-without-analysis": { @@ -659,6 +654,10 @@ "question": "Analysis required to detect new components for at least one file.", "title": "Warning" }, + "approve-multiple-files": { + "question": "Mindestens eine der ausgewählten Dateien enthält ungesehene Änderungen. Möchten Sie sie trotzdem genehmigen?", + "title": "Warnung!" + }, "assign-file-to-me": { "question": { "multiple": "Dieses Dokument wird gerade von einer anderen Person geprüft. Möchten Sie Reviewer werden und sich selbst dem Dokument zuweisen?", @@ -1028,13 +1027,13 @@ "recent": "Neu ({hours} h)", "unassigned": "Niemandem zugewiesen" }, - "reanalyse": { - "action": "Datei analysieren" - }, "reanalyse-dossier": { "error": "Die Dateien konnten nicht für eine Reanalyse eingeplant werden. Bitte versuchen Sie es erneut.", "success": "Dateien für Reanalyse vorgesehen." }, + "reanalyse": { + "action": "Datei analysieren" + }, "report-download": "Report download", "start-auto-analysis": "Enable auto-analysis", "stop-auto-analysis": "Stop auto-analysis", @@ -1104,14 +1103,6 @@ "total-documents": "Anzahl der Dokumente", "total-people": "{count} {count, plural, one{user} other {users}}" }, - "dossier-templates": { - "label": "Dossier-Vorlagen", - "status": { - "active": "Active", - "inactive": "Inactive", - "incomplete": "Incomplete" - } - }, "dossier-templates-listing": { "action": { "clone": "Clone template", @@ -1146,6 +1137,14 @@ "title": "{length} dossier {length, plural, one{template} other{templates}}" } }, + "dossier-templates": { + "label": "Dossier-Vorlagen", + "status": { + "active": "Active", + "inactive": "Inactive", + "incomplete": "Incomplete" + } + }, "dossier-watermark-selector": { "heading": "Watermarks on documents", "no-watermark": "There is no watermark defined for the dossier template.
Contact your app admin to define one.", @@ -1341,15 +1340,6 @@ "title": "{length} {length, plural, one{entity} other{entities}}" } }, - "entity": { - "info": { - "actions": { - "revert": "Revert", - "save": "Save changes" - }, - "heading": "Edit entity" - } - }, "entity-rules-screen": { "error": { "generic": "Something went wrong... Entity rules update failed!" @@ -1363,19 +1353,28 @@ "title": "Entity rule editor", "warnings-found": "{warnings, plural, one{A warning} other{{warnings} warnings}} found in rules" }, + "entity": { + "info": { + "actions": { + "revert": "Revert", + "save": "Save changes" + }, + "heading": "Edit entity" + } + }, "error": { "deleted-entity": { "dossier": { "action": "Zurück zur Übersicht", "label": "Dieses Dossier wurde gelöscht!" }, - "file": { - "action": "Zurück zum Dossier", - "label": "Diese Datei wurde gelöscht!" - }, "file-dossier": { "action": "Zurück zur Übersicht", "label": "Das Dossier dieser Datei wurde gelöscht!" + }, + "file": { + "action": "Zurück zum Dossier", + "label": "Diese Datei wurde gelöscht!" } }, "file-preview": { @@ -1393,12 +1392,6 @@ }, "exact-date": "{day} {month} {year} um {hour}:{minute} Uhr", "file": "Datei", - "file-attribute": { - "update": { - "error": "Failed to update file attribute value!", - "success": "File attribute value has been updated successfully!" - } - }, "file-attribute-encoding-types": { "ascii": "ASCII", "iso": "ISO-8859-1", @@ -1409,6 +1402,12 @@ "number": "Nummer", "text": "Freier Text" }, + "file-attribute": { + "update": { + "error": "Failed to update file attribute value!", + "success": "File attribute value has been updated successfully!" + } + }, "file-attributes-configurations": { "cancel": "Cancel", "form": { @@ -1626,15 +1625,6 @@ "csv": "File attributes were imported successfully from uploaded CSV file." } }, - "filter": { - "analysis": "Analyse erforderlich", - "comment": "Kommentare", - "hint": "Nut Hinweise", - "image": "Bilder", - "none": "Keine Anmerkungen", - "redaction": "Geschwärzt", - "updated": "Aktualisiert" - }, "filter-menu": { "filter-options": "Filteroptionen", "filter-types": "Filter", @@ -1644,6 +1634,15 @@ "unseen-pages": "Nur Anmerkungen auf unsichtbaren Seiten", "with-comments": "Nur Anmerkungen mit Kommentaren" }, + "filter": { + "analysis": "Analyse erforderlich", + "comment": "Kommentare", + "hint": "Nut Hinweise", + "image": "Bilder", + "none": "Keine Anmerkungen", + "redaction": "Geschwärzt", + "updated": "Aktualisiert" + }, "filters": { "assigned-people": "Beauftragt", "documents-status": "Documents state", @@ -1922,13 +1921,6 @@ "user-promoted-to-approver": "{user} wurde im Dossier {dossierHref, select, null{{dossierName}} other{{dossierName}}} zum Genehmiger ernannt!", "user-removed-as-dossier-member": "{user} wurde als Mitglied von: {dossierHref, select, null{{dossierName}} other{{dossierName}}} entfernt!" }, - "notifications": { - "button-text": "Notifications", - "deleted-dossier": "Deleted dossier", - "label": "Benachrichtigungen", - "mark-all-as-read": "Alle als gelesen markieren", - "mark-as": "Mark as {type, select, read{read} unread{unread} other{}}" - }, "notifications-screen": { "category": { "email-notifications": "E-Mail Benachrichtigungen", @@ -1942,6 +1934,7 @@ "dossier": "Dossierbezogene Benachrichtigungen", "other": "Andere Benachrichtigungen" }, + "options-title": "Wählen Sie aus, in welcher Kategorie Sie benachrichtigt werden möchten", "options": { "ASSIGN_APPROVER": "Wenn ich einem Dokument als Genehmiger zugewiesen bin", "ASSIGN_REVIEWER": "Wenn ich einem Dokument als Überprüfer zugewiesen bin", @@ -1959,7 +1952,6 @@ "USER_PROMOTED_TO_APPROVER": "Wenn ich Genehmiger in einem Dossier werde", "USER_REMOVED_AS_DOSSIER_MEMBER": "Wenn ich die Dossier-Mitgliedschaft verliere" }, - "options-title": "Wählen Sie aus, in welcher Kategorie Sie benachrichtigt werden möchten", "schedule": { "daily": "Tägliche Zusammenfassung", "instant": "Sofortig", @@ -1967,6 +1959,13 @@ }, "title": "Benachrichtigungseinstellungen" }, + "notifications": { + "button-text": "Notifications", + "deleted-dossier": "Deleted dossier", + "label": "Benachrichtigungen", + "mark-all-as-read": "Alle als gelesen markieren", + "mark-as": "Mark as {type, select, read{read} unread{unread} other{}}" + }, "ocr": { "confirmation-dialog": { "cancel": "Cancel", @@ -2058,16 +2057,16 @@ "warnings-label": "Prompts and dialogs", "warnings-subtitle": "Do not show again options" }, - "processing": { - "basic": "Processing", - "ocr": "OCR" - }, "processing-status": { "ocr": "OCR", "pending": "Pending", "processed": "Processed", "processing": "Processing" }, + "processing": { + "basic": "Processing", + "ocr": "OCR" + }, "readonly": "Lesemodus", "readonly-archived": "Read only (archived)", "redact-text": { @@ -2082,6 +2081,10 @@ "edit-text": "", "legal-basis": "Legal basis", "options": { + "in-document": { + "description": "", + "label": "" + }, "in-dossier": { "description": "Add redaction in every document in {dossierName}.", "extraOptionLabel": "Apply to all dossiers", @@ -2121,6 +2124,10 @@ "description-bulk": "The selected items should not be annotated in their respective contexts.", "label": "False positive" }, + "in-document": { + "description": "", + "label": "" + }, "in-dossier": { "description": "Do not annotate ''{value}'' as ''{type}'' in any dossier.", "description-bulk": "Do not annotate the selected terms as their respective types in any dossier.", @@ -2161,6 +2168,10 @@ "extraOptionLabel": "Apply to all dossiers", "label": "False positive" }, + "in-document": { + "description": "", + "label": "" + }, "in-dossier": { "description": "Do not {type} \"{value}\" in any document of the current dossier.", "description-bulk": "", @@ -2303,12 +2314,6 @@ "red-user-admin": "Benutzer-Admin", "regular": "Regulär" }, - "search": { - "active-dossiers": "ganze Plattform", - "all-dossiers": "all documents", - "placeholder": "Nach Dokumenten oder Dokumenteninhalt suchen", - "this-dossier": "in diesem Dossier" - }, "search-screen": { "cols": { "assignee": "Bevollmächtigter", @@ -2332,6 +2337,12 @@ "no-match": "Keine Dokumente entsprechen Ihren aktuellen Filtern.", "table-header": "{length} search {length, plural, one{result} other{results}}" }, + "search": { + "active-dossiers": "ganze Plattform", + "all-dossiers": "all documents", + "placeholder": "Nach Dokumenten oder Dokumenteninhalt suchen", + "this-dossier": "in diesem Dossier" + }, "seconds": "seconds", "size": "Size", "smtp-auth-config": { @@ -2587,4 +2598,4 @@ } }, "yesterday": "Gestern" -} \ No newline at end of file +} diff --git a/apps/red-ui/src/assets/i18n/scm/en.json b/apps/red-ui/src/assets/i18n/scm/en.json index 5934e1f48..89fcbd78c 100644 --- a/apps/red-ui/src/assets/i18n/scm/en.json +++ b/apps/red-ui/src/assets/i18n/scm/en.json @@ -242,7 +242,6 @@ "label": "Add hint only here" } }, - "selected-text": "Selected text:", "type": "Type", "type-placeholder": "Select type..." }, @@ -2082,6 +2081,10 @@ "edit-text": "", "legal-basis": "Legal basis", "options": { + "in-document": { + "description": "Add redaction for each occurrence of the term in this document.", + "label": "Redact in document" + }, "in-dossier": { "description": "Add redaction in every document in {dossierName}.", "extraOptionLabel": "Apply to all dossiers", @@ -2121,6 +2124,10 @@ "description-bulk": "The selected items should not be annotated in their respective contexts.", "label": "False positive" }, + "in-document": { + "description": "", + "label": "" + }, "in-dossier": { "description": "Do not annotate ''{value}'' as ''{type}'' in any dossier.", "description-bulk": "Do not annotate the selected terms as their respective types in any dossier.", @@ -2161,6 +2168,10 @@ "extraOptionLabel": "Apply to all dossiers", "label": "False positive" }, + "in-document": { + "description": "", + "label": "" + }, "in-dossier": { "description": "Do not {type} \"{value}\" in any document of the current dossier.", "description-bulk": "", @@ -2587,4 +2598,4 @@ } }, "yesterday": "Yesterday" -} \ No newline at end of file +} diff --git a/libs/common-ui b/libs/common-ui index 2faecb44a..c644eaeba 160000 --- a/libs/common-ui +++ b/libs/common-ui @@ -1 +1 @@ -Subproject commit 2faecb44a926f02a6d4186e58751ac615f2bfd47 +Subproject commit c644eaeba2e137607f1ceb42b0ee5ce9a2f68bbe diff --git a/libs/red-domain/src/lib/legal-basis/legal-basis-change.request.ts b/libs/red-domain/src/lib/legal-basis/legal-basis-change.request.ts index e1d95b092..1f27f5418 100644 --- a/libs/red-domain/src/lib/legal-basis/legal-basis-change.request.ts +++ b/libs/red-domain/src/lib/legal-basis/legal-basis-change.request.ts @@ -1,5 +1,8 @@ +import { ForceAnnotationOption } from '../../../../../apps/red-ui/src/app/modules/file-preview/utils/dialog-types'; + export interface ILegalBasisChangeRequest { annotationId?: string; comment?: string; legalBasis?: string; + option?: ForceAnnotationOption; } diff --git a/libs/red-domain/src/lib/redaction-log/remove-redaction.request.ts b/libs/red-domain/src/lib/redaction-log/remove-redaction.request.ts index 40290994a..1967a85cb 100644 --- a/libs/red-domain/src/lib/redaction-log/remove-redaction.request.ts +++ b/libs/red-domain/src/lib/redaction-log/remove-redaction.request.ts @@ -2,4 +2,5 @@ export interface IRemoveRedactionRequest { annotationId?: string; comment?: string; removeFromDictionary?: boolean; + value?: string; }