From 6fecb84aa53ec958e3960d58c2e15d3e891054d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adina=20=C8=9Aeudan?= Date: Tue, 1 Mar 2022 16:26:00 +0200 Subject: [PATCH] Edit dossier permissions --- .../edit-dossier-attributes.component.ts | 2 +- ...dit-dossier-deleted-documents.component.ts | 5 +- .../edit-dossier-dictionary.component.ts | 6 +- ...it-dossier-download-package.component.html | 40 ++++++---- ...it-dossier-download-package.component.scss | 5 ++ ...edit-dossier-download-package.component.ts | 20 ++++- .../edit-dossier-dialog.component.html | 15 ++-- .../edit-dossier-dialog.component.ts | 77 +++++++++++-------- .../edit-dossier-general-info.component.html | 12 --- .../edit-dossier-general-info.component.ts | 6 -- .../src/app/services/permissions.service.ts | 20 +++++ libs/common-ui | 2 +- 12 files changed, 128 insertions(+), 82 deletions(-) diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/attributes/edit-dossier-attributes.component.ts b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/attributes/edit-dossier-attributes.component.ts index 614d7d632..2e3d0b208 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/attributes/edit-dossier-attributes.component.ts +++ b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/attributes/edit-dossier-attributes.component.ts @@ -50,7 +50,7 @@ export class EditDossierAttributesComponent implements EditDossierSectionInterfa } get disabled(): boolean { - return !this._permissionsService.isOwner(this.dossier); + return !this._permissionsService.canHardDeleteOrRestore(this.dossier); } get valid(): boolean { diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/deleted-documents/edit-dossier-deleted-documents.component.ts b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/deleted-documents/edit-dossier-deleted-documents.component.ts index 6d1bb87d9..14c3693b9 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/deleted-documents/edit-dossier-deleted-documents.component.ts +++ b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/deleted-documents/edit-dossier-deleted-documents.component.ts @@ -164,7 +164,10 @@ export class EditDossierDeletedDocumentsComponent extends ListingComponent - - +
+ + +
+ +
+ + {{ 'edit-dossier-dialog.general-info.form.watermark' | translate }} + +
+ +
+ + {{ 'edit-dossier-dialog.general-info.form.watermark-preview' | translate }} + +
diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/download-package/edit-dossier-download-package.component.scss b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/download-package/edit-dossier-download-package.component.scss index e333d23f3..8cd99c520 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/download-package/edit-dossier-download-package.component.scss +++ b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/download-package/edit-dossier-download-package.component.scss @@ -10,4 +10,9 @@ redaction-select { form { height: calc(100% - 44px); display: flex; + flex-direction: column; + + > div { + display: flex; + } } diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/download-package/edit-dossier-download-package.component.ts b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/download-package/edit-dossier-download-package.component.ts index ba0ff34b2..424a7d01d 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/download-package/edit-dossier-download-package.component.ts +++ b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/download-package/edit-dossier-download-package.component.ts @@ -40,9 +40,17 @@ export class EditDossierDownloadPackageComponent implements OnInit, EditDossierS return this.form.controls['downloadFileTypes']?.value?.length || 0; } - get changed() { - if (this.form) { - for (const key of Object.keys(this.form.getRawValue())) { + get changed(): boolean { + if (!this.form) { + return false; + } + + for (const key of Object.keys(this.form.getRawValue())) { + if (key.startsWith('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; } @@ -86,6 +94,8 @@ export class EditDossierDownloadPackageComponent implements OnInit, EditDossierS ...this.dossier, downloadFileTypes: this.form.get('downloadFileTypes').value, reportTemplateIds: this.form.get('reportTemplateIds').value, + watermarkEnabled: this.form.get('watermarkEnabled').value, + watermarkPreviewEnabled: this.form.get('watermarkPreviewEnabled').value, }; const updatedDossier = await firstValueFrom(this._dossiersService.createOrUpdate(dossier)); @@ -96,6 +106,8 @@ export class EditDossierDownloadPackageComponent implements OnInit, EditDossierS this.form.reset({ downloadFileTypes: this.dossier.downloadFileTypes, reportTemplateIds: this.dossier.reportTemplateIds, + watermarkEnabled: this.dossier.watermarkEnabled, + watermarkPreviewEnabled: this.dossier.watermarkPreviewEnabled, }); } @@ -104,6 +116,8 @@ export class EditDossierDownloadPackageComponent implements OnInit, EditDossierS { reportTemplateIds: [this.dossier.reportTemplateIds], downloadFileTypes: [this.dossier.downloadFileTypes], + watermarkEnabled: [this.dossier.watermarkEnabled], + watermarkPreviewEnabled: [this.dossier.watermarkPreviewEnabled], }, { validators: control => diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-dialog.component.html b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-dialog.component.html index ad7414684..944a38375 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-dialog.component.html +++ b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-dialog.component.html @@ -5,13 +5,10 @@
-
+
+ {{ item.sideNavTitle || item.title | translate }} + +
@@ -53,9 +50,9 @@ (click)="save()" [disabled]="disabled || !valid || !changed" color="primary" + id="editDossierSaveButton" mat-flat-button type="button" - id="editDossierSaveButton" > {{ 'edit-dossier-dialog.actions.save' | translate }} @@ -72,5 +69,5 @@
- + diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-dialog.component.ts b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-dialog.component.ts index 345a6de54..2c2109d1f 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-dialog.component.ts +++ b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-dialog.component.ts @@ -26,7 +26,7 @@ type Section = 'dossierInfo' | 'downloadPackage' | 'dossierDictionary' | 'member providers: [dossiersServiceProvider], }) export class EditDossierDialogComponent extends BaseDialogComponent implements AfterViewInit { - readonly navItems: { key: Section; title?: string; sideNavTitle?: string }[]; + navItems: { key: Section; title?: string; sideNavTitle?: string; readonly?: boolean }[] = []; readonly iconButtonTypes = IconButtonTypes; activeNav: Section; readonly dossier$: Observable; @@ -56,38 +56,12 @@ export class EditDossierDialogComponent extends BaseDialogComponent implements A }, ) { super(_injector, _dialogRef, true); - this.navItems = [ - { - key: 'dossierInfo', - title: _('edit-dossier-dialog.nav-items.general-info'), - sideNavTitle: _('edit-dossier-dialog.nav-items.dossier-info'), - }, - { - key: 'downloadPackage', - title: _('edit-dossier-dialog.nav-items.choose-download'), - sideNavTitle: _('edit-dossier-dialog.nav-items.download-package'), - }, - { - key: 'dossierDictionary', - sideNavTitle: _('edit-dossier-dialog.nav-items.dictionary'), - title: _('edit-dossier-dialog.nav-items.dossier-dictionary'), - }, - { - key: 'members', - title: _('edit-dossier-dialog.nav-items.team-members'), - sideNavTitle: _('edit-dossier-dialog.nav-items.members'), - }, - { - key: 'dossierAttributes', - title: _('edit-dossier-dialog.nav-items.dossier-attributes'), - }, - { - key: 'deletedDocuments', - sideNavTitle: _('edit-dossier-dialog.nav-items.deleted-documents'), - }, - ]; - - this.dossier$ = this._activeDossiersService.getEntityChanged$(_data.dossierId).pipe(tap(dossier => (this._dossier = dossier))); + this.dossier$ = this._activeDossiersService.getEntityChanged$(_data.dossierId).pipe( + tap(dossier => { + this._dossier = dossier; + this._initializeNavItems(); + }), + ); this.activeNav = _data.section || 'dossierInfo'; } @@ -173,4 +147,41 @@ export class EditDossierDialogComponent extends BaseDialogComponent implements A this.activeNav = key; } } + + private _initializeNavItems(): void { + this.navItems = [ + { + key: 'dossierInfo', + title: _('edit-dossier-dialog.nav-items.general-info'), + sideNavTitle: _('edit-dossier-dialog.nav-items.dossier-info'), + readonly: !this._dossier.isActive, + }, + { + key: 'downloadPackage', + title: _('edit-dossier-dialog.nav-items.choose-download'), + sideNavTitle: _('edit-dossier-dialog.nav-items.download-package'), + }, + { + key: 'dossierDictionary', + sideNavTitle: _('edit-dossier-dialog.nav-items.dictionary'), + title: _('edit-dossier-dialog.nav-items.dossier-dictionary'), + readonly: !this._permissionsService.canEditDossierDictionary(this._dossier), + }, + { + key: 'members', + title: _('edit-dossier-dialog.nav-items.team-members'), + sideNavTitle: _('edit-dossier-dialog.nav-items.members'), + }, + { + key: 'dossierAttributes', + title: _('edit-dossier-dialog.nav-items.dossier-attributes'), + readonly: !this._permissionsService.canEditDossierAttributes(this._dossier), + }, + { + key: 'deletedDocuments', + sideNavTitle: _('edit-dossier-dialog.nav-items.deleted-documents'), + readonly: !this._permissionsService.canHardDeleteOrRestore(this._dossier), + }, + ]; + } } diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/general-info/edit-dossier-general-info.component.html b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/general-info/edit-dossier-general-info.component.html index 80428ebdb..56ddddad3 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/general-info/edit-dossier-general-info.component.html +++ b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/general-info/edit-dossier-general-info.component.html @@ -38,18 +38,6 @@ type="text" > - -
- - {{ 'edit-dossier-dialog.general-info.form.watermark' | translate }} - -
- -
- - {{ 'edit-dossier-dialog.general-info.form.watermark-preview' | translate }} - -
diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/general-info/edit-dossier-general-info.component.ts b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/general-info/edit-dossier-general-info.component.ts index 5f7925320..c169b60ed 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/general-info/edit-dossier-general-info.component.ts +++ b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/general-info/edit-dossier-general-info.component.ts @@ -105,8 +105,6 @@ export class EditDossierGeneralInfoComponent implements OnInit, EditDossierSecti dossierTemplateId: this.dossier.dossierTemplateId, dossierStatusId: this.dossier.dossierStatusId, description: this.dossier.description, - watermarkEnabled: this.dossier.watermarkEnabled, - watermarkPreviewEnabled: this.dossier.watermarkPreviewEnabled, dueDate: this.dossier.dueDate, }); } @@ -116,8 +114,6 @@ export class EditDossierGeneralInfoComponent implements OnInit, EditDossierSecti ...this.dossier, dossierName: this.form.get('dossierName').value, description: this.form.get('description').value, - watermarkEnabled: this.form.get('watermarkEnabled').value, - watermarkPreviewEnabled: this.form.get('watermarkPreviewEnabled').value, dueDate: this.hasDueDate ? this.form.get('dueDate').value : undefined, dossierTemplateId: this.form.get(DOSSIER_TEMPLATE_ID).value, dossierStatusId: this.form.get('dossierStatusId').value, @@ -171,8 +167,6 @@ export class EditDossierGeneralInfoComponent implements OnInit, EditDossierSecti dossierStatusId: [formFieldWithArchivedCheck(this.dossier.dossierStatusId)], description: [formFieldWithArchivedCheck(this.dossier.description)], dueDate: [formFieldWithArchivedCheck(this.dossier.dueDate)], - watermarkEnabled: [this.dossier.watermarkEnabled], - watermarkPreviewEnabled: [this.dossier.watermarkPreviewEnabled], }); } diff --git a/apps/red-ui/src/app/services/permissions.service.ts b/apps/red-ui/src/app/services/permissions.service.ts index 716dd44d5..ae6a1005c 100644 --- a/apps/red-ui/src/app/services/permissions.service.ts +++ b/apps/red-ui/src/app/services/permissions.service.ts @@ -75,6 +75,10 @@ export class PermissionsService { return files.reduce((acc, _file) => this._canDeleteFile(_file, dossier) && acc, true); } + canHardDeleteOrRestore(dossier: Dossier): boolean { + return dossier.isActive; + } + canOcrFile(file: File | File[]): boolean { const files = file instanceof File ? [file] : file; const dossier = this._getDossier(files[0]); @@ -170,6 +174,22 @@ export class PermissionsService { return user.isManager && !!dossier?.ownerId; } + canEditDossierDictionary(dossier: Dossier, user = this._userService.currentUser): boolean { + return dossier.isActive && this.canEditDossier(dossier, user); + } + + canEditDossierDictionaryDisplayName(dossier: Dossier, user = this._userService.currentUser): boolean { + return dossier.isActive && this.isOwner(dossier, user); + } + + canEditDossierDictionaryAddAction(dossier: Dossier, user = this._userService.currentUser): boolean { + return dossier.isActive && this.isOwner(dossier, user); + } + + canEditDossierAttributes(dossier: Dossier, user = this._userService.currentUser): boolean { + return dossier.isActive && this.isOwner(dossier, user); + } + isAdmin(user = this._userService.currentUser): boolean { return user.isAdmin; } diff --git a/libs/common-ui b/libs/common-ui index 242789330..d141625d5 160000 --- a/libs/common-ui +++ b/libs/common-ui @@ -1 +1 @@ -Subproject commit 242789330301767bc38fe62651ea777297159bb3 +Subproject commit d141625d5f3c8f0c57b10f3e341af26ac64402b9