From 3db3a6a1c4b972888fa8441dc63c729662dc8426 Mon Sep 17 00:00:00 2001 From: Valentin Date: Sun, 6 Feb 2022 18:39:05 +0200 Subject: [PATCH 1/2] updated edit dossier modal to be in read-only mode when there is not owner set --- ...edit-dossier-download-package.component.ts | 2 +- .../edit-dossier-dialog.component.ts | 16 +++--- .../edit-dossier-team.component.html | 52 ++++++++++--------- .../edit-dossier-team.component.ts | 9 ++-- .../edit-dossier-general-info.component.html | 2 +- .../edit-dossier-general-info.component.ts | 2 +- .../src/app/services/permissions.service.ts | 4 +- 7 files changed, 49 insertions(+), 38 deletions(-) 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 7338c9590..6df62c19a 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 @@ -74,7 +74,7 @@ export class EditDossierDownloadPackageComponent implements OnInit, EditDossierS (await firstValueFrom(this._reportTemplateController.getAvailableReportTemplates(this.dossier.dossierTemplateId))) || []; this.form = this._getForm(); - if (!this._permissionsService.canEditDossier()) { + if (!this._permissionsService.canEditDossier(this.dossier)) { this.form.disable(); } } 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 486375e34..367f3e9a1 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 @@ -15,6 +15,7 @@ import { Observable } from 'rxjs'; import { tap } from 'rxjs/operators'; import { EditDossierTeamComponent } from './edit-dossier-team/edit-dossier-team.component'; import { PermissionsService } from '@services/permissions.service'; +import { UserService } from '@services/user.service'; type Section = 'dossierInfo' | 'downloadPackage' | 'dossierDictionary' | 'members' | 'dossierAttributes' | 'deletedDocuments'; @@ -34,7 +35,8 @@ export class EditDossierDialogComponent extends BaseDialogComponent { @ViewChild(EditDossierTeamComponent) membersComponent: EditDossierTeamComponent; @ViewChild(EditDossierAttributesComponent) attributesComponent: EditDossierAttributesComponent; @ViewChild(EditDossierDeletedDocumentsComponent) deletedDocumentsComponent: EditDossierDeletedDocumentsComponent; - private _dossierName: string; + + private _dossier: Dossier; constructor( private readonly _toaster: Toaster, @@ -42,6 +44,7 @@ export class EditDossierDialogComponent extends BaseDialogComponent { private readonly _changeRef: ChangeDetectorRef, private readonly _loadingService: LoadingService, private readonly _permissionsService: PermissionsService, + private readonly _userService: UserService, protected readonly _injector: Injector, protected readonly _dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) @@ -82,9 +85,7 @@ export class EditDossierDialogComponent extends BaseDialogComponent { }, ]; - this.dossier$ = this._dossiersService - .getEntityChanged$(_data.dossierId) - .pipe(tap(dossier => (this._dossierName = dossier.dossierName))); + this.dossier$ = this._dossiersService.getEntityChanged$(_data.dossierId).pipe(tap(dossier => (this._dossier = dossier))); this.activeNav = _data.section || 'dossierInfo'; } @@ -112,7 +113,10 @@ export class EditDossierDialogComponent extends BaseDialogComponent { } get showActionButtons(): boolean { - return !['deletedDocuments'].includes(this.activeNav) && this._permissionsService.canEditDossier(); + return ( + (['members'].includes(this.activeNav) && this._userService.currentUser.isManager) || + (!['deletedDocuments'].includes(this.activeNav) && this._permissionsService.canEditDossier(this._dossier)) + ); } get changed(): boolean { @@ -133,7 +137,7 @@ export class EditDossierDialogComponent extends BaseDialogComponent { this._loadingService.stop(); if (result.success) { - this._toaster.success(_('edit-dossier-dialog.change-successful'), { params: { dossierName: this._dossierName } }); + this._toaster.success(_('edit-dossier-dialog.change-successful'), { params: { dossierName: this._dossier.dossierName } }); } if (result.success && options?.closeAfterSave) { diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-team/edit-dossier-team.component.html b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-team/edit-dossier-team.component.html index 5d2809aec..5d2053801 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-team/edit-dossier-team.component.html +++ b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-team/edit-dossier-team.component.html @@ -9,33 +9,37 @@ -
- -
- + +
+ +
- + +
+ +
+ +
{{ 'assign-dossier-owner.dialog.no-reviewers' | translate }}
-
{{ 'assign-dossier-owner.dialog.select-below' | translate }}
diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-team/edit-dossier-team.component.ts b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-team/edit-dossier-team.component.ts index 9f92db656..3b9acd23b 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-team/edit-dossier-team.component.ts +++ b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-team/edit-dossier-team.component.ts @@ -6,6 +6,7 @@ import { Dossier, IDossierRequest } from '@red/domain'; import { AutoUnsubscribe } from '@iqser/common-ui'; import { EditDossierSaveResult, EditDossierSectionInterface } from '../edit-dossier-section.interface'; import { BehaviorSubject, firstValueFrom } from 'rxjs'; +import { PermissionsService } from '@services/permissions.service'; @Component({ selector: 'redaction-edit-dossier-team', @@ -19,14 +20,16 @@ export class EditDossierTeamComponent extends AutoUnsubscribe implements EditDos @Input() dossier: Dossier; - readonly ownersSelectOptions = this.userService.managerUsers.map(m => m.id); membersSelectOptions: string[] = []; + + readonly ownersSelectOptions = this.userService.managerUsers.map(m => m.id); readonly selectedReviewers$ = new BehaviorSubject([]); constructor( readonly userService: UserService, private readonly _formBuilder: FormBuilder, private readonly _dossiersService: DossiersService, + private readonly _permissionsService: PermissionsService, ) { super(); } @@ -48,7 +51,7 @@ export class EditDossierTeamComponent extends AutoUnsubscribe implements EditDos } get disabled() { - return !this.userService.currentUser.isManager; + return !this.userService.currentUser.isManager || !this.form.get('owner').value; } get changed() { @@ -149,7 +152,7 @@ export class EditDossierTeamComponent extends AutoUnsubscribe implements EditDos owner: [ { value: this.dossier?.ownerId, - disabled: this.disabled, + disabled: !this.userService.currentUser.isManager, }, Validators.required, ], 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 aebea6535..0af613641 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 @@ -53,7 +53,7 @@ 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 4925acddb..55bc3065e 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 @@ -69,7 +69,7 @@ export class EditDossierGeneralInfoComponent implements OnInit, EditDossierSecti ngOnInit() { this._filterInvalidDossierTemplates(); this.form = this._getForm(); - if (!this.permissionsService.canEditDossier()) { + if (!this.permissionsService.canEditDossier(this.dossier)) { this.form.disable(); } this.hasDueDate = !!this.dossier.dueDate; diff --git a/apps/red-ui/src/app/services/permissions.service.ts b/apps/red-ui/src/app/services/permissions.service.ts index a69c5e6a7..4ad6f6d6b 100644 --- a/apps/red-ui/src/app/services/permissions.service.ts +++ b/apps/red-ui/src/app/services/permissions.service.ts @@ -123,8 +123,8 @@ export class PermissionsService { return dossier.ownerId === this._userService.currentUser.id; } - canEditDossier(user = this._userService.currentUser) { - return user.isManager; + canEditDossier(dossier: Dossier, user = this._userService.currentUser): boolean { + return user.isManager && !!dossier?.ownerId; } isAdmin(user = this._userService.currentUser): boolean { From 7a00abf8412e2e30427242411219379ca251bf4b Mon Sep 17 00:00:00 2001 From: Valentin Mihai Date: Mon, 7 Feb 2022 11:33:57 +0200 Subject: [PATCH 2/2] added missing owner hint when edit dossier dialog is opened and there is no owner set --- .../edit-dossier-dialog.component.ts | 10 ++++++++-- apps/red-ui/src/assets/i18n/de.json | 10 +--------- apps/red-ui/src/assets/i18n/en.json | 2 +- 3 files changed, 10 insertions(+), 12 deletions(-) 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 367f3e9a1..1b2cfceed 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 @@ -1,4 +1,4 @@ -import { ChangeDetectorRef, Component, Inject, Injector, ViewChild } from '@angular/core'; +import { AfterViewInit, ChangeDetectorRef, Component, Inject, Injector, ViewChild } from '@angular/core'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; import { Dossier } from '@red/domain'; import { EditDossierGeneralInfoComponent } from './general-info/edit-dossier-general-info.component'; @@ -23,7 +23,7 @@ type Section = 'dossierInfo' | 'downloadPackage' | 'dossierDictionary' | 'member templateUrl: './edit-dossier-dialog.component.html', styleUrls: ['./edit-dossier-dialog.component.scss'], }) -export class EditDossierDialogComponent extends BaseDialogComponent { +export class EditDossierDialogComponent extends BaseDialogComponent implements AfterViewInit { readonly navItems: { key: Section; title?: string; sideNavTitle?: string }[]; readonly iconButtonTypes = IconButtonTypes; activeNav: Section; @@ -89,6 +89,12 @@ export class EditDossierDialogComponent extends BaseDialogComponent { this.activeNav = _data.section || 'dossierInfo'; } + ngAfterViewInit() { + if (!this._dossier.ownerId) { + this._toaster.error(_('edit-dossier-dialog.missing-owner')); + } + } + get activeNavItem(): { key: string; title?: string } { return this.navItems.find(item => item.key === this.activeNav); } diff --git a/apps/red-ui/src/assets/i18n/de.json b/apps/red-ui/src/assets/i18n/de.json index 33bd2c739..07269c939 100644 --- a/apps/red-ui/src/assets/i18n/de.json +++ b/apps/red-ui/src/assets/i18n/de.json @@ -146,15 +146,6 @@ "plural": "" }, "annotation-actions": { - "resize": { - "label": "Größe ändern" - }, - "resize-accept": { - "label": "Größe speichern" - }, - "resize-cancel": { - "label": "Größenänderung abbrechen" - }, "accept-recommendation": { "label": "Empfehlung annehmen" }, @@ -956,6 +947,7 @@ } }, "header": "{dossierName} bearbeiten", + "missing-owner": "", "nav-items": { "choose-download": "Wählen Sie die Dokumente für Ihr Download-Paket aus:", "deleted-documents": "Gelöschte Dokumente", diff --git a/apps/red-ui/src/assets/i18n/en.json b/apps/red-ui/src/assets/i18n/en.json index 5f60b49ec..2771a953f 100644 --- a/apps/red-ui/src/assets/i18n/en.json +++ b/apps/red-ui/src/assets/i18n/en.json @@ -296,7 +296,6 @@ "suggestion-add": "Suggested redaction", "suggestion-add-dictionary": "Suggested dictionary add", "suggestion-change-legal-basis": "Suggested change legal basis", - "suggestion-force-redaction": "Suggestion force redaction", "suggestion-force-redaction": "Suggestion force hint", "suggestion-recategorize-image": "Suggested recategorize image", "suggestion-remove": "Suggested local removal", @@ -967,6 +966,7 @@ } }, "header": "Edit {dossierName}", + "missing-owner": "You cannot edit the dossier because the owner is missing!", "nav-items": { "choose-download": "Choose what is included at download:", "deleted-documents": "Deleted Documents",