diff --git a/apps/red-ui/src/app/components/dossier-watermark-selector/dossier-watermark-selector.component.html b/apps/red-ui/src/app/components/dossier-watermark-selector/dossier-watermark-selector.component.html
new file mode 100644
index 000000000..de078ba1e
--- /dev/null
+++ b/apps/red-ui/src/app/components/dossier-watermark-selector/dossier-watermark-selector.component.html
@@ -0,0 +1,37 @@
+
+
+
+ {{ 'dossier-watermark-selector.watermark' | translate }}
+
+
+
+
+ {{ selectedWatermark(watermarkId, watermarks).name }}
+
+
+
+ {{ watermark.name }}
+
+
+
+
+
+
+ {{ 'dossier-watermark-selector.preview' | translate }}
+
+
+
+
+ {{ selectedWatermark(previewWatermarkId, watermarks).name }}
+
+
+
+ {{ watermark.name }}
+
+
+
+
diff --git a/apps/red-ui/src/app/components/dossier-watermark-selector/dossier-watermark-selector.component.scss b/apps/red-ui/src/app/components/dossier-watermark-selector/dossier-watermark-selector.component.scss
new file mode 100644
index 000000000..a383c5123
--- /dev/null
+++ b/apps/red-ui/src/app/components/dossier-watermark-selector/dossier-watermark-selector.component.scss
@@ -0,0 +1,24 @@
+.container {
+ margin-top: 14px;
+
+ .watermark {
+ width: 300px;
+ max-width: 300px;
+
+ mat-select {
+ margin-left: 22px;
+
+ mat-select-trigger,
+ mat-option {
+ display: flex;
+ align-items: center;
+ gap: 18px;
+ }
+
+ span {
+ text-overflow: ellipsis;
+ overflow: hidden;
+ }
+ }
+ }
+}
diff --git a/apps/red-ui/src/app/components/dossier-watermark-selector/dossier-watermark-selector.component.ts b/apps/red-ui/src/app/components/dossier-watermark-selector/dossier-watermark-selector.component.ts
new file mode 100644
index 000000000..b84a9d792
--- /dev/null
+++ b/apps/red-ui/src/app/components/dossier-watermark-selector/dossier-watermark-selector.component.ts
@@ -0,0 +1,85 @@
+import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
+import { Observable } from 'rxjs';
+import { IWatermark } from '@red/domain';
+import { WatermarkService } from '../../services/entity-services/watermark.service';
+import { mapEach, Required } from '@iqser/common-ui';
+import { OptionWatermark } from '@components/dossier-watermark-selector/option-watermark.model';
+import { map, tap } from 'rxjs/operators';
+
+const DocumentTypes = {
+ REDACTED: 'REDACTED',
+ PREVIEW: 'PREVIEW',
+} as const;
+type DocumentType = keyof typeof DocumentTypes;
+
+export interface UpdateWatermarkIdsEvent {
+ watermarkId: string | null;
+ previewWatermarkId: string | null;
+}
+
+@Component({
+ selector: 'redaction-dossier-watermark-selector',
+ templateUrl: './dossier-watermark-selector.component.html',
+ styleUrls: ['./dossier-watermark-selector.component.scss'],
+})
+export class DossierWatermarkSelectorComponent implements OnInit {
+ @Input() @Required() dossierTemplateId!: string;
+ @Input() watermarkId: string | null;
+ @Input() previewWatermarkId: string | null;
+ @Output() readonly idsUpdate = new EventEmitter();
+
+ #oldWatermarkId: string | null;
+ #oldPreviewWatermarkId: string | null;
+
+ watermarks$: Observable;
+
+ readonly documentTypes = DocumentTypes;
+
+ constructor(private readonly _watermarkService: WatermarkService) {}
+
+ ngOnInit(): void {
+ this.watermarks$ = this._watermarkService.getWatermarks(this.dossierTemplateId).pipe(
+ map((watermarks: IWatermark[]) => watermarks.sort(this.sortByStatusFn)),
+ mapEach((watermark: IWatermark) => new OptionWatermark(watermark)),
+ tap((watermarks: OptionWatermark[]) => (this.#oldWatermarkId = watermarks[0].id)),
+ tap((watermarks: OptionWatermark[]) => (this.#oldPreviewWatermarkId = watermarks[0].id)),
+ );
+ }
+
+ sortByStatusFn = (a, b) => {
+ if (a.enabled === b.enabled) {
+ return a.name.toLowerCase() < b.name.toLowerCase() ? -1 : 1;
+ }
+ return a.enabled ? -1 : 1;
+ };
+
+ toggleWatermarkSelection(checked: boolean, documentType: DocumentType): void {
+ if (checked) {
+ if (documentType === DocumentTypes.REDACTED) {
+ this.watermarkId = this.#oldWatermarkId;
+ } else {
+ this.previewWatermarkId = this.#oldPreviewWatermarkId;
+ }
+ } else {
+ if (documentType === DocumentTypes.REDACTED) {
+ this.#oldWatermarkId = this.watermarkId;
+ this.watermarkId = null;
+ } else {
+ this.#oldPreviewWatermarkId = this.previewWatermarkId;
+ this.previewWatermarkId = null;
+ }
+ }
+ this.emitNewValues();
+ }
+
+ emitNewValues(): void {
+ this.idsUpdate.emit({
+ watermarkId: this.watermarkId,
+ previewWatermarkId: this.previewWatermarkId,
+ });
+ }
+
+ selectedWatermark(id: string, watermarks: OptionWatermark[]): OptionWatermark {
+ return watermarks.find(watermark => watermark.id === id);
+ }
+}
diff --git a/apps/red-ui/src/app/components/dossier-watermark-selector/option-watermark.model.ts b/apps/red-ui/src/app/components/dossier-watermark-selector/option-watermark.model.ts
new file mode 100644
index 000000000..98656a261
--- /dev/null
+++ b/apps/red-ui/src/app/components/dossier-watermark-selector/option-watermark.model.ts
@@ -0,0 +1,14 @@
+import { IWatermark } from '@red/domain';
+import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
+
+export class OptionWatermark {
+ id!: string;
+ name!: string;
+ enabled!: boolean;
+
+ constructor(watermark: IWatermark) {
+ this.id = watermark.id;
+ this.name = watermark.enabled ? watermark.name : `${_('disabled')} - ${watermark.name}`;
+ this.enabled = watermark.enabled;
+ }
+}
diff --git a/apps/red-ui/src/app/modules/admin/screens/watermark/watermark-screen/watermark-screen.component.ts b/apps/red-ui/src/app/modules/admin/screens/watermark/watermark-screen/watermark-screen.component.ts
index 164ca9f7b..1f9b1ec78 100644
--- a/apps/red-ui/src/app/modules/admin/screens/watermark/watermark-screen/watermark-screen.component.ts
+++ b/apps/red-ui/src/app/modules/admin/screens/watermark/watermark-screen/watermark-screen.component.ts
@@ -137,6 +137,7 @@ export class WatermarkScreenComponent implements OnInit {
this._watermark.dossierTemplateId = this.#dossierTemplateId;
this.form.setValue({ ...watermark });
this._loadViewer();
+ this._changeDetectorRef.markForCheck();
}),
);
}
diff --git a/apps/red-ui/src/app/modules/admin/screens/watermarks-listing/watermarks-listing-screen.component.ts b/apps/red-ui/src/app/modules/admin/screens/watermarks-listing/watermarks-listing-screen.component.ts
index 9aa05c702..bed1458e0 100644
--- a/apps/red-ui/src/app/modules/admin/screens/watermarks-listing/watermarks-listing-screen.component.ts
+++ b/apps/red-ui/src/app/modules/admin/screens/watermarks-listing/watermarks-listing-screen.component.ts
@@ -31,11 +31,11 @@ export class WatermarksListingScreenComponent extends ListingComponent[] = [
- { label: _('watermarks-listing.table-col-names.name'), width: '2fr' },
- { label: _('watermarks-listing.table-col-names.status'), class: 'flex-center' },
+ { label: _('watermarks-listing.table-col-names.name'), sortByKey: 'searchKey', width: '2fr' },
+ { label: _('watermarks-listing.table-col-names.status'), sortByKey: 'enabled', class: 'flex-center' },
{ label: _('watermarks-listing.table-col-names.created-by'), class: 'user-column' },
- { label: _('watermarks-listing.table-col-names.created-on') },
- { label: _('watermarks-listing.table-col-names.modified-on') },
+ { label: _('watermarks-listing.table-col-names.created-on'), sortByKey: 'dateAdded' },
+ { label: _('watermarks-listing.table-col-names.modified-on'), sortByKey: 'dateModified' },
];
readonly tableHeaderLabel: string = _('watermarks-listing.table-header.title');
diff --git a/apps/red-ui/src/app/modules/icons/icons.module.ts b/apps/red-ui/src/app/modules/icons/icons.module.ts
index bb2e7eff9..c59924305 100644
--- a/apps/red-ui/src/app/modules/icons/icons.module.ts
+++ b/apps/red-ui/src/app/modules/icons/icons.module.ts
@@ -74,6 +74,7 @@ export class IconsModule {
'user',
'visibility',
'visibility-off',
+ 'warning',
];
for (const icon of icons) {
diff --git a/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/download-package/edit-dossier-download-package.component.html b/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/download-package/edit-dossier-download-package.component.html
index c220c11c8..ffd39571b 100644
--- a/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/download-package/edit-dossier-download-package.component.html
+++ b/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/download-package/edit-dossier-download-package.component.html
@@ -15,41 +15,13 @@
>
-
-
-
- {{ 'add-dossier-dialog.form.watermark' | translate }}
-
-
-
-
- {{ watermark.name }}
-
-
-
-
-
-
-
- {{ 'add-dossier-dialog.form.preview' | translate }}
-
-
-
-
- {{ watermark.name }}
-
-
-
-
-
+
+
diff --git a/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/download-package/edit-dossier-download-package.component.ts b/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/download-package/edit-dossier-download-package.component.ts
index d3be1d2c8..bf59624f4 100644
--- a/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/download-package/edit-dossier-download-package.component.ts
+++ b/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/download-package/edit-dossier-download-package.component.ts
@@ -8,6 +8,7 @@ import { PermissionsService } from '@services/permissions.service';
import { firstValueFrom } from 'rxjs';
import { DossiersService } from '@services/dossiers/dossiers.service';
import { WatermarkService } from '@services/entity-services/watermark.service';
+import { UpdateWatermarkIdsEvent } from '@components/dossier-watermark-selector/dossier-watermark-selector.component';
@Component({
selector: 'redaction-edit-dossier-download-package',
@@ -23,9 +24,6 @@ export class EditDossierDownloadPackageComponent implements OnInit, EditDossierS
}),
);
availableReportTypes: IReportTemplate[] = [];
- watermarks: IWatermark[] = [];
- oldWatermarkId: string;
- oldPreviewWatermarkID: string;
@Input() dossier: Dossier;
@@ -34,7 +32,6 @@ export class EditDossierDownloadPackageComponent implements OnInit, EditDossierS
private readonly _reportTemplateController: ReportTemplateService,
private readonly _formBuilder: UntypedFormBuilder,
private readonly _permissionsService: PermissionsService,
- private readonly _watermarkService: WatermarkService,
) {}
get reportTypesLength() {
@@ -92,10 +89,6 @@ export class EditDossierDownloadPackageComponent implements OnInit, EditDossierS
if (!this._permissionsService.canEditDossier(this.dossier)) {
this.form.disable();
}
-
- this.watermarks = await firstValueFrom(this._watermarkService.getWatermarks(dossierTemplateId));
- this.oldWatermarkId = this.form.get('watermarkId').value || this.watermarks[0]?.id;
- this.oldPreviewWatermarkID = this.form.get('previewWatermarkId').value || this.watermarks[0]?.id;
}
async save(): EditDossierSaveResult {
@@ -137,19 +130,8 @@ export class EditDossierDownloadPackageComponent implements OnInit, EditDossierS
);
}
- isWatermarkEnabled(key: string): boolean {
- return this.form.get(key).value;
- }
-
- enableDisableWatermark(checked: boolean, key: string): void {
- let oldValue: string;
- if (key === 'watermarkId') {
- this.oldWatermarkId = !checked ? this.form.get(key).value : this.oldWatermarkId;
- oldValue = this.oldWatermarkId;
- } else {
- this.oldPreviewWatermarkID = !checked ? this.form.get(key).value : this.oldPreviewWatermarkID;
- oldValue = this.oldPreviewWatermarkID;
- }
- this.form.get(key).setValue(checked ? oldValue : null);
+ updateWatermarkIds(event: UpdateWatermarkIdsEvent) {
+ this.form.get('watermarkId').setValue(event.watermarkId);
+ this.form.get('previewWatermarkId').setValue(event.previewWatermarkId);
}
}
diff --git a/apps/red-ui/src/app/modules/shared/dialogs/add-dossier-dialog/add-dossier-dialog.component.html b/apps/red-ui/src/app/modules/shared/dialogs/add-dossier-dialog/add-dossier-dialog.component.html
index 3564cc418..7a661dc1c 100644
--- a/apps/red-ui/src/app/modules/shared/dialogs/add-dossier-dialog/add-dossier-dialog.component.html
+++ b/apps/red-ui/src/app/modules/shared/dialogs/add-dossier-dialog/add-dossier-dialog.component.html
@@ -47,41 +47,8 @@
>
-
-
-
- {{ 'add-dossier-dialog.form.watermark' | translate }}
-
-
-
-
- {{ watermark.name }}
-
-
-
-
-
-
-
- {{ 'add-dossier-dialog.form.preview' | translate }}
-
-
-
-
- {{ watermark.name }}
-
-
-
-
-
+
+