fix team members assignment
This commit is contained in:
parent
5e36bcc13b
commit
29f55d4608
@ -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>
|
||||
|
||||
@ -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[]) {
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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();
|
||||
}
|
||||
|
||||
|
||||
@ -75,6 +75,7 @@ export class DossiersService extends EntitiesService<Dossier, IDossier> {
|
||||
} catch (e) {
|
||||
dossier.type = null;
|
||||
}
|
||||
this.replace(dossier);
|
||||
}
|
||||
|
||||
@Validate()
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user