diff --git a/apps/red-ui/src/app/modules/dossier/components/team-members-manager/team-members-manager.component.html b/apps/red-ui/src/app/modules/dossier/components/team-members-manager/team-members-manager.component.html index 2dce5dc6f..e48a1fc4a 100644 --- a/apps/red-ui/src/app/modules/dossier/components/team-members-manager/team-members-manager.component.html +++ b/apps/red-ui/src/app/modules/dossier/components/team-members-manager/team-members-manager.component.html @@ -1,4 +1,4 @@ -
+
{{ 'assign-dossier-owner.dialog.single-user' | translate }} diff --git a/apps/red-ui/src/app/modules/dossier/components/team-members-manager/team-members-manager.component.ts b/apps/red-ui/src/app/modules/dossier/components/team-members-manager/team-members-manager.component.ts index 1d672026c..88510f7ad 100644 --- a/apps/red-ui/src/app/modules/dossier/components/team-members-manager/team-members-manager.component.ts +++ b/apps/red-ui/src/app/modules/dossier/components/team-members-manager/team-members-manager.component.ts @@ -14,16 +14,15 @@ import { BehaviorSubject } from 'rxjs'; changeDetection: ChangeDetectionStrategy.OnPush, }) export class TeamMembersManagerComponent extends AutoUnsubscribe implements EditDossierSectionInterface, OnInit, OnDestroy { - teamForm: FormGroup; + form: FormGroup; searchQuery = ''; @Input() dossier: Dossier; - @Output() readonly save = new EventEmitter(); + @Output() readonly updateDossier = new EventEmitter(); readonly ownersSelectOptions = this.userService.managerUsers.map(m => m.id); membersSelectOptions: string[] = []; - changed = false; - selectedReviewers$ = new BehaviorSubject([]); + readonly selectedReviewers$ = new BehaviorSubject([]); constructor( readonly userService: UserService, @@ -34,30 +33,43 @@ export class TeamMembersManagerComponent extends AutoUnsubscribe implements Edit } get selectedOwnerId(): string { - return this.teamForm.get('owner').value; + return this.form.get('owner').value; } get selectedApproversList(): string[] { - return this.teamForm.get('approvers').value; + return this.form.get('approvers').value; } get selectedMembersList(): string[] { - return this.teamForm.get('members').value; + return this.form.get('members').value; } get valid(): boolean { - return this.teamForm.valid; + return this.form.valid; } get disabled() { return !this.userService.currentUser.isManager; } + get changed() { + if (this.dossier.ownerId !== this.selectedOwnerId) { + return true; + } + + const initialMembers = [...this.dossier.memberIds].sort(); + const currentMembers = this.selectedMembersList.sort(); + + const initialApprovers = [...this.dossier.approverIds].sort(); + const currentApprovers = this.selectedApproversList.sort(); + return this._compareLists(initialMembers, currentMembers) || this._compareLists(initialApprovers, currentApprovers); + } + isOwner(userId: string): boolean { return userId === this.selectedOwnerId; } - async saveMembers() { + async save() { const dossier = { ...this.dossier, memberIds: this.selectedMembersList, @@ -67,8 +79,7 @@ export class TeamMembersManagerComponent extends AutoUnsubscribe implements Edit const result = await this._dossiersService.createOrUpdate(dossier).toPromise(); if (result) { - this.save.emit(result); - this._updateChanged(); + this.updateDossier.emit(result); } } @@ -127,33 +138,18 @@ export class TeamMembersManagerComponent extends AutoUnsubscribe implements Edit .map(user => user.id); } - private _updateChanged() { - if (this.dossier.ownerId !== this.selectedOwnerId) { - this.changed = true; - return; - } - - const initialMembers = [...this.dossier.memberIds].sort(); - const currentMembers = this.selectedMembersList.sort(); - - const initialApprovers = [...this.dossier.approverIds].sort(); - const currentApprovers = this.selectedApproversList.sort(); - - this.changed = this._compareLists(initialMembers, currentMembers) || this._compareLists(initialApprovers, currentApprovers); - } - private _setSelectedReviewersList() { const selectedReviewers = this.selectedMembersList.filter(m => this.selectedApproversList.indexOf(m) === -1); this.selectedReviewers$.next(selectedReviewers); } private _loadData() { - this.teamForm = this._formBuilder.group({ + this.form = this._formBuilder.group({ owner: [this.dossier?.ownerId, Validators.required], approvers: [[...this.dossier?.approverIds]], members: [[...this.dossier?.memberIds]], }); - this.addSubscription = this.teamForm.get('owner').valueChanges.subscribe(owner => { + this.addSubscription = this.form.get('owner').valueChanges.subscribe(owner => { if (!this.isApprover(owner)) { this.toggleApprover(owner); } @@ -166,7 +162,6 @@ export class TeamMembersManagerComponent extends AutoUnsubscribe implements Edit private _updateLists() { this._setSelectedReviewersList(); this.setMembersSelectOptions(); - this._updateChanged(); } private _compareLists(l1: string[], l2: string[]) { 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 2428208ed..33432d956 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 @@ -1,4 +1,4 @@ -
+
{{ 'edit-dossier-dialog.header' | translate: { dossierName: dossier.dossierName } }}
@@ -13,6 +13,7 @@ class="item" >
+
@@ -20,37 +21,37 @@
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 552da1a36..b0faec9d2 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 @@ -13,6 +13,7 @@ import { EditDossierDeletedDocumentsComponent } from './deleted-documents/edit-d import { AppStateService } from '@state/app-state.service'; import { DossiersService } from '@services/entity-services/dossiers.service'; import { TeamMembersManagerComponent } from '../../components/team-members-manager/team-members-manager.component'; +import { Observable } from 'rxjs'; type Section = 'dossierInfo' | 'downloadPackage' | 'dossierDictionary' | 'members' | 'dossierAttributes' | 'deletedDocuments'; @@ -24,7 +25,7 @@ export class EditDossierDialogComponent { readonly navItems: { key: Section; title?: string; sideNavTitle?: string }[]; readonly iconButtonTypes = IconButtonTypes; activeNav: Section; - dossier: Dossier; + readonly dossier$: Observable; @ViewChild(EditDossierGeneralInfoComponent) generalInfoComponent: EditDossierGeneralInfoComponent; @ViewChild(EditDossierDownloadPackageComponent) downloadPackageComponent: EditDossierDownloadPackageComponent; @@ -77,7 +78,7 @@ export class EditDossierDialogComponent { }, ]; - this.dossier = this._dossiersService.find(_data.dossierId); + this.dossier$ = this._dossiersService.getEntityChanged$(_data.dossierId); this.activeNav = _data.section || 'dossierInfo'; } @@ -108,10 +109,8 @@ export class EditDossierDialogComponent { return !['deletedDocuments'].includes(this.activeNav); } - updatedDossier() { - this._toaster.success(_('edit-dossier-dialog.change-successful'), { params: { dossierName: this.dossier.dossierName } }); - this.dossier = this._dossiersService.find(this.dossier.id); - this._changeRef.markForCheck(); + updatedDossier(dossier: Dossier) { + this._toaster.success(_('edit-dossier-dialog.change-successful'), { params: { dossierName: dossier.dossierName } }); this.afterSave(); } diff --git a/apps/red-ui/src/app/services/entity-services/dossiers.service.ts b/apps/red-ui/src/app/services/entity-services/dossiers.service.ts index 95016a254..7fa19a0b8 100644 --- a/apps/red-ui/src/app/services/entity-services/dossiers.service.ts +++ b/apps/red-ui/src/app/services/entity-services/dossiers.service.ts @@ -75,6 +75,7 @@ export class DossiersService extends EntitiesService { } catch (e) { dossier.type = null; } + this.replace(dossier); } @Validate()