RED-5385 - Keep hidden text option in Edit Dossier dialog
This commit is contained in:
parent
d0bbc1f994
commit
5a1bf8a3be
@ -6,7 +6,7 @@ import { CircleButtonTypes, IconButtonTypes, LoadingService, Toaster } from '@iq
|
||||
import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms';
|
||||
import { DossierAttributesService } from '@services/entity-services/dossier-attributes.service';
|
||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
import { firstValueFrom, forkJoin } from 'rxjs';
|
||||
import { firstValueFrom } from 'rxjs';
|
||||
import dayjs from 'dayjs';
|
||||
|
||||
@Component({
|
||||
|
||||
@ -17,24 +17,37 @@
|
||||
></redaction-select>
|
||||
</div>
|
||||
|
||||
<p class="heading">{{ 'dossier-watermark-selector.heading' | translate }}</p>
|
||||
<ng-container *ngIf="ctx.existsWatermarks; else noWatermarks">
|
||||
<redaction-watermark-selector
|
||||
[dossierTemplateId]="dossier.dossierTemplateId"
|
||||
[isReadonly]="!canEditDossier"
|
||||
[label]="'dossier-watermark-selector.watermark' | translate"
|
||||
formControlName="watermarkId"
|
||||
>
|
||||
</redaction-watermark-selector>
|
||||
<div>
|
||||
<div>
|
||||
<p class="heading">{{ 'dossier-watermark-selector.heading' | translate }}</p>
|
||||
<ng-container *ngIf="ctx.existsWatermarks; else noWatermarks">
|
||||
<redaction-watermark-selector
|
||||
[dossierTemplateId]="dossier.dossierTemplateId"
|
||||
[isReadonly]="!canEditDossier"
|
||||
[label]="'dossier-watermark-selector.watermark' | translate"
|
||||
formControlName="watermarkId"
|
||||
>
|
||||
</redaction-watermark-selector>
|
||||
|
||||
<redaction-watermark-selector
|
||||
[dossierTemplateId]="dossier.dossierTemplateId"
|
||||
[isReadonly]="!canEditDossier"
|
||||
[label]="'dossier-watermark-selector.preview' | translate"
|
||||
formControlName="previewWatermarkId"
|
||||
>
|
||||
</redaction-watermark-selector>
|
||||
</ng-container>
|
||||
<redaction-watermark-selector
|
||||
[dossierTemplateId]="dossier.dossierTemplateId"
|
||||
[isReadonly]="!canEditDossier"
|
||||
[label]="'dossier-watermark-selector.preview' | translate"
|
||||
formControlName="previewWatermarkId"
|
||||
>
|
||||
</redaction-watermark-selector>
|
||||
</ng-container>
|
||||
</div>
|
||||
<div>
|
||||
<p class="heading">{{ 'documents-hidden-text-option.heading' | translate }}</p>
|
||||
<div class="iqser-input-group">
|
||||
<mat-checkbox color="primary" formControlName="keepHiddenText">
|
||||
{{ 'documents-hidden-text-option.title' | translate }}
|
||||
</mat-checkbox>
|
||||
<div class="info mt-4">{{ 'documents-hidden-text-option.description' | translate }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<ng-template #noWatermarks>
|
||||
<p class="no-watermark" [innerHTML]="'dossier-watermark-selector.no-watermark' | translate"></p>
|
||||
|
||||
@ -9,6 +9,14 @@ form {
|
||||
|
||||
> div {
|
||||
display: flex;
|
||||
|
||||
> div {
|
||||
width: 50%;
|
||||
}
|
||||
|
||||
> div:first-child {
|
||||
margin-right: 16px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -20,3 +28,7 @@ form {
|
||||
.no-watermark {
|
||||
color: var(--iqser-grey-7);
|
||||
}
|
||||
|
||||
.info {
|
||||
margin-left: 24px;
|
||||
}
|
||||
|
||||
@ -1,20 +1,24 @@
|
||||
import { Component, Input, OnInit } from '@angular/core';
|
||||
import { Dossier, DownloadFileType, IReportTemplate } from '@red/domain';
|
||||
import { Dossier, DossierTemplate, DownloadFileType, IDossierTemplate, IReportTemplate } from '@red/domain';
|
||||
import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms';
|
||||
import { EditDossierSaveResult, EditDossierSectionInterface } from '../edit-dossier-section.interface';
|
||||
import { downloadTypesTranslations } from '@translations/download-types-translations';
|
||||
import { ReportTemplateService } from '@services/report-template.service';
|
||||
import { PermissionsService } from '@services/permissions.service';
|
||||
import { firstValueFrom, Observable } from 'rxjs';
|
||||
import { firstValueFrom, forkJoin, Observable } from 'rxjs';
|
||||
import { DossiersService } from '@services/dossiers/dossiers.service';
|
||||
import { WatermarksMapService } from '@services/entity-services/watermarks-map.service';
|
||||
import { ContextComponent, shareLast } from '@iqser/common-ui';
|
||||
import { tap } from 'rxjs/operators';
|
||||
import { DossierTemplatesService } from '@services/dossier-templates/dossier-templates.service';
|
||||
|
||||
interface EditDossierDownloadPackageContext {
|
||||
existsWatermarks: boolean;
|
||||
dossierTemplate: IDossierTemplate;
|
||||
}
|
||||
|
||||
const KEEP_HIDDEN_TEXT_KEY = 'keepHiddenText';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-edit-dossier-download-package',
|
||||
templateUrl: './edit-dossier-download-package.component.html',
|
||||
@ -35,11 +39,14 @@ export class EditDossierDownloadPackageComponent
|
||||
|
||||
#existsWatermarks$: Observable<boolean>;
|
||||
|
||||
#dossierTemplate: DossierTemplate;
|
||||
|
||||
@Input() dossier: Dossier;
|
||||
|
||||
constructor(
|
||||
private readonly _dossiersService: DossiersService,
|
||||
private readonly _reportTemplateController: ReportTemplateService,
|
||||
private readonly _dossierTemplatesService: DossierTemplatesService,
|
||||
private readonly _formBuilder: UntypedFormBuilder,
|
||||
private readonly _permissionsService: PermissionsService,
|
||||
private readonly _watermarksMapService: WatermarksMapService,
|
||||
@ -61,21 +68,27 @@ export class EditDossierDownloadPackageComponent
|
||||
}
|
||||
|
||||
for (const key of Object.keys(this.form.getRawValue())) {
|
||||
if (key.toLowerCase().includes('watermark')) {
|
||||
if (this.dossier[key] !== this.form.get(key).value) {
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
if (this.dossier[key].length !== this.form.get(key).value.length) {
|
||||
return true;
|
||||
}
|
||||
const originalItems = [...this.dossier[key]].sort();
|
||||
const newItems = [...this.form.get(key).value].sort();
|
||||
|
||||
for (let idx = 0; idx < originalItems.length; ++idx) {
|
||||
if (originalItems[idx] !== newItems[idx]) {
|
||||
if (key !== KEEP_HIDDEN_TEXT_KEY) {
|
||||
if (key.toLowerCase().includes('watermark')) {
|
||||
if (this.dossier[key] !== this.form.get(key).value) {
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
if (this.dossier[key].length !== this.form.get(key).value.length) {
|
||||
return true;
|
||||
}
|
||||
const originalItems = [...this.dossier[key]].sort();
|
||||
const newItems = [...this.form.get(key).value].sort();
|
||||
|
||||
for (let idx = 0; idx < originalItems.length; ++idx) {
|
||||
if (originalItems[idx] !== newItems[idx]) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (this.#dossierTemplate.keepHiddenText !== this.form.get(KEEP_HIDDEN_TEXT_KEY).value) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -100,10 +113,16 @@ export class EditDossierDownloadPackageComponent
|
||||
async ngOnInit() {
|
||||
const dossierTemplateId = this.dossier.dossierTemplateId;
|
||||
|
||||
this.#dossierTemplate = this._dossierTemplatesService.find(dossierTemplateId);
|
||||
const dossierTemplate$ = this._dossierTemplatesService
|
||||
.getEntityChanged$(dossierTemplateId)
|
||||
.pipe(tap(dossierTemplate => (this.#dossierTemplate = dossierTemplate)));
|
||||
|
||||
this.#existsWatermarks$ = this._watermarksMapService.watchChanged$(dossierTemplateId).pipe(shareLast());
|
||||
|
||||
super._initContext({
|
||||
existsWatermarks: this.#existsWatermarks$,
|
||||
dossierTemplate: dossierTemplate$,
|
||||
});
|
||||
|
||||
this.availableReportTypes = (await this._reportTemplateController.getAvailableReportTemplates(dossierTemplateId)) || [];
|
||||
@ -123,8 +142,14 @@ export class EditDossierDownloadPackageComponent
|
||||
previewWatermarkId: this.form.get('previewWatermarkId').value,
|
||||
};
|
||||
|
||||
const updatedDossier = await firstValueFrom(this._dossiersService.createOrUpdate(dossier));
|
||||
return { success: !!updatedDossier };
|
||||
const dossierTemplate = {
|
||||
...this.#dossierTemplate,
|
||||
keepHiddenText: this.form.get('keepHiddenText').value,
|
||||
};
|
||||
|
||||
const updateDossier = await firstValueFrom(this._dossiersService.createOrUpdate(dossier));
|
||||
const updateDossierTemplate = await this._dossierTemplatesService.createOrUpdate(dossierTemplate);
|
||||
return { success: !!updateDossier && !!updateDossierTemplate };
|
||||
}
|
||||
|
||||
revert() {
|
||||
@ -133,6 +158,7 @@ export class EditDossierDownloadPackageComponent
|
||||
reportTemplateIds: this.dossier.reportTemplateIds,
|
||||
watermarkId: this.dossier.watermarkId,
|
||||
previewWatermarkId: this.dossier.previewWatermarkId,
|
||||
keepHiddenText: [this.#dossierTemplate.keepHiddenText],
|
||||
});
|
||||
}
|
||||
|
||||
@ -143,6 +169,7 @@ export class EditDossierDownloadPackageComponent
|
||||
downloadFileTypes: [this.dossier.downloadFileTypes],
|
||||
watermarkId: [this.dossier.watermarkId],
|
||||
previewWatermarkId: [this.dossier.previewWatermarkId],
|
||||
keepHiddenText: [this.#dossierTemplate.keepHiddenText],
|
||||
},
|
||||
{
|
||||
validators: control =>
|
||||
|
||||
@ -741,6 +741,11 @@
|
||||
"save": "Dokumenteninformation speichern",
|
||||
"title": "Datei-Attribute anlegen"
|
||||
},
|
||||
"documents-hidden-text-option": {
|
||||
"description": "",
|
||||
"heading": "",
|
||||
"title": ""
|
||||
},
|
||||
"dossier-attribute-types": {
|
||||
"date": "Datum",
|
||||
"image": "Bild",
|
||||
@ -1217,6 +1222,17 @@
|
||||
"title": "Hoppla! Etwas ist schief gelaufen..."
|
||||
},
|
||||
"exact-date": "{day} {month} {year} um {hour}:{minute} Uhr",
|
||||
"false-positive-dialog": {
|
||||
"actions": {
|
||||
"cancel": "",
|
||||
"save": ""
|
||||
},
|
||||
"content": {
|
||||
"body-text": "",
|
||||
"comment": ""
|
||||
},
|
||||
"header": ""
|
||||
},
|
||||
"file": "Datei",
|
||||
"file-attribute-encoding-types": {
|
||||
"ascii": "",
|
||||
@ -1994,17 +2010,6 @@
|
||||
"annotations": "",
|
||||
"title": ""
|
||||
},
|
||||
"false-positive-dialog": {
|
||||
"actions": {
|
||||
"cancel": "",
|
||||
"save": ""
|
||||
},
|
||||
"content": {
|
||||
"comment": "",
|
||||
"body-text": ""
|
||||
},
|
||||
"header": ""
|
||||
},
|
||||
"rules-screen": {
|
||||
"error": {
|
||||
"generic": "Es ist ein Fehler aufgetreten ... Die Regeln konnten nicht aktualisiert werden!"
|
||||
|
||||
@ -741,6 +741,11 @@
|
||||
"save": "Save Document Info",
|
||||
"title": "Enter File Attributes"
|
||||
},
|
||||
"documents-hidden-text-option": {
|
||||
"description": "Hidden text is invisible to human readers but can be detected and read by software and machines. For example, the OCR output of scanned documents is stored as hidden text.",
|
||||
"heading": "Hidden text on documents",
|
||||
"title": "Keep hidden text in redacted documents"
|
||||
},
|
||||
"dossier-attribute-types": {
|
||||
"date": "Date",
|
||||
"image": "Image",
|
||||
@ -1217,6 +1222,17 @@
|
||||
"title": "Oops! Something went wrong..."
|
||||
},
|
||||
"exact-date": "{day} {month} {year} at {hour}:{minute}",
|
||||
"false-positive-dialog": {
|
||||
"actions": {
|
||||
"cancel": "Cancel",
|
||||
"save": "Yes, proceed"
|
||||
},
|
||||
"content": {
|
||||
"body-text": "''{value}'' is a false positive in this context: {context}",
|
||||
"comment": "Comment"
|
||||
},
|
||||
"header": "False Positive"
|
||||
},
|
||||
"file": "File",
|
||||
"file-attribute-encoding-types": {
|
||||
"ascii": "ASCII",
|
||||
@ -1994,17 +2010,6 @@
|
||||
"annotations": "",
|
||||
"title": "Structured Component Management"
|
||||
},
|
||||
"false-positive-dialog": {
|
||||
"actions": {
|
||||
"cancel": "Cancel",
|
||||
"save": "Yes, proceed"
|
||||
},
|
||||
"content": {
|
||||
"comment": "Comment",
|
||||
"body-text": "''{value}'' is a false positive in this context: {context}"
|
||||
},
|
||||
"header": "False Positive"
|
||||
},
|
||||
"rules-screen": {
|
||||
"error": {
|
||||
"generic": "Something went wrong... Rules update failed!"
|
||||
|
||||
@ -741,6 +741,11 @@
|
||||
"save": "Dokumenteninformation speichern",
|
||||
"title": "Datei-Attribute anlegen"
|
||||
},
|
||||
"documents-hidden-text-option": {
|
||||
"description": "",
|
||||
"heading": "",
|
||||
"title": ""
|
||||
},
|
||||
"dossier-attribute-types": {
|
||||
"date": "Datum",
|
||||
"image": "Bild",
|
||||
@ -1217,6 +1222,17 @@
|
||||
"title": "Hoppla! Etwas ist schief gelaufen..."
|
||||
},
|
||||
"exact-date": "{day} {month} {year} um {hour}:{minute} Uhr",
|
||||
"false-positive-dialog": {
|
||||
"actions": {
|
||||
"cancel": "",
|
||||
"save": ""
|
||||
},
|
||||
"content": {
|
||||
"body-text": "",
|
||||
"comment": ""
|
||||
},
|
||||
"header": ""
|
||||
},
|
||||
"file": "Datei",
|
||||
"file-attribute-encoding-types": {
|
||||
"ascii": "",
|
||||
|
||||
@ -741,6 +741,11 @@
|
||||
"save": "Save Document Info",
|
||||
"title": "Enter File Attributes"
|
||||
},
|
||||
"documents-hidden-text-option": {
|
||||
"description": "Hidden text is invisible to human readers but can be detected and read by software and machines. For example, the OCR output of scanned documents is stored as hidden text.",
|
||||
"heading": "Hidden text on documents",
|
||||
"title": "Keep hidden text in redacted documents"
|
||||
},
|
||||
"dossier-attribute-types": {
|
||||
"date": "Date",
|
||||
"image": "Image",
|
||||
@ -1217,6 +1222,17 @@
|
||||
"title": "Oops! Something went wrong..."
|
||||
},
|
||||
"exact-date": "{day} {month} {year} at {hour}:{minute}",
|
||||
"false-positive-dialog": {
|
||||
"actions": {
|
||||
"cancel": "",
|
||||
"save": ""
|
||||
},
|
||||
"content": {
|
||||
"body-text": "",
|
||||
"comment": ""
|
||||
},
|
||||
"header": ""
|
||||
},
|
||||
"file": "File",
|
||||
"file-attribute-encoding-types": {
|
||||
"ascii": "ASCII",
|
||||
|
||||
@ -16,6 +16,7 @@ export class DossierTemplate implements IDossierTemplate, IListable {
|
||||
readonly validFrom?: string;
|
||||
readonly validTo?: string;
|
||||
readonly dossierTemplateStatus: DossierTemplateStatus;
|
||||
readonly keepHiddenText: boolean;
|
||||
|
||||
constructor(dossierTemplate: IDossierTemplate) {
|
||||
this.createdBy = dossierTemplate.createdBy;
|
||||
@ -30,6 +31,7 @@ export class DossierTemplate implements IDossierTemplate, IListable {
|
||||
this.validFrom = dossierTemplate.validFrom;
|
||||
this.validTo = dossierTemplate.validTo;
|
||||
this.dossierTemplateStatus = dossierTemplate.dossierTemplateStatus;
|
||||
this.keepHiddenText = dossierTemplate.keepHiddenText;
|
||||
}
|
||||
|
||||
get isActive(): boolean {
|
||||
|
||||
@ -48,4 +48,8 @@ export interface IDossierTemplate {
|
||||
*/
|
||||
readonly validTo?: string;
|
||||
readonly dossierTemplateStatus: DossierTemplateStatus;
|
||||
/**
|
||||
* Hidden text is invisible to human readers but can be detected and read by software and machines
|
||||
*/
|
||||
readonly keepHiddenText: boolean;
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user