diff --git a/apps/red-ui/src/app/modules/admin/screens/rules/rules-screen/rules-screen.component.html b/apps/red-ui/src/app/modules/admin/screens/rules/rules-screen/rules-screen.component.html index 993091559..28df7f774 100644 --- a/apps/red-ui/src/app/modules/admin/screens/rules/rules-screen/rules-screen.component.html +++ b/apps/red-ui/src/app/modules/admin/screens/rules/rules-screen/rules-screen.component.html @@ -6,15 +6,21 @@
-
+
- +
- + +
diff --git a/apps/red-ui/src/app/modules/admin/screens/rules/rules-screen/rules-screen.component.scss b/apps/red-ui/src/app/modules/admin/screens/rules/rules-screen/rules-screen.component.scss index 3156386dc..49e950daf 100644 --- a/apps/red-ui/src/app/modules/admin/screens/rules/rules-screen/rules-screen.component.scss +++ b/apps/red-ui/src/app/modules/admin/screens/rules/rules-screen/rules-screen.component.scss @@ -63,6 +63,10 @@ ngx-monaco-editor { .warning { color: var(--iqser-warn); + + &.only-warning { + margin-left: 15px; + } } } diff --git a/apps/red-ui/src/app/modules/admin/screens/rules/rules-screen/rules-screen.component.ts b/apps/red-ui/src/app/modules/admin/screens/rules/rules-screen/rules-screen.component.ts index 7ee016d00..2d5fa0dfb 100644 --- a/apps/red-ui/src/app/modules/admin/screens/rules/rules-screen/rules-screen.component.ts +++ b/apps/red-ui/src/app/modules/admin/screens/rules/rules-screen/rules-screen.component.ts @@ -144,7 +144,7 @@ export class RulesScreenComponent implements OnInit, ComponentCanDeactivate { }), ).then( async (response: UploadResponse) => { - const errors = this.#mapErrors(response); + const errors = this.#mapErrors(response, dryRun); this.#drawErrorMarkers(errors); if (!dryRun) { await this.#initialize(); @@ -154,10 +154,13 @@ export class RulesScreenComponent implements OnInit, ComponentCanDeactivate { error => { let errors: SyntaxError[]; if (error.error?.syntaxErrorMessages) { - errors = this.#mapErrors(error.error); + errors = this.#mapErrors(error.error, dryRun); } else { const syntaxError: SyntaxError = { message: error.error.message, line: 1, column: 0 }; - errors = this.#mapErrors({ blacklistErrorMessages: [], syntaxErrorMessages: [syntaxError], deprecatedWarnings: [] }); + errors = this.#mapErrors( + { blacklistErrorMessages: [], syntaxErrorMessages: [syntaxError], deprecatedWarnings: [] }, + dryRun, + ); } this.#drawErrorMarkers(errors); this._loadingService.stop(); @@ -176,12 +179,12 @@ export class RulesScreenComponent implements OnInit, ComponentCanDeactivate { this._loadingService.stop(); } - #mapErrors(response: UploadResponse) { - return [ - ...response.blacklistErrorMessages, - ...response.syntaxErrorMessages, - ...response.deprecatedWarnings.map(w => ({ ...w, warning: true })), - ]; + #mapErrors(response: UploadResponse, dryRun = false) { + const warnings = response.deprecatedWarnings.map(w => ({ ...w, warning: true })); + if (dryRun) { + return warnings; + } + return [...response.blacklistErrorMessages, ...response.syntaxErrorMessages, ...warnings]; } #getValue(): string { @@ -238,6 +241,7 @@ export class RulesScreenComponent implements OnInit, ComponentCanDeactivate { #drawErrorMarkers(errors: SyntaxError[] | undefined) { const model = this.#codeEditor?.getModel(); if (!model || !errors?.length) { + this.#removeErrorMarkers(); return; } const markers = []; diff --git a/apps/red-ui/src/app/modules/file-preview/components/selected-annotations-table/selected-annotations-table.component.html b/apps/red-ui/src/app/modules/file-preview/components/selected-annotations-table/selected-annotations-table.component.html index 567b04b25..f8bbf10d5 100644 --- a/apps/red-ui/src/app/modules/file-preview/components/selected-annotations-table/selected-annotations-table.component.html +++ b/apps/red-ui/src/app/modules/file-preview/components/selected-annotations-table/selected-annotations-table.component.html @@ -1,14 +1,14 @@ - - diff --git a/apps/red-ui/src/app/modules/file-preview/components/selected-annotations-table/selected-annotations-table.component.scss b/apps/red-ui/src/app/modules/file-preview/components/selected-annotations-table/selected-annotations-table.component.scss index c4a571d6e..6812c9358 100644 --- a/apps/red-ui/src/app/modules/file-preview/components/selected-annotations-table/selected-annotations-table.component.scss +++ b/apps/red-ui/src/app/modules/file-preview/components/selected-annotations-table/selected-annotations-table.component.scss @@ -27,8 +27,10 @@ table { th, td { + &:not(.w-50) { + width: 25%; + } max-width: 0; - width: 25%; text-align: start; white-space: nowrap; @@ -58,6 +60,15 @@ tbody tr:nth-child(odd) { visibility: hidden; } +.w-50 { + max-width: 0; + min-width: 50%; + + &.hide { + display: none; + } +} + .bold { font-weight: bold; } diff --git a/apps/red-ui/src/app/modules/file-preview/components/selected-annotations-table/selected-annotations-table.component.ts b/apps/red-ui/src/app/modules/file-preview/components/selected-annotations-table/selected-annotations-table.component.ts index db71779c7..3601d4b77 100644 --- a/apps/red-ui/src/app/modules/file-preview/components/selected-annotations-table/selected-annotations-table.component.ts +++ b/apps/red-ui/src/app/modules/file-preview/components/selected-annotations-table/selected-annotations-table.component.ts @@ -20,6 +20,7 @@ const MAX_ITEMS_DISPLAY = 10; export class SelectedAnnotationsTableComponent { @Input({ required: true }) columns: ValueColumn[]; @Input({ required: true }) data: ValueColumn[][]; + @Input() staticColumns = false; get redactedTextsAreaHeight() { return this.data.length <= MAX_ITEMS_DISPLAY ? TABLE_ROW_SIZE * this.data.length : TABLE_ROW_SIZE * MAX_ITEMS_DISPLAY; 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 1b2dc1399..b73fa0ade 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 @@ -8,7 +8,11 @@
- +
diff --git a/apps/red-ui/src/app/modules/file-preview/dialogs/edit-redaction-dialog/edit-redaction-dialog.component.scss b/apps/red-ui/src/app/modules/file-preview/dialogs/edit-redaction-dialog/edit-redaction-dialog.component.scss index f78a044f5..112313d42 100644 --- a/apps/red-ui/src/app/modules/file-preview/dialogs/edit-redaction-dialog/edit-redaction-dialog.component.scss +++ b/apps/red-ui/src/app/modules/file-preview/dialogs/edit-redaction-dialog/edit-redaction-dialog.component.scss @@ -1,6 +1,6 @@ -@use 'common-mixins'; - .dialog-content { + padding-top: 8px; + &.fixed-height { height: 386px; overflow-y: auto; diff --git a/apps/red-ui/src/app/modules/file-preview/dialogs/edit-redaction-dialog/edit-redaction-dialog.component.ts b/apps/red-ui/src/app/modules/file-preview/dialogs/edit-redaction-dialog/edit-redaction-dialog.component.ts index cd17a5d7c..ef7b870ef 100644 --- a/apps/red-ui/src/app/modules/file-preview/dialogs/edit-redaction-dialog/edit-redaction-dialog.component.ts +++ b/apps/red-ui/src/app/modules/file-preview/dialogs/edit-redaction-dialog/edit-redaction-dialog.component.ts @@ -11,6 +11,7 @@ import { EditRedactionData, EditRedactResult } from '../../utils/dialog-types'; import { LegalBasisOption } from '../manual-redaction-dialog/manual-annotation-dialog.component'; import { Roles } from '@users/roles'; import { DialogHelpModeKeys } from '../../utils/constants'; +import { ValueColumn } from '../../components/selected-annotations-table/selected-annotations-table.component'; interface TypeSelectOptions { type: string; @@ -38,6 +39,20 @@ export class EditRedactionDialogComponent readonly isRedacted = this.annotations.every(annotation => annotation.isRedacted); readonly isImported: boolean = this.annotations.every(annotation => annotation.imported); readonly allRectangles = this.annotations.reduce((acc, a) => acc && a.AREA, true); + readonly tableColumns = [ + { + label: 'Value', + show: true, + }, + { + label: 'Type', + show: true, + }, + ]; + readonly tableData: ValueColumn[][] = this.data.annotations.map(redaction => [ + { label: redaction.value, show: true, bold: true }, + { label: redaction.typeLabel, show: true }, + ]); protected readonly roles = Roles; options: DetailsRadioOption[] | undefined; @@ -112,6 +127,10 @@ export class EditRedactionDialogComponent return DialogHelpModeKeys.REDACTION_EDIT; } + get sameType() { + return this.annotations.every(annotation => annotation.type === this.annotations[0].type); + } + async ngOnInit() { this.#setTypes(); const data = await firstValueFrom(this._justificationsService.loadAll(this.#dossier.dossierTemplateId)); @@ -163,10 +182,11 @@ export class EditRedactionDialogComponent #setTypes() { this.dictionaries = this._dictionaryService.getEditableRedactionTypes( - this.#dossier.dossierTemplateId, + this.#dossier.dossierId, this.isImage, this.isHint, this.annotations.every(annotation => annotation.isOCR), + this.sameType ? this.annotations[0].type : null, ); this.typeSelectOptions = this.dictionaries.map(dictionary => ({ @@ -198,13 +218,12 @@ export class EditRedactionDialogComponent } #getForm() { - const sameType = this.annotations.every(annotation => annotation.type === this.annotations[0].type); const sameSection = this.annotations.every(annotation => annotation.section === this.annotations[0].section); return new FormGroup({ reason: new FormControl({ value: null, disabled: this.someSkipped }), comment: new FormControl(null), type: new FormControl({ - value: sameType ? this.annotations[0].type : null, + value: this.sameType ? this.annotations[0].type : null, disabled: this.isImported, }), section: new FormControl({ value: sameSection ? this.annotations[0].section : null, disabled: this.isImported }), 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 8234cbb1c..1b45af6e6 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 @@ -4,7 +4,11 @@
- +
diff --git a/apps/red-ui/src/app/modules/file-preview/dialogs/redact-recommendation-dialog/redact-recommendation-dialog.component.html b/apps/red-ui/src/app/modules/file-preview/dialogs/redact-recommendation-dialog/redact-recommendation-dialog.component.html index 3b505bc23..7acc288cc 100644 --- a/apps/red-ui/src/app/modules/file-preview/dialogs/redact-recommendation-dialog/redact-recommendation-dialog.component.html +++ b/apps/red-ui/src/app/modules/file-preview/dialogs/redact-recommendation-dialog/redact-recommendation-dialog.component.html @@ -4,7 +4,11 @@
- +
- + {{ displayedDictionaryLabel }}
- +
diff --git a/apps/red-ui/src/app/modules/file-preview/dialogs/redact-recommendation-dialog/redact-recommendation-dialog.component.scss b/apps/red-ui/src/app/modules/file-preview/dialogs/redact-recommendation-dialog/redact-recommendation-dialog.component.scss new file mode 100644 index 000000000..b3cdff4d1 --- /dev/null +++ b/apps/red-ui/src/app/modules/file-preview/dialogs/redact-recommendation-dialog/redact-recommendation-dialog.component.scss @@ -0,0 +1,3 @@ +.redaction { + padding-top: 8px; +} 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 5eb8e2070..fddd4302f 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 @@ -12,9 +12,11 @@ import { tap } from 'rxjs/operators'; import { getRedactOrHintOptions, RedactOrHintOption, RedactOrHintOptions } from '../../utils/dialog-options'; import { RedactRecommendationData, RedactRecommendationResult } from '../../utils/dialog-types'; import { LegalBasisOption } from '../manual-redaction-dialog/manual-annotation-dialog.component'; +import { ValueColumn } from '../../components/selected-annotations-table/selected-annotations-table.component'; @Component({ templateUrl: './redact-recommendation-dialog.component.html', + styleUrl: './redact-recommendation-dialog.component.scss', }) export class RedactRecommendationDialogComponent extends IqserDialogComponent @@ -30,7 +32,6 @@ export class RedactRecommendationDialogComponent dictionaryRequest = false; legalOptions: LegalBasisOption[] = []; dictionaries: Dictionary[] = []; - readonly selectedValues = this.data.annotations.map(annotation => annotation.value); readonly form = inject(FormBuilder).group({ selectedText: this.isMulti ? null : this.firstEntry.value, comment: [null], @@ -39,6 +40,21 @@ export class RedactRecommendationDialogComponent reason: [null], }); + readonly tableColumns = [ + { + label: 'Value', + show: true, + }, + { + label: 'Type', + show: true, + }, + ]; + readonly tableData: ValueColumn[][] = this.data.annotations.map(redaction => [ + { label: redaction.value, show: true, bold: true }, + { label: redaction.typeLabel, show: true }, + ]); + constructor( private readonly _justificationsService: JustificationsService, private readonly _dictionaryService: DictionaryService, @@ -69,7 +85,7 @@ export class RedactRecommendationDialogComponent } get disabled() { - return this.dictionaryRequest && !this.form.controls.dictionary.value; + return !this.form.controls.dictionary.value; } async ngOnInit(): Promise { @@ -144,9 +160,10 @@ export class RedactRecommendationDialogComponent } #resetValues() { + const sameType = this.data.annotations.every(annotation => annotation.type === this.firstEntry.type); this.#applyToAllDossiers = this.data.applyToAllDossiers ?? true; if (this.dictionaryRequest) { - this.form.controls.dictionary.setValue(this.firstEntry.type); + this.form.controls.dictionary.setValue(sameType ? this.firstEntry.type : null); return; } this.form.controls.dictionary.setValue(this.#manualRedactionTypeExists ? SuperTypes.ManualRedaction : null); diff --git a/apps/red-ui/src/app/modules/file-preview/dialogs/redact-text-dialog/redact-text-dialog.component.html b/apps/red-ui/src/app/modules/file-preview/dialogs/redact-text-dialog/redact-text-dialog.component.html index 4454477ce..25161a316 100644 --- a/apps/red-ui/src/app/modules/file-preview/dialogs/redact-text-dialog/redact-text-dialog.component.html +++ b/apps/red-ui/src/app/modules/file-preview/dialogs/redact-text-dialog/redact-text-dialog.component.html @@ -3,48 +3,56 @@
-
+
-
    -
  • - -
  • -
+
+ +
+ + - + - - - + +
+
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 d4c112676..0b6f2896a 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 @@ -13,29 +13,14 @@ } } -.edit-button { - top: 0; - right: calc((0.5rem + 34px) * -1); - position: sticky; -} - -.undo-button { - top: 0; - right: calc((0.5rem + 34px) * -2); +iqser-circle-button { + padding-left: 8px; } .w-full { width: 100%; } -.absolute { - position: absolute; -} - -.relative { - position: relative; -} - .fixed-height-36 { min-height: 36px; } @@ -43,3 +28,30 @@ textarea { margin-top: 0; } + +.table { + display: flex; + flex-direction: column; + min-width: calc(100% - 26px); + padding: 0 13px; + + label { + opacity: 0.7; + font-weight: normal; + } + + .row { + display: inline-flex; + flex-direction: row; + align-items: center; + background-color: var(--iqser-alt-background); + min-width: 100%; + + span { + white-space: nowrap; + text-overflow: ellipsis; + list-style-position: inside; + overflow: hidden; + } + } +} 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 12a5b4259..a55a7fb2b 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 @@ -14,7 +14,7 @@ import { getRedactOrHintOptions, RedactOrHintOption, RedactOrHintOptions } from import { RedactTextData, RedactTextResult } from '../../utils/dialog-types'; import { LegalBasisOption } from '../manual-redaction-dialog/manual-annotation-dialog.component'; -const MAXIMUM_SELECTED_TEXT_WIDTH = 421; +const MAXIMUM_TEXT_AREA_WIDTH = 421; @Component({ templateUrl: './redact-text-dialog.component.html', @@ -39,6 +39,10 @@ export class RedactTextDialogComponent readonly #dossier = inject(ActiveDossiersService).find(this.data.dossierId); readonly #manualRedactionTypeExists = inject(DictionaryService).hasManualType(this.#dossier.dossierTemplateId); #applyToAllDossiers = this.data.applyToAllDossiers ?? true; + readonly maximumTextAreaWidth = MAXIMUM_TEXT_AREA_WIDTH; + readonly maximumSelectedTextWidth = 567; + + textWidth: number; get defaultOption() { const inDossierOption = this.options.find(option => option.value === RedactOrHintOptions.IN_DOSSIER); @@ -60,7 +64,7 @@ export class RedactTextDialogComponent this.options = getRedactOrHintOptions(this.#dossier, this.#applyToAllDossiers, this.data.isApprover, this.data.isPageExcluded); this.form = this.#getForm(); this.#setupValidators(this.dictionaryRequest ? RedactOrHintOptions.IN_DOSSIER : RedactOrHintOptions.ONLY_HERE); - + this.textWidth = calcTextWidthInPixels(this.form.controls.selectedText.value); this.form.controls.option.valueChanges .pipe( tap((option: DetailsRadioOption) => { @@ -136,7 +140,7 @@ export class RedactTextDialogComponent this.isEditingSelectedText = !this.isEditingSelectedText; if (this.isEditingSelectedText) { const width = calcTextWidthInPixels(this.form.controls.selectedText.value); - this.selectedTextRows = Math.ceil(width / MAXIMUM_SELECTED_TEXT_WIDTH); + this.selectedTextRows = Math.ceil(width / MAXIMUM_TEXT_AREA_WIDTH); } } @@ -213,4 +217,6 @@ export class RedactTextDialogComponent } this.form.controls.dictionary.setValue(this.#manualRedactionTypeExists ? SuperTypes.ManualRedaction : null); } + + protected readonly window = window; } diff --git a/apps/red-ui/src/app/modules/file-preview/dialogs/remove-redaction-dialog/remove-redaction-dialog.component.html b/apps/red-ui/src/app/modules/file-preview/dialogs/remove-redaction-dialog/remove-redaction-dialog.component.html index 63287b276..1acb8a0e6 100644 --- a/apps/red-ui/src/app/modules/file-preview/dialogs/remove-redaction-dialog/remove-redaction-dialog.component.html +++ b/apps/red-ui/src/app/modules/file-preview/dialogs/remove-redaction-dialog/remove-redaction-dialog.component.html @@ -10,6 +10,7 @@
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 ed69238b7..42094db60 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 @@ -73,6 +73,10 @@ export class RemoveRedactionDialogComponent extends IqserDialogComponent< return DialogHelpModeKeys.REDACTION_REMOVE; } + get hasFalsePositiveOption() { + return !!this.options.find(option => option.value === RemoveRedactionOptions.FALSE_POSITIVE); + } + get defaultOption() { const removeHereOption = this.options.find(option => option.value === RemoveRedactionOptions.ONLY_HERE); if (!!removeHereOption && !removeHereOption.disabled) return removeHereOption; 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 a86a57ef7..dd90f6be4 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 @@ -56,7 +56,7 @@ export class ManualRedactionService extends GenericService { value: annotation.value, reason: annotation.legalBasis ?? 'Dictionary Request', positions: annotation.positions, - type: redaction.type, + type: redaction.type ?? annotation.type, comment: redaction.comment, })); return this.addAnnotation(recommendations, dossierId, fileId); diff --git a/apps/red-ui/src/app/services/entity-services/dictionary.service.ts b/apps/red-ui/src/app/services/entity-services/dictionary.service.ts index 1aac767c8..f664bc8a9 100644 --- a/apps/red-ui/src/app/services/entity-services/dictionary.service.ts +++ b/apps/red-ui/src/app/services/entity-services/dictionary.service.ts @@ -162,15 +162,24 @@ export class DictionaryService extends EntitiesService .sort((a, b) => a.label.localeCompare(b.label)); } - getEditableRedactionTypes(dossierTemplateId: string, isImage: boolean, isHint: boolean, isOCR: boolean): Dictionary[] { - return this._dictionariesMapService - .get(dossierTemplateId) + getEditableRedactionTypes( + dossierId: string, + isImage: boolean, + isHint: boolean, + isOCR: boolean, + currentlySelectedType: string, + ): Dictionary[] { + return this.#extractDossierLevelTypes(dossierId) .filter( d => d.model['typeId'] && (isImage ? (isOCR ? [...IMAGE_CATEGORIES, 'ocr'] : IMAGE_CATEGORIES).includes(d.type) - : (isHint ? d.hint : !d.hint) && !d.virtual && !d.systemManaged && ![...IMAGE_CATEGORIES, 'ocr'].includes(d.type)), + : (isHint ? d.hint : !d.hint) && + (d.addToDictionaryAction || currentlySelectedType === d.type) && + !d.virtual && + !d.systemManaged && + ![...IMAGE_CATEGORIES, 'ocr'].includes(d.type)), ) .sort((a, b) => a.label.localeCompare(b.label)); } diff --git a/apps/red-ui/src/app/services/entity-services/trash.service.ts b/apps/red-ui/src/app/services/entity-services/trash.service.ts index 2b8365f93..04444e600 100644 --- a/apps/red-ui/src/app/services/entity-services/trash.service.ts +++ b/apps/red-ui/src/app/services/entity-services/trash.service.ts @@ -115,10 +115,7 @@ export class TrashService extends EntitiesService { } private _hardDeleteFiles(dossierId: string, fileIds: List) { - const queryParams = fileIds.map(id => ({ key: 'fileIds', value: id })); - return super - .delete({}, `delete/hard-delete/${dossierId}`, queryParams) - .pipe(switchMap(() => this._dossierStatsService.getFor([dossierId]))); + return super._post(fileIds, `delete/hard-delete/${dossierId}`).pipe(switchMap(() => this._dossierStatsService.getFor([dossierId]))); } private _restoreFiles(dossierId: string, fileIds: List) { diff --git a/apps/red-ui/src/app/services/files/file-management.service.ts b/apps/red-ui/src/app/services/files/file-management.service.ts index 22f4a7a15..3d018fad7 100644 --- a/apps/red-ui/src/app/services/files/file-management.service.ts +++ b/apps/red-ui/src/app/services/files/file-management.service.ts @@ -16,7 +16,7 @@ export class FileManagementService extends GenericService { delete(files: List, dossierId: string) { const fileIds = files.map(f => f.id); - return super._post(fileIds, `delete/hard-delete/${dossierId}`).pipe(switchMap(() => this.#filesService.loadAll(dossierId))); + return super._post(fileIds, `delete/${dossierId}`).pipe(switchMap(() => this.#filesService.loadAll(dossierId))); } rotatePage(body: IPageRotationRequest, dossierId: string, fileId: string) { diff --git a/apps/red-ui/src/assets/i18n/redact/de.json b/apps/red-ui/src/assets/i18n/redact/de.json index 1fb343cab..09d830a41 100644 --- a/apps/red-ui/src/assets/i18n/redact/de.json +++ b/apps/red-ui/src/assets/i18n/redact/de.json @@ -367,7 +367,6 @@ "annotation": { "pending": "(Pending analysis)" }, - "annotations": "", "archived-dossiers-listing": { "no-data": { "title": "No archived dossiers." @@ -1998,7 +1997,8 @@ "reason-placeholder": "Select a reason...", "revert-text": "Revert to selected text", "type": "Type", - "type-placeholder": "Select type..." + "type-placeholder": "Select type...", + "unchanged": "" }, "title": "Redact text" } diff --git a/apps/red-ui/src/assets/i18n/redact/en.json b/apps/red-ui/src/assets/i18n/redact/en.json index 843c23c5e..35fcded6d 100644 --- a/apps/red-ui/src/assets/i18n/redact/en.json +++ b/apps/red-ui/src/assets/i18n/redact/en.json @@ -1998,7 +1998,8 @@ "reason-placeholder": "Select a reason...", "revert-text": "Revert to selected text", "type": "Type", - "type-placeholder": "Select type..." + "type-placeholder": "Select type...", + "unchanged": "Unchanged" }, "title": "Redact text" } diff --git a/apps/red-ui/src/assets/i18n/scm/de.json b/apps/red-ui/src/assets/i18n/scm/de.json index a878cb162..f00a14406 100644 --- a/apps/red-ui/src/assets/i18n/scm/de.json +++ b/apps/red-ui/src/assets/i18n/scm/de.json @@ -367,7 +367,6 @@ "annotation": { "pending": "(Pending analysis)" }, - "annotations": "", "archived-dossiers-listing": { "no-data": { "title": "No archived dossiers." @@ -1998,7 +1997,8 @@ "reason-placeholder": "Select a reasons...", "revert-text": "", "type": "Type", - "type-placeholder": "Select type..." + "type-placeholder": "Select type...", + "unchanged": "" }, "title": "Redact text" } diff --git a/apps/red-ui/src/assets/i18n/scm/en.json b/apps/red-ui/src/assets/i18n/scm/en.json index 7eeb2efc4..1b110b692 100644 --- a/apps/red-ui/src/assets/i18n/scm/en.json +++ b/apps/red-ui/src/assets/i18n/scm/en.json @@ -1998,7 +1998,8 @@ "reason-placeholder": "Select a reasons...", "revert-text": "", "type": "Type", - "type-placeholder": "Select type..." + "type-placeholder": "Select type...", + "unchanged": "" }, "title": "Redact text" }
+
+ {{ cell.label }}