fix team members assignment

This commit is contained in:
Dan Percic 2021-11-15 23:29:48 +02:00
parent 5e36bcc13b
commit 29f55d4608
5 changed files with 39 additions and 43 deletions

View File

@ -1,4 +1,4 @@
<form (submit)="saveMembers()" [formGroup]="teamForm">
<form (submit)="save()" [formGroup]="form">
<div class="iqser-input-group w-300">
<mat-form-field floatLabel="always">
<mat-label>{{ 'assign-dossier-owner.dialog.single-user' | translate }}</mat-label>

View File

@ -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<IDossier>();
@Output() readonly updateDossier = new EventEmitter<IDossier>();
readonly ownersSelectOptions = this.userService.managerUsers.map(m => m.id);
membersSelectOptions: string[] = [];
changed = false;
selectedReviewers$ = new BehaviorSubject<string[]>([]);
readonly selectedReviewers$ = new BehaviorSubject<string[]>([]);
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[]) {

View File

@ -1,4 +1,4 @@
<section class="dialog">
<section *ngIf="dossier$ | async as dossier" class="dialog">
<div class="dialog-header heading-l">
{{ 'edit-dossier-dialog.header' | translate: { dossierName: dossier.dossierName } }}
</div>
@ -13,6 +13,7 @@
class="item"
></div>
</iqser-side-nav>
<div>
<div [class.no-actions]="!showActionButtons" [class.no-padding]="noPaddingTab" class="content">
<div *ngIf="showHeading" class="heading">
@ -20,37 +21,37 @@
</div>
<redaction-edit-dossier-general-info
(updateDossier)="updatedDossier()"
(updateDossier)="updatedDossier(dossier)"
*ngIf="activeNav === 'dossierInfo'"
[dossier]="dossier"
></redaction-edit-dossier-general-info>
<redaction-edit-dossier-download-package
(updateDossier)="updatedDossier()"
(updateDossier)="updatedDossier(dossier)"
*ngIf="activeNav === 'downloadPackage'"
[dossier]="dossier"
></redaction-edit-dossier-download-package>
<redaction-edit-dossier-dictionary
(updateDossier)="updatedDossier()"
(updateDossier)="updatedDossier(dossier)"
*ngIf="activeNav === 'dossierDictionary'"
[dossier]="dossier"
></redaction-edit-dossier-dictionary>
<redaction-team-members-manager
(save)="updatedDossier()"
(updateDossier)="updatedDossier(dossier)"
*ngIf="activeNav === 'members'"
[dossier]="dossier"
></redaction-team-members-manager>
<redaction-edit-dossier-attributes
(updateDossier)="updatedDossier()"
(updateDossier)="updatedDossier(dossier)"
*ngIf="activeNav === 'dossierAttributes'"
[dossier]="dossier"
></redaction-edit-dossier-attributes>
<redaction-edit-dossier-deleted-documents
(updateDossier)="updatedDossier()"
(updateDossier)="updatedDossier(dossier)"
*ngIf="activeNav === 'deletedDocuments'"
[dossier]="dossier"
></redaction-edit-dossier-deleted-documents>

View File

@ -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<Dossier>;
@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();
}

View File

@ -75,6 +75,7 @@ export class DossiersService extends EntitiesService<Dossier, IDossier> {
} catch (e) {
dossier.type = null;
}
this.replace(dossier);
}
@Validate()