From e1c0f2d5e6f42bfc7cf0291489fdd7bb007e077e Mon Sep 17 00:00:00 2001 From: Valentin Mihai Date: Mon, 27 Jun 2022 18:20:56 +0300 Subject: [PATCH 1/2] RED-4247 - WIP on watermarks list --- .../app/modules/admin/admin-routing.module.ts | 32 ++++-- .../admin-side-nav.component.ts | 2 +- .../src/app/modules/admin/admin.module.ts | 2 + .../watermark-screen.component.ts | 24 +++- .../watermarks-listing-screen.component.html | 105 ++++++++++++++++++ .../watermarks-listing-screen.component.scss | 0 .../watermarks-listing-screen.component.ts | 72 ++++++++++++ .../entity-services/watermark.service.ts | 21 ++-- apps/red-ui/src/assets/config/config.json | 4 +- apps/red-ui/src/assets/i18n/de.json | 25 ++++- apps/red-ui/src/assets/i18n/en.json | 25 ++++- libs/red-domain/src/index.ts | 1 + .../src/lib/dossier-templates/constants.ts | 1 + .../file-attributes/file-attributes-config.ts | 2 +- libs/red-domain/src/lib/shared/index.ts | 1 - libs/red-domain/src/lib/watermarks/index.ts | 2 + .../src/lib/watermarks/watermark.model.ts | 30 +++++ .../lib/{shared => watermarks}/watermark.ts | 7 ++ 18 files changed, 329 insertions(+), 27 deletions(-) create mode 100644 apps/red-ui/src/app/modules/admin/screens/watermarks-listing/watermarks-listing-screen.component.html create mode 100644 apps/red-ui/src/app/modules/admin/screens/watermarks-listing/watermarks-listing-screen.component.scss create mode 100644 apps/red-ui/src/app/modules/admin/screens/watermarks-listing/watermarks-listing-screen.component.ts create mode 100644 libs/red-domain/src/lib/watermarks/index.ts create mode 100644 libs/red-domain/src/lib/watermarks/watermark.model.ts rename libs/red-domain/src/lib/{shared => watermarks}/watermark.ts (70%) diff --git a/apps/red-ui/src/app/modules/admin/admin-routing.module.ts b/apps/red-ui/src/app/modules/admin/admin-routing.module.ts index c41fd089c..288ac6d7d 100644 --- a/apps/red-ui/src/app/modules/admin/admin-routing.module.ts +++ b/apps/red-ui/src/app/modules/admin/admin-routing.module.ts @@ -15,12 +15,15 @@ import { GeneralConfigScreenComponent } from './screens/general-config/general-c import { BaseAdminScreenComponent } from './base-admin-screen/base-admin-screen.component'; import { BaseDossierTemplateScreenComponent } from './base-dossier-templates-screen/base-dossier-template-screen.component'; import { DossierTemplatesGuard } from '@guards/dossier-templates.guard'; -import { DOSSIER_TEMPLATE_ID, ENTITY_TYPE } from '@red/domain'; +import { DOSSIER_TEMPLATE_ID, ENTITY_TYPE, WATERMARK_ID } from '@red/domain'; import { DossierTemplateExistsGuard } from '@guards/dossier-template-exists.guard'; import { EntityExistsGuard } from '@guards/entity-exists-guard.service'; import { DossierStatesListingScreenComponent } from './screens/dossier-states-listing/dossier-states-listing-screen.component'; import { BaseEntityScreenComponent } from './base-entity-screen/base-entity-screen.component'; import { PermissionsGuard } from '../../guards/permissions-guard'; +import { WatermarksListingScreenComponent } from './screens/watermarks-listing/watermarks-listing-screen.component'; +import { WatermarkScreenComponent } from './screens/watermark/watermark-screen/watermark-screen.component'; +import { WatermarkModule } from './screens/watermark/watermark.module'; const dossierTemplateIdRoutes: Routes = [ { @@ -69,13 +72,26 @@ const dossierTemplateIdRoutes: Routes = [ }, }, { - path: 'watermark', - component: BaseDossierTemplateScreenComponent, - canActivate: [CompositeRouteGuard], - data: { - routeGuards: [AuthGuard, RedRoleGuard], - }, - loadChildren: () => import('./screens/watermark/watermark.module').then(m => m.WatermarkModule), + path: 'watermarks', + children: [ + { + path: '', + component: WatermarksListingScreenComponent, + canActivate: [CompositeRouteGuard], + data: { + routeGuards: [AuthGuard, RedRoleGuard], + }, + }, + { + path: `:${WATERMARK_ID}`, + component: WatermarkScreenComponent, + canActivate: [CompositeRouteGuard], + loadChildren: () => import('./screens/watermark/watermark.module').then(m => m.WatermarkModule), + data: { + routeGuards: [AuthGuard, RedRoleGuard], + }, + }, + ], }, { path: 'reports', diff --git a/apps/red-ui/src/app/modules/admin/admin-side-nav/admin-side-nav.component.ts b/apps/red-ui/src/app/modules/admin/admin-side-nav/admin-side-nav.component.ts index 5efadeea0..47b8f12ab 100644 --- a/apps/red-ui/src/app/modules/admin/admin-side-nav/admin-side-nav.component.ts +++ b/apps/red-ui/src/app/modules/admin/admin-side-nav/admin-side-nav.component.ts @@ -59,7 +59,7 @@ export class AdminSideNavComponent implements OnInit { hideIf: !this.userPreferenceService.areDevFeaturesEnabled, }, { screen: 'default-colors', label: _('admin-side-nav.default-colors') }, - { screen: 'watermark', label: _('admin-side-nav.watermark') }, + { screen: 'watermarks', label: _('admin-side-nav.watermarks') }, { screen: 'file-attributes', label: _('admin-side-nav.file-attributes') }, { screen: 'dossier-attributes', label: _('admin-side-nav.dossier-attributes') }, { screen: 'dossier-states', label: _('admin-side-nav.dossier-states') }, diff --git a/apps/red-ui/src/app/modules/admin/admin.module.ts b/apps/red-ui/src/app/modules/admin/admin.module.ts index 569e9506f..fa4d2dbce 100644 --- a/apps/red-ui/src/app/modules/admin/admin.module.ts +++ b/apps/red-ui/src/app/modules/admin/admin.module.ts @@ -46,6 +46,7 @@ import { SystemPreferencesFormComponent } from './screens/general-config/system- import { ConfigureCertificateDialogComponent } from './dialogs/configure-digital-signature-dialog/configure-certificate-dialog.component'; import { PkcsSignatureConfigurationComponent } from './dialogs/configure-digital-signature-dialog/form/pkcs-signature-configuration/pkcs-signature-configuration.component'; import { KmsSignatureConfigurationComponent } from './dialogs/configure-digital-signature-dialog/form/kms-signature-configuration/kms-signature-configuration.component'; +import { WatermarksListingScreenComponent } from './screens/watermarks-listing/watermarks-listing-screen.component'; const dialogs = [ AddEditCloneDossierTemplateDialogComponent, @@ -73,6 +74,7 @@ const screens = [ GeneralConfigScreenComponent, DossierAttributesListingScreenComponent, DossierStatesListingScreenComponent, + WatermarksListingScreenComponent, ]; const components = [ 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 a1facac72..d33fcf83c 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 @@ -4,7 +4,7 @@ import WebViewer, { WebViewerInstance } from '@pdftron/webviewer'; import { HttpClient } from '@angular/common/http'; import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms'; import { Debounce, IconButtonTypes, LoadingService, Toaster } from '@iqser/common-ui'; -import { DOSSIER_TEMPLATE_ID, IWatermark, WatermarkOrientation, WatermarkOrientations } from '@red/domain'; +import { DOSSIER_TEMPLATE_ID, IWatermark, WATERMARK_ID, WatermarkOrientation, WatermarkOrientations } from '@red/domain'; import { BASE_HREF_FN, BaseHrefFn } from '../../../../../tokens'; import { stampPDFPage } from '@utils/page-stamper'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; @@ -15,12 +15,19 @@ import { ActivatedRoute } from '@angular/router'; import { LicenseService } from '../../../../../services/license.service'; export const DEFAULT_WATERMARK: IWatermark = { + id: null, + dossierTemplateId: null, text: null, + name: null, + enabled: false, hexColor: '#dd4d50', opacity: 70, fontSize: 11, fontType: 'sans-serif', orientation: WatermarkOrientations.DIAGONAL, + createdBy: null, + dateAdded: null, + dateModified: null, } as const; @Component({ @@ -32,8 +39,9 @@ export class WatermarkScreenComponent implements OnInit { readonly iconButtonTypes = IconButtonTypes; readonly form: UntypedFormGroup = this._getForm(); readonly #dossierTemplateId: string; + readonly #watermarkId: string; private _instance: WebViewerInstance; - private _watermark: IWatermark = {}; + private _watermark: IWatermark = {} as IWatermark; @ViewChild('viewer', { static: true }) private _viewer: ElementRef; @@ -51,6 +59,7 @@ export class WatermarkScreenComponent implements OnInit { ) { this._loadingService.start(); this.#dossierTemplateId = route.snapshot.paramMap.get(DOSSIER_TEMPLATE_ID); + this.#watermarkId = route.snapshot.paramMap.get(WATERMARK_ID); } get changed(): boolean { @@ -78,8 +87,8 @@ export class WatermarkScreenComponent implements OnInit { const watermark: IWatermark = this.form.getRawValue(); const observable = watermark.text - ? this._watermarkService.saveWatermark(watermark, this.#dossierTemplateId) - : this._watermarkService.deleteWatermark(this.#dossierTemplateId); + ? this._watermarkService.saveWatermark(watermark) + : this._watermarkService.deleteWatermark(this.#watermarkId); try { await firstValueFrom( @@ -112,10 +121,12 @@ export class WatermarkScreenComponent implements OnInit { } private _loadWatermark(): Observable { - return this._watermarkService.getWatermark(this.#dossierTemplateId).pipe( + return this._watermarkService.getWatermark(this.#watermarkId).pipe( catchError(() => of(DEFAULT_WATERMARK)), tap(watermark => { this._watermark = watermark; + console.log('watermark: ', this._watermark); + delete watermark.id; this.form.setValue({ ...watermark }); this._loadViewer(); }), @@ -195,6 +206,9 @@ export class WatermarkScreenComponent implements OnInit { const defaultFormControl = [{ ...defaultValue }, Validators.required]; return this._formBuilder.group({ + name: [{ ...defaultValue }], + enabled: [{ ...defaultValue }], + dossierTemplateId: [{ ...defaultValue }], text: [{ ...defaultValue }], hexColor: [...defaultFormControl], opacity: [...defaultFormControl], diff --git a/apps/red-ui/src/app/modules/admin/screens/watermarks-listing/watermarks-listing-screen.component.html b/apps/red-ui/src/app/modules/admin/screens/watermarks-listing/watermarks-listing-screen.component.html new file mode 100644 index 000000000..85fcf1790 --- /dev/null +++ b/apps/red-ui/src/app/modules/admin/screens/watermarks-listing/watermarks-listing-screen.component.html @@ -0,0 +1,105 @@ +
+ + +
+
+ + + +
+ +
+
+
+ + +
+ +
+
+ + + + + + +
+
+ {{ watermark.name }} +
+ +
+ +
+ +
+ +
+ +
+
+ {{ watermark.dateAdded | date: 'd MMM yyyy' }} +
+
+ +
+
+ {{ watermark.dateModified | date: 'd MMM yyyy' }} +
+
+ +
+
+ + + +
+
+
+
diff --git a/apps/red-ui/src/app/modules/admin/screens/watermarks-listing/watermarks-listing-screen.component.scss b/apps/red-ui/src/app/modules/admin/screens/watermarks-listing/watermarks-listing-screen.component.scss new file mode 100644 index 000000000..e69de29bb 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 new file mode 100644 index 000000000..544d14dfa --- /dev/null +++ b/apps/red-ui/src/app/modules/admin/screens/watermarks-listing/watermarks-listing-screen.component.ts @@ -0,0 +1,72 @@ +import { ChangeDetectionStrategy, Component, forwardRef, Injector, OnInit } from '@angular/core'; +import { + CircleButtonTypes, + DefaultListingServices, + IconButtonTypes, + ListingComponent, + LoadingService, + TableColumnConfig, +} from '@iqser/common-ui'; +import { DOSSIER_TEMPLATE_ID, User, Watermark } from '@red/domain'; +import { UserService } from '../../../../services/user.service'; +import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; +import { firstValueFrom } from 'rxjs'; +import { WatermarkService } from '../../../../services/entity-services/watermark.service'; +import { ActivatedRoute } from '@angular/router'; + +@Component({ + templateUrl: './watermarks-listing-screen.component.html', + styleUrls: ['./watermarks-listing-screen.component.scss'], + changeDetection: ChangeDetectionStrategy.OnPush, + providers: [...DefaultListingServices, { provide: ListingComponent, useExisting: forwardRef(() => WatermarksListingScreenComponent) }], +}) +export class WatermarksListingScreenComponent extends ListingComponent implements OnInit { + private readonly _dossierTemplateId: string; + + readonly iconButtonTypes = IconButtonTypes; + readonly circleButtonTypes = CircleButtonTypes; + readonly currentUser: User; + + readonly tableColumnConfigs: TableColumnConfig[] = [ + { 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.created-by'), class: 'user-column' }, + { label: _('watermarks-listing.table-col-names.created-on') }, + { label: _('watermarks-listing.table-col-names.modified-on') }, + ]; + readonly tableHeaderLabel: string = _('watermarks-listing.table-header.title'); + + constructor( + protected readonly _injector: Injector, + private readonly _route: ActivatedRoute, + private readonly _userService: UserService, + private readonly _loadingService: LoadingService, + private readonly _watermarkService: WatermarkService, + ) { + super(_injector); + this.currentUser = _userService.currentUser; + this._dossierTemplateId = _route.snapshot.paramMap.get(DOSSIER_TEMPLATE_ID); + } + + async ngOnInit(): Promise { + await this._loadData(); + } + + private async _loadData(): Promise { + this._loadingService.start(); + + try { + const response = await firstValueFrom(this._watermarkService.getWatermarks(this._dossierTemplateId)); + const watermarkConfig = response?.map(item => new Watermark(item)) || []; + this.entitiesService.setEntities(watermarkConfig); + } catch (e) {} + + this._loadingService.stop(); + } + + openAddEditWatermarkDialog(event: MouseEvent): void {} + + openConfirmDeleteWatermarkDialog(event: MouseEvent): void {} + + toggleStatus(watermark: Watermark): void {} +} diff --git a/apps/red-ui/src/app/services/entity-services/watermark.service.ts b/apps/red-ui/src/app/services/entity-services/watermark.service.ts index aef6ef9bc..c85eed232 100644 --- a/apps/red-ui/src/app/services/entity-services/watermark.service.ts +++ b/apps/red-ui/src/app/services/entity-services/watermark.service.ts @@ -1,6 +1,7 @@ import { Injectable, Injector } from '@angular/core'; -import { GenericService, RequiredParam, Validate } from '@iqser/common-ui'; +import { GenericService, QueryParam, RequiredParam, Validate } from '@iqser/common-ui'; import { IWatermark } from '@red/domain'; +import { Observable } from 'rxjs'; @Injectable({ providedIn: 'root', @@ -11,17 +12,23 @@ export class WatermarkService extends GenericService { } @Validate() - saveWatermark(@RequiredParam() body: IWatermark, @RequiredParam() dossierTemplateId: string) { - return this._post(body, `${this._defaultModelPath}/${dossierTemplateId}`); + saveWatermark(@RequiredParam() body: IWatermark) { + return this._post(body, `${this._defaultModelPath}`); } @Validate() - deleteWatermark(@RequiredParam() dossierTemplateId: string) { - return super.delete({}, `${this._defaultModelPath}/${dossierTemplateId}`); + deleteWatermark(@RequiredParam() watermarkId: string) { + return super.delete({}, `${this._defaultModelPath}/${watermarkId}`); } @Validate() - getWatermark(@RequiredParam() dossierTemplateId: string) { - return this._getOne([dossierTemplateId]); + getWatermark(@RequiredParam() watermarkId: string) { + return this._getOne([watermarkId]); + } + + @Validate() + getWatermarks(@RequiredParam() dossierTemplateId: string): Observable { + const queryParams: QueryParam[] = [{ key: 'dossierTemplateId', value: dossierTemplateId }]; + return this.getAll(this._defaultModelPath, queryParams); } } diff --git a/apps/red-ui/src/assets/config/config.json b/apps/red-ui/src/assets/config/config.json index 322276d2f..72d288759 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://dev-08.iqser.cloud/redaction-gateway-v1", + "API_URL": "https://dev-04.iqser.cloud/redaction-gateway-v1", "APP_NAME": "RedactManager", "AUTO_READ_TIME": 3, "BACKEND_APP_VERSION": "4.4.40", @@ -16,7 +16,7 @@ "MAX_RETRIES_ON_SERVER_ERROR": 3, "OAUTH_CLIENT_ID": "redaction", "OAUTH_IDP_HINT": null, - "OAUTH_URL": "https://dev-08.iqser.cloud/auth/realms/redaction", + "OAUTH_URL": "https://dev-04.iqser.cloud/auth/realms/redaction", "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/de.json b/apps/red-ui/src/assets/i18n/de.json index 7f540b547..cd49f2b30 100644 --- a/apps/red-ui/src/assets/i18n/de.json +++ b/apps/red-ui/src/assets/i18n/de.json @@ -186,7 +186,7 @@ "rule-editor": "", "settings": "Einstellungen", "user-management": "", - "watermark": "" + "watermarks": "" }, "annotation-actions": { "accept-recommendation": { @@ -2084,6 +2084,29 @@ }, "title": "Wasserzeichen" }, + "watermarks-listing": { + "action": { + "delete": "", + "edit": "" + }, + "add-new": "", + "bulk-actions": { + "delete": "" + }, + "no-data": { + "title": "" + }, + "table-col-names": { + "created-by": "", + "created-on": "", + "modified-on": "", + "name": "", + "status": "" + }, + "table-header": { + "title": "" + } + }, "workflow": { "selection": { "all": "Alle", diff --git a/apps/red-ui/src/assets/i18n/en.json b/apps/red-ui/src/assets/i18n/en.json index c80ca3363..1e56baa82 100644 --- a/apps/red-ui/src/assets/i18n/en.json +++ b/apps/red-ui/src/assets/i18n/en.json @@ -186,7 +186,7 @@ "rule-editor": "Rule Editor", "settings": "Settings", "user-management": "User Management", - "watermark": "Watermark" + "watermarks": "Watermarks" }, "annotation-actions": { "accept-recommendation": { @@ -2084,6 +2084,29 @@ }, "title": "Watermark" }, + "watermarks-listing": { + "action": { + "delete": "Delete", + "edit": "Edit" + }, + "add-new": "New Watermark", + "bulk-actions": { + "delete": "Delete Selected Watermarks" + }, + "no-data": { + "title": "There are no watermarks yet." + }, + "table-col-names": { + "created-by": "Created by", + "created-on": "Created on", + "modified-on": "Modified on", + "name": "Name", + "status": "Status" + }, + "table-header": { + "title": "Watermarks" + } + }, "workflow": { "selection": { "all": "All", diff --git a/libs/red-domain/src/index.ts b/libs/red-domain/src/index.ts index 92d56faad..a10ad047a 100644 --- a/libs/red-domain/src/index.ts +++ b/libs/red-domain/src/index.ts @@ -26,3 +26,4 @@ export * from './lib/text-highlight'; export * from './lib/permissions'; export * from './lib/license'; export * from './lib/digital-signature'; +export * from './lib/watermarks'; diff --git a/libs/red-domain/src/lib/dossier-templates/constants.ts b/libs/red-domain/src/lib/dossier-templates/constants.ts index aa890151f..871b34b58 100644 --- a/libs/red-domain/src/lib/dossier-templates/constants.ts +++ b/libs/red-domain/src/lib/dossier-templates/constants.ts @@ -8,3 +8,4 @@ export type DossierTemplateStatus = keyof typeof DossierTemplateStatuses; export const DOSSIER_TEMPLATE_ID = 'dossierTemplateId'; export const ENTITY_TYPE = 'entity'; +export const WATERMARK_ID = 'watermarkId'; diff --git a/libs/red-domain/src/lib/file-attributes/file-attributes-config.ts b/libs/red-domain/src/lib/file-attributes/file-attributes-config.ts index bac991593..bec6d0e9a 100644 --- a/libs/red-domain/src/lib/file-attributes/file-attributes-config.ts +++ b/libs/red-domain/src/lib/file-attributes/file-attributes-config.ts @@ -3,7 +3,7 @@ import { IFileAttributeConfig } from './file-attribute-config'; export interface IFileAttributesConfig { delimiter?: string; encoding?: string; - keyColumn?: string + keyColumn?: string; filenameMappingColumnHeaderName?: string; fileAttributeConfigs?: IFileAttributeConfig[]; } diff --git a/libs/red-domain/src/lib/shared/index.ts b/libs/red-domain/src/lib/shared/index.ts index f66679007..6e5026112 100644 --- a/libs/red-domain/src/lib/shared/index.ts +++ b/libs/red-domain/src/lib/shared/index.ts @@ -2,7 +2,6 @@ export * from './sorters/status-sorter'; export * from './breadcrumb-types'; export * from './types'; export * from './rules'; -export * from './watermark'; export * from './default-color-type'; export * from './colors'; export * from './view-mode'; diff --git a/libs/red-domain/src/lib/watermarks/index.ts b/libs/red-domain/src/lib/watermarks/index.ts new file mode 100644 index 000000000..b5414a603 --- /dev/null +++ b/libs/red-domain/src/lib/watermarks/index.ts @@ -0,0 +1,2 @@ +export * from './watermark'; +export * from './watermark.model'; diff --git a/libs/red-domain/src/lib/watermarks/watermark.model.ts b/libs/red-domain/src/lib/watermarks/watermark.model.ts new file mode 100644 index 000000000..64279718f --- /dev/null +++ b/libs/red-domain/src/lib/watermarks/watermark.model.ts @@ -0,0 +1,30 @@ +import { IWatermark } from './watermark'; +import { IListable } from '@iqser/common-ui'; + +export class Watermark implements IListable, IWatermark { + readonly id: string; + readonly dossierTemplateId: string; + readonly name: string; + readonly enabled: boolean; + readonly createdBy: string; + readonly dateAdded: string; + readonly dateModified: string; + + constructor(watermarkConfig: IWatermark) { + this.id = watermarkConfig.id; + this.dossierTemplateId = watermarkConfig.dossierTemplateId; + this.name = watermarkConfig.name; + this.enabled = watermarkConfig.enabled; + this.createdBy = watermarkConfig.createdBy; + this.dateAdded = watermarkConfig.dateAdded || '2022-06-20T16:23:49.351Z'; + this.dateModified = watermarkConfig.dateModified || '2022-06-20T16:23:49.351Z'; + } + + get searchKey(): string { + return this.name; + } + + get routerLink(): string { + return `/main/admin/dossier-templates/${this.dossierTemplateId}/watermarks/${this.id}`; + } +} diff --git a/libs/red-domain/src/lib/shared/watermark.ts b/libs/red-domain/src/lib/watermarks/watermark.ts similarity index 70% rename from libs/red-domain/src/lib/shared/watermark.ts rename to libs/red-domain/src/lib/watermarks/watermark.ts index 16f88f466..c2c72a6ac 100644 --- a/libs/red-domain/src/lib/shared/watermark.ts +++ b/libs/red-domain/src/lib/watermarks/watermark.ts @@ -1,10 +1,17 @@ export interface IWatermark { + id: string; + dossierTemplateId: string; + enabled: boolean; fontSize?: number; fontType?: string; hexColor?: string; opacity?: number; orientation?: WatermarkOrientation; text?: string; + name: string; + createdBy: string; + dateAdded: string; + dateModified: string; } export const WatermarkOrientations = { From 529a4b8b21f6b1f6b60c89455e1b9a81d640a298 Mon Sep 17 00:00:00 2001 From: Valentin Mihai Date: Thu, 30 Jun 2022 00:16:29 +0300 Subject: [PATCH 2/2] RED-4247 - When I edit or create a dossier as n owner I want to select from multiple watermark configurations --- .../app/modules/admin/admin-routing.module.ts | 5 +- .../src/app/modules/admin/admin.module.ts | 2 + .../base-watermark-screen.component.html | 27 +++++++++ .../base-watermark-screen.component.ts | 57 +++++++++++++++++++ .../watermark-screen.component.html | 13 +++-- .../watermark-screen.component.ts | 56 ++++++++++-------- .../watermarks-listing-screen.component.html | 8 +-- .../watermarks-listing-screen.component.ts | 40 ++++++++++++- .../services/digital-signature.service.ts | 4 +- .../file-preview/services/stamp.service.ts | 2 +- ...it-dossier-download-package.component.html | 44 ++++++++++---- ...it-dossier-download-package.component.scss | 10 ++++ ...edit-dossier-download-package.component.ts | 47 +++++++++++---- .../add-dossier-dialog.component.html | 44 ++++++++++---- .../add-dossier-dialog.component.scss | 18 +++--- .../add-dossier-dialog.component.ts | 37 ++++++++++-- .../entity-services/watermark.service.ts | 11 ++++ apps/red-ui/src/assets/config/config.json | 4 +- apps/red-ui/src/assets/i18n/de.json | 22 ++++--- apps/red-ui/src/assets/i18n/en.json | 24 ++++---- libs/common-ui | 2 +- .../src/lib/dossiers/dossier.model.ts | 8 +-- .../src/lib/dossiers/dossier.request.ts | 8 +++ libs/red-domain/src/lib/dossiers/dossier.ts | 4 +- .../src/lib/watermarks/watermark.model.ts | 42 ++++++++------ .../src/lib/watermarks/watermark.ts | 18 +++--- 26 files changed, 412 insertions(+), 145 deletions(-) create mode 100644 apps/red-ui/src/app/modules/admin/base-watermark-screen/base-watermark-screen.component.html create mode 100644 apps/red-ui/src/app/modules/admin/base-watermark-screen/base-watermark-screen.component.ts diff --git a/apps/red-ui/src/app/modules/admin/admin-routing.module.ts b/apps/red-ui/src/app/modules/admin/admin-routing.module.ts index 288ac6d7d..f657dc156 100644 --- a/apps/red-ui/src/app/modules/admin/admin-routing.module.ts +++ b/apps/red-ui/src/app/modules/admin/admin-routing.module.ts @@ -22,8 +22,7 @@ import { DossierStatesListingScreenComponent } from './screens/dossier-states-li import { BaseEntityScreenComponent } from './base-entity-screen/base-entity-screen.component'; import { PermissionsGuard } from '../../guards/permissions-guard'; import { WatermarksListingScreenComponent } from './screens/watermarks-listing/watermarks-listing-screen.component'; -import { WatermarkScreenComponent } from './screens/watermark/watermark-screen/watermark-screen.component'; -import { WatermarkModule } from './screens/watermark/watermark.module'; +import { BaseWatermarkScreenComponent } from './base-watermark-screen/base-watermark-screen.component'; const dossierTemplateIdRoutes: Routes = [ { @@ -84,7 +83,7 @@ const dossierTemplateIdRoutes: Routes = [ }, { path: `:${WATERMARK_ID}`, - component: WatermarkScreenComponent, + component: BaseWatermarkScreenComponent, canActivate: [CompositeRouteGuard], loadChildren: () => import('./screens/watermark/watermark.module').then(m => m.WatermarkModule), data: { diff --git a/apps/red-ui/src/app/modules/admin/admin.module.ts b/apps/red-ui/src/app/modules/admin/admin.module.ts index fa4d2dbce..91432eb9e 100644 --- a/apps/red-ui/src/app/modules/admin/admin.module.ts +++ b/apps/red-ui/src/app/modules/admin/admin.module.ts @@ -47,6 +47,7 @@ import { ConfigureCertificateDialogComponent } from './dialogs/configure-digital import { PkcsSignatureConfigurationComponent } from './dialogs/configure-digital-signature-dialog/form/pkcs-signature-configuration/pkcs-signature-configuration.component'; import { KmsSignatureConfigurationComponent } from './dialogs/configure-digital-signature-dialog/form/kms-signature-configuration/kms-signature-configuration.component'; import { WatermarksListingScreenComponent } from './screens/watermarks-listing/watermarks-listing-screen.component'; +import { BaseWatermarkScreenComponent } from './base-watermark-screen/base-watermark-screen.component'; const dialogs = [ AddEditCloneDossierTemplateDialogComponent, @@ -87,6 +88,7 @@ const components = [ BaseAdminScreenComponent, BaseDossierTemplateScreenComponent, BaseEntityScreenComponent, + BaseWatermarkScreenComponent, GeneralConfigFormComponent, SmtpFormComponent, SystemPreferencesFormComponent, diff --git a/apps/red-ui/src/app/modules/admin/base-watermark-screen/base-watermark-screen.component.html b/apps/red-ui/src/app/modules/admin/base-watermark-screen/base-watermark-screen.component.html new file mode 100644 index 000000000..ebc6f12c6 --- /dev/null +++ b/apps/red-ui/src/app/modules/admin/base-watermark-screen/base-watermark-screen.component.html @@ -0,0 +1,27 @@ +
+ + +
+
+ + +
+
diff --git a/apps/red-ui/src/app/modules/admin/base-watermark-screen/base-watermark-screen.component.ts b/apps/red-ui/src/app/modules/admin/base-watermark-screen/base-watermark-screen.component.ts new file mode 100644 index 000000000..c812d7357 --- /dev/null +++ b/apps/red-ui/src/app/modules/admin/base-watermark-screen/base-watermark-screen.component.ts @@ -0,0 +1,57 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; +import { firstValueFrom } from 'rxjs'; +import { AdminDialogService } from '../services/admin-dialog.service'; +import { ConfirmationDialogInput, LoadingService, Toaster } from '@iqser/common-ui'; +import { WatermarkService } from '../../../services/entity-services/watermark.service'; +import { DOSSIER_TEMPLATE_ID, WATERMARK_ID } from '@red/domain'; +import { ActivatedRoute, Router } from '@angular/router'; +import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; + +@Component({ + templateUrl: './base-watermark-screen.component.html', + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class BaseWatermarkScreenComponent { + readonly #dossierTemplateId: string; + readonly #watermarkId: string; + + constructor( + private readonly _dialogService: AdminDialogService, + private readonly _loadingService: LoadingService, + private readonly _watermarkService: WatermarkService, + private readonly _toaster: Toaster, + private readonly _route: ActivatedRoute, + private readonly _router: Router, + ) { + this.#dossierTemplateId = _route.snapshot.paramMap.get(DOSSIER_TEMPLATE_ID); + this.#watermarkId = _route.snapshot.paramMap.get(WATERMARK_ID); + } + + async openDeleteWatermarkDialog($event: MouseEvent): Promise { + const isUsed = await firstValueFrom(this._watermarkService.isWatermarkUsed(this.#watermarkId)); + + if (!isUsed) { + await this._deleteWatermark(this.#watermarkId); + return; + } + + const data = new ConfirmationDialogInput({ + question: _('watermarks-listing.watermark-is-used'), + }); + this._dialogService.openDialog('confirm', $event, data, async () => { + await this._deleteWatermark(this.#watermarkId); + }); + } + + private async _deleteWatermark(watermarkId: string): Promise { + this._loadingService.start(); + await firstValueFrom(this._watermarkService.deleteWatermark(watermarkId)); + this._toaster.success(_('watermarks-listing.action.delete-success')); + await this._router.navigate([`/main/admin/dossier-templates/${this.#dossierTemplateId}/watermarks`]); + this._loadingService.stop(); + } + + get editMode(): boolean { + return !!Number(this.#watermarkId); + } +} diff --git a/apps/red-ui/src/app/modules/admin/screens/watermark/watermark-screen/watermark-screen.component.html b/apps/red-ui/src/app/modules/admin/screens/watermark/watermark-screen/watermark-screen.component.html index 92df155d7..9a05c9caa 100644 --- a/apps/red-ui/src/app/modules/admin/screens/watermark/watermark-screen/watermark-screen.component.html +++ b/apps/red-ui/src/app/modules/admin/screens/watermark/watermark-screen/watermark-screen.component.html @@ -3,7 +3,7 @@
-
-
+
+ + +
+ +
+
-
- - {{ 'add-dossier-dialog.form.watermark' | translate }} - -
+ +
+ + {{ 'add-dossier-dialog.form.watermark' | translate }} + + + + + {{ watermark.name }} + + + +
-
- - {{ 'add-dossier-dialog.form.watermark-preview' | translate }} - -
+
+ + {{ 'add-dossier-dialog.form.watermark' | translate }} + + + + + {{ watermark.name }} + + + +
+
diff --git a/apps/red-ui/src/app/modules/shared/dialogs/add-dossier-dialog/add-dossier-dialog.component.scss b/apps/red-ui/src/app/modules/shared/dialogs/add-dossier-dialog/add-dossier-dialog.component.scss index 077d4cb22..bc9000977 100644 --- a/apps/red-ui/src/app/modules/shared/dialogs/add-dossier-dialog/add-dossier-dialog.component.scss +++ b/apps/red-ui/src/app/modules/shared/dialogs/add-dossier-dialog/add-dossier-dialog.component.scss @@ -1,11 +1,3 @@ -.watermark { - margin-top: 24px; -} - -.watermark-preview { - margin-top: 8px; -} - .due-date { margin-top: 8px; min-height: 34px; @@ -27,3 +19,13 @@ redaction-select { flex: 1; } + +.watermark { + width: 315px; + max-width: 315px; + + mat-form-field { + margin-left: 22px; + margin-top: -10px; + } +} diff --git a/apps/red-ui/src/app/modules/shared/dialogs/add-dossier-dialog/add-dossier-dialog.component.ts b/apps/red-ui/src/app/modules/shared/dialogs/add-dossier-dialog/add-dossier-dialog.component.ts index 440d5b370..d156b069c 100644 --- a/apps/red-ui/src/app/modules/shared/dialogs/add-dossier-dialog/add-dossier-dialog.component.ts +++ b/apps/red-ui/src/app/modules/shared/dialogs/add-dossier-dialog/add-dossier-dialog.component.ts @@ -1,6 +1,6 @@ import { Component, Inject, Injector, OnInit } from '@angular/core'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; -import { DOSSIER_TEMPLATE_ID, DownloadFileType, IDossierRequest, IDossierTemplate, IReportTemplate } from '@red/domain'; +import { DOSSIER_TEMPLATE_ID, DownloadFileType, IDossierRequest, IDossierTemplate, IReportTemplate, IWatermark } from '@red/domain'; import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms'; import { downloadTypesTranslations } from '@translations/download-types-translations'; import { BaseDialogComponent, IconButtonTypes, LoadingService, SaveOptions } from '@iqser/common-ui'; @@ -11,6 +11,7 @@ import { firstValueFrom } from 'rxjs'; import dayjs from 'dayjs'; import { Router } from '@angular/router'; import { DossiersDialogService } from '../../../shared-dossiers/services/dossiers-dialog.service'; +import { WatermarkService } from '@services/entity-services/watermark.service'; interface DialogData { readonly dossierTemplateId?: string; @@ -32,6 +33,9 @@ export class AddDossierDialogComponent extends BaseDialogComponent implements On ); dossierTemplates: IDossierTemplate[]; availableReportTypes = []; + watermarks: IWatermark[] = []; + oldWatermarkId: string; + oldPreviewWatermarkID: string; constructor( private readonly _activeDossiersService: ActiveDossiersService, @@ -41,6 +45,7 @@ export class AddDossierDialogComponent extends BaseDialogComponent implements On private readonly _router: Router, private readonly _dialogService: DossiersDialogService, private readonly _loadingService: LoadingService, + private readonly _watermarkService: WatermarkService, protected readonly _injector: Injector, protected readonly _dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) readonly data: DialogData, @@ -68,7 +73,11 @@ export class AddDossierDialogComponent extends BaseDialogComponent implements On } async ngOnInit(): Promise { - await this.dossierTemplateChanged(this.form.get('dossierTemplateId').value); + const dossierTemplateId = this.form.get('dossierTemplateId').value; + await this.dossierTemplateChanged(dossierTemplateId); + this.watermarks = await firstValueFrom(this._watermarkService.getWatermarks(dossierTemplateId)); + this.oldWatermarkId = this.watermarks[0]?.id; + this.oldPreviewWatermarkID = this.watermarks[0]?.id; } reportTemplateValueMapper = (reportTemplate: IReportTemplate) => reportTemplate.templateId; @@ -125,8 +134,8 @@ export class AddDossierDialogComponent extends BaseDialogComponent implements On reportTemplateIds: [null], description: [null], dueDate: [null], - watermarkEnabled: [true], - watermarkPreviewEnabled: [false], + watermarkId: [null], + previewWatermarkId: [null], }, { validators: control => @@ -155,8 +164,24 @@ export class AddDossierDialogComponent extends BaseDialogComponent implements On dossierTemplateId: this.form.get(DOSSIER_TEMPLATE_ID).value, downloadFileTypes: this.form.get('downloadFileTypes').value, reportTemplateIds: this.form.get('reportTemplateIds').value, - watermarkEnabled: this.form.get('watermarkEnabled').value, - watermarkPreviewEnabled: this.form.get('watermarkPreviewEnabled').value, + watermarkId: this.form.get('watermarkId').value, + previewWatermarkId: this.form.get('previewWatermarkId').value, }; } + + 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); + } } diff --git a/apps/red-ui/src/app/services/entity-services/watermark.service.ts b/apps/red-ui/src/app/services/entity-services/watermark.service.ts index c85eed232..6294e4537 100644 --- a/apps/red-ui/src/app/services/entity-services/watermark.service.ts +++ b/apps/red-ui/src/app/services/entity-services/watermark.service.ts @@ -2,6 +2,11 @@ import { Injectable, Injector } from '@angular/core'; import { GenericService, QueryParam, RequiredParam, Validate } from '@iqser/common-ui'; import { IWatermark } from '@red/domain'; import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; + +interface IsUsedResponse { + value: boolean; +} @Injectable({ providedIn: 'root', @@ -31,4 +36,10 @@ export class WatermarkService extends GenericService { const queryParams: QueryParam[] = [{ key: 'dossierTemplateId', value: dossierTemplateId }]; return this.getAll(this._defaultModelPath, queryParams); } + + @Validate() + isWatermarkUsed(@RequiredParam() watermarkId: string): Observable { + const queryParams: QueryParam[] = [{ key: 'watermarkId', value: watermarkId }]; + return this.getAll(`${this._defaultModelPath}/used`, queryParams).pipe(map(result => result.value)); + } } diff --git a/apps/red-ui/src/assets/config/config.json b/apps/red-ui/src/assets/config/config.json index 0c71adeeb..62578148a 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://dev-04.iqser.cloud/redaction-gateway-v1", + "API_URL": "https://dev-08.iqser.cloud/redaction-gateway-v1", "APP_NAME": "RedactManager", "AUTO_READ_TIME": 3, "BACKEND_APP_VERSION": "4.4.40", @@ -11,7 +11,7 @@ "MAX_RETRIES_ON_SERVER_ERROR": 3, "OAUTH_CLIENT_ID": "redaction", "OAUTH_IDP_HINT": null, - "OAUTH_URL": "https://dev-04.iqser.cloud/auth/realms/redaction", + "OAUTH_URL": "https://dev-08.iqser.cloud/auth/realms/redaction", "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/de.json b/apps/red-ui/src/assets/i18n/de.json index fdeafd33b..aac659a62 100644 --- a/apps/red-ui/src/assets/i18n/de.json +++ b/apps/red-ui/src/assets/i18n/de.json @@ -31,8 +31,7 @@ "label": "Dossier-Vorlage", "placeholder": "" }, - "watermark": "Geschwärzte Dokumente mit Wasserzeichen versehen", - "watermark-preview": "Vorschau Dokumente mit Wasserzeichen versehen" + "watermark": "Geschwärzte Dokumente mit Wasserzeichen versehen" }, "header-new": "Dossier erstellen" }, @@ -1087,9 +1086,7 @@ "label": "Dossier-Name", "placeholder": "Namen eingeben" }, - "template": "Dossier-Vorlage", - "watermark": "Geschwärzte Dokumente mit Wasserzeichen versehen", - "watermark-preview": "Vorschau Dokumente mit Wasserzeichen versehen" + "template": "Dossier-Vorlage" } }, "header": "{dossierName} bearbeiten", @@ -2075,7 +2072,7 @@ "watermark-screen": { "action": { "change-success": "Das Wasserzeichen wurde aktualisiert!", - "delete-success": "Das Wasserzeichen wurde gelöscht.", + "created-success": "", "error": "Fehler beim Aktualisieren des Wasserzeichens", "revert": "Rückgängig machen", "save": "Änderungen speichern" @@ -2085,21 +2082,21 @@ "color-placeholder": "", "font-size": "Schriftgröße", "font-type": "Schriftart", + "name-label": "", + "name-placeholder": "", "opacity": "Deckkraft", "orientation": "Ausrichtung", + "text-label": "", "text-placeholder": "Text eingeben" - }, - "title": "Wasserzeichen" + } }, "watermarks-listing": { "action": { "delete": "", + "delete-success": "", "edit": "" }, "add-new": "", - "bulk-actions": { - "delete": "" - }, "no-data": { "title": "" }, @@ -2112,7 +2109,8 @@ }, "table-header": { "title": "" - } + }, + "watermark-is-used": "" }, "workflow": { "selection": { diff --git a/apps/red-ui/src/assets/i18n/en.json b/apps/red-ui/src/assets/i18n/en.json index 8d247ac06..dc8a98b29 100644 --- a/apps/red-ui/src/assets/i18n/en.json +++ b/apps/red-ui/src/assets/i18n/en.json @@ -31,8 +31,7 @@ "label": "Dossier Template", "placeholder": "Choose Dossier Template" }, - "watermark": "Watermark application on redacted documents", - "watermark-preview": "Watermark application on preview documents" + "watermark": "Watermark application on redacted documents" }, "header-new": "Create Dossier" }, @@ -1087,9 +1086,7 @@ "label": "Dossier Name", "placeholder": "Enter Name" }, - "template": "Dossier Template", - "watermark": "Watermark application on redacted documents", - "watermark-preview": "Watermark application on preview documents" + "template": "Dossier Template" } }, "header": "Edit {dossierName}", @@ -2074,8 +2071,8 @@ }, "watermark-screen": { "action": { - "change-success": "Watermark updated!", - "delete-success": "Watermark deleted.", + "change-success": "Watermark has been updated!", + "created-success": "Watermark has been created!", "error": "Failed to update Watermark", "revert": "Revert", "save": "Save Changes" @@ -2085,21 +2082,21 @@ "color-placeholder": "#", "font-size": "Font Size", "font-type": "Font Type", + "name-label": "Watermark Name", + "name-placeholder": "Choose a name to identify the watermark", "opacity": "Opacity", "orientation": "Orientation", + "text-label": "Watermark Text", "text-placeholder": "Enter text" - }, - "title": "Watermark" + } }, "watermarks-listing": { "action": { "delete": "Delete", + "delete-success": "Watermark has been deleted!", "edit": "Edit" }, "add-new": "New Watermark", - "bulk-actions": { - "delete": "Delete Selected Watermarks" - }, "no-data": { "title": "There are no watermarks yet." }, @@ -2112,7 +2109,8 @@ }, "table-header": { "title": "Watermarks" - } + }, + "watermark-is-used": "This watermark is already in use, are you sure you want to delete it?" }, "workflow": { "selection": { diff --git a/libs/common-ui b/libs/common-ui index f9e248833..d892f174f 160000 --- a/libs/common-ui +++ b/libs/common-ui @@ -1 +1 @@ -Subproject commit f9e24883381ddbf93df5074ec1c176973db44ed1 +Subproject commit d892f174f534fa794f30204ff9e855fc36dcfa8e diff --git a/libs/red-domain/src/lib/dossiers/dossier.model.ts b/libs/red-domain/src/lib/dossiers/dossier.model.ts index 63812d3fb..78edaac1d 100644 --- a/libs/red-domain/src/lib/dossiers/dossier.model.ts +++ b/libs/red-domain/src/lib/dossiers/dossier.model.ts @@ -19,8 +19,8 @@ export class Dossier implements IDossier, IListable { readonly hardDeletedTime?: string; readonly softDeletedTime?: string; readonly startDate?: string; - readonly watermarkEnabled: boolean; - readonly watermarkPreviewEnabled: boolean; + readonly watermarkId: number; + readonly previewWatermarkId: number; readonly archivedTime: string; readonly hasReviewers: boolean; readonly routerLink: string; @@ -43,8 +43,8 @@ export class Dossier implements IDossier, IListable { this.reportTemplateIds = dossier.reportTemplateIds; this.softDeletedTime = dossier.softDeletedTime; this.startDate = dossier.startDate; - this.watermarkEnabled = dossier.watermarkEnabled; - this.watermarkPreviewEnabled = dossier.watermarkPreviewEnabled; + this.watermarkId = dossier.watermarkId; + this.previewWatermarkId = dossier.previewWatermarkId; this.archivedTime = dossier.archivedTime; this.hasReviewers = !!this.memberIds && this.memberIds.length > 1; diff --git a/libs/red-domain/src/lib/dossiers/dossier.request.ts b/libs/red-domain/src/lib/dossiers/dossier.request.ts index d816d7571..d31e01c90 100644 --- a/libs/red-domain/src/lib/dossiers/dossier.request.ts +++ b/libs/red-domain/src/lib/dossiers/dossier.request.ts @@ -53,4 +53,12 @@ export interface IDossierRequest { * Whether a watermark will be applied to the preview files or not. */ readonly watermarkPreviewEnabled?: boolean; + /** + * Watermark id that will be applied to the redacted files. + */ + readonly watermarkId?: number; + /** + * Watermark id that will be applied to the preview files. + */ + readonly previewWatermarkId?: number; } diff --git a/libs/red-domain/src/lib/dossiers/dossier.ts b/libs/red-domain/src/lib/dossiers/dossier.ts index bd16731ac..04c081e33 100644 --- a/libs/red-domain/src/lib/dossiers/dossier.ts +++ b/libs/red-domain/src/lib/dossiers/dossier.ts @@ -17,7 +17,7 @@ export interface IDossier { readonly reportTemplateIds: List; readonly softDeletedTime?: string; readonly startDate?: string; - readonly watermarkEnabled: boolean; - readonly watermarkPreviewEnabled: boolean; + readonly watermarkId: number; + readonly previewWatermarkId: number; readonly archivedTime: string; } diff --git a/libs/red-domain/src/lib/watermarks/watermark.model.ts b/libs/red-domain/src/lib/watermarks/watermark.model.ts index 64279718f..7cc6100dc 100644 --- a/libs/red-domain/src/lib/watermarks/watermark.model.ts +++ b/libs/red-domain/src/lib/watermarks/watermark.model.ts @@ -1,30 +1,38 @@ -import { IWatermark } from './watermark'; +import { IWatermark, WatermarkOrientation } from './watermark'; import { IListable } from '@iqser/common-ui'; export class Watermark implements IListable, IWatermark { readonly id: string; readonly dossierTemplateId: string; + enabled: boolean; + readonly fontSize: number; + readonly fontType: string; + readonly hexColor: string; + readonly opacity: number; + readonly orientation: WatermarkOrientation; + readonly text: string; readonly name: string; - readonly enabled: boolean; - readonly createdBy: string; - readonly dateAdded: string; - readonly dateModified: string; + readonly createdBy?: string; + readonly dateAdded?: string; + readonly dateModified?: string; - constructor(watermarkConfig: IWatermark) { - this.id = watermarkConfig.id; - this.dossierTemplateId = watermarkConfig.dossierTemplateId; - this.name = watermarkConfig.name; - this.enabled = watermarkConfig.enabled; - this.createdBy = watermarkConfig.createdBy; - this.dateAdded = watermarkConfig.dateAdded || '2022-06-20T16:23:49.351Z'; - this.dateModified = watermarkConfig.dateModified || '2022-06-20T16:23:49.351Z'; + constructor(watermark: IWatermark) { + this.id = watermark.id; + this.dossierTemplateId = watermark.dossierTemplateId; + this.enabled = watermark.enabled; + this.fontSize = watermark.fontSize; + this.fontType = watermark.fontType; + this.hexColor = watermark.hexColor; + this.opacity = watermark.opacity; + this.orientation = watermark.orientation; + this.text = watermark.text; + this.name = watermark.name; + this.createdBy = watermark.createdBy; + this.dateAdded = watermark.dateAdded; + this.dateModified = watermark.dateModified; } get searchKey(): string { return this.name; } - - get routerLink(): string { - return `/main/admin/dossier-templates/${this.dossierTemplateId}/watermarks/${this.id}`; - } } diff --git a/libs/red-domain/src/lib/watermarks/watermark.ts b/libs/red-domain/src/lib/watermarks/watermark.ts index c2c72a6ac..deba31803 100644 --- a/libs/red-domain/src/lib/watermarks/watermark.ts +++ b/libs/red-domain/src/lib/watermarks/watermark.ts @@ -2,16 +2,16 @@ export interface IWatermark { id: string; dossierTemplateId: string; enabled: boolean; - fontSize?: number; - fontType?: string; - hexColor?: string; - opacity?: number; - orientation?: WatermarkOrientation; - text?: string; + fontSize: number; + fontType: string; + hexColor: string; + opacity: number; + orientation: WatermarkOrientation; + text: string; name: string; - createdBy: string; - dateAdded: string; - dateModified: string; + createdBy?: string; + dateAdded?: string; + dateModified?: string; } export const WatermarkOrientations = {