This commit is contained in:
Adina Țeudan 2021-08-15 20:56:04 +03:00
parent 12d2b40246
commit 60545315cd
9 changed files with 77 additions and 64 deletions

View File

@ -18,6 +18,10 @@ export class TeamMembersManagerComponent implements OnInit {
@Input() dossierWrapper: DossierWrapper;
@Output() save = new EventEmitter<Dossier>();
ownersSelectOptions: string[] = this.userService.managerUsers.map(m => m.id);
selectedReviewersList: string[] = [];
membersSelectOptions: string[] = [];
changed = false;
constructor(
readonly userService: UserService,
@ -34,44 +38,14 @@ export class TeamMembersManagerComponent implements OnInit {
return this.teamForm.get('approvers').value;
}
get selectedReviewersList(): string[] {
return this.selectedMembersList.filter(m => this.selectedApproversList.indexOf(m) === -1);
}
get selectedMembersList(): string[] {
return this.teamForm.get('members').value;
}
get ownersSelectOptions() {
return this.userService.managerUsers.map(m => m.id);
}
get membersSelectOptions() {
const searchQuery = this.searchForm.get('query').value;
return this.userService.eligibleUsers
.filter(user => this.userService.getNameForId(user.id).toLowerCase().includes(searchQuery.toLowerCase()))
.filter(user => this.selectedOwnerId !== user.id)
.map(user => user.id);
}
get valid(): boolean {
return this.teamForm.valid;
}
get changed(): boolean {
if (this.dossierWrapper.ownerId !== this.selectedOwnerId) {
return true;
}
const initialMembers = this.dossierWrapper.memberIds.sort();
const currentMembers = this.selectedMembersList.sort();
const initialApprovers = this.dossierWrapper.approverIds.sort();
const currentApprovers = this.selectedApproversList.sort();
return this._compareLists(initialMembers, currentMembers) || this._compareLists(initialApprovers, currentApprovers);
}
isOwner(userId: string): boolean {
return userId === this.selectedOwnerId;
}
@ -90,6 +64,7 @@ export class TeamMembersManagerComponent implements OnInit {
};
result = await this._appStateService.createOrUpdateDossier(dw);
this.save.emit(result);
this._updateChanged();
} catch (error) {
this._toaster.error('Failed: ' + error.error ? error.error.message : error);
}
@ -118,6 +93,8 @@ export class TeamMembersManagerComponent implements OnInit {
this.toggleSelected(userId);
}
}
this._updateLists();
}
toggleSelected(userId: string) {
@ -130,6 +107,7 @@ export class TeamMembersManagerComponent implements OnInit {
} else {
this.selectedMembersList.push(userId);
}
this._updateLists();
}
async ngOnInit() {
@ -140,6 +118,33 @@ export class TeamMembersManagerComponent implements OnInit {
this._loadData();
}
private _updateChanged() {
if (this.dossierWrapper.ownerId !== this.selectedOwnerId) {
this.changed = true;
return;
}
const initialMembers = this.dossierWrapper.memberIds.sort();
const currentMembers = this.selectedMembersList.sort();
const initialApprovers = this.dossierWrapper.approverIds.sort();
const currentApprovers = this.selectedApproversList.sort();
this.changed = this._compareLists(initialMembers, currentMembers) || this._compareLists(initialApprovers, currentApprovers);
}
private _setSelectedReviewersList() {
this.selectedReviewersList = this.selectedMembersList.filter(m => this.selectedApproversList.indexOf(m) === -1);
}
private _setMembersSelectOptions() {
const searchQuery = this.searchForm.get('query').value;
this.membersSelectOptions = this.userService.eligibleUsers
.filter(user => this.userService.getNameForId(user.id).toLowerCase().includes(searchQuery.toLowerCase()))
.filter(user => this.selectedOwnerId !== user.id)
.map(user => user.id);
}
private _loadData() {
this.teamForm = this._formBuilder.group({
owner: [this.dossierWrapper?.ownerId, Validators.required],
@ -154,7 +159,18 @@ export class TeamMembersManagerComponent implements OnInit {
this.toggleApprover(owner);
}
// If it is an approver, it is already a member, no need to check
this._updateLists();
});
this.searchForm.get('query').valueChanges.subscribe(() => {
this._setMembersSelectOptions();
});
this._updateLists();
}
private _updateLists() {
this._setSelectedReviewersList();
this._setMembersSelectOptions();
this._updateChanged();
}
private _compareLists(l1: string[], l2: string[]) {

View File

@ -8,6 +8,7 @@ import { DictionarySaveService } from '@shared/services/dictionary-save.service'
import { FormBuilder } from '@angular/forms';
import { CircleButtonTypes } from '@iqser/common-ui';
import { Dictionary, DictionaryControllerService } from '@redaction/red-ui-http';
import { LoadingService } from '@services/loading.service';
@Component({
selector: 'redaction-edit-dossier-dictionary',
@ -27,6 +28,7 @@ export class EditDossierDictionaryComponent implements EditDossierSectionInterfa
private readonly _dictionarySaveService: DictionarySaveService,
private readonly _permissionsService: PermissionsService,
private readonly _dictionaryControllerService: DictionaryControllerService,
private readonly _loadingService: LoadingService,
private readonly _formBuilder: FormBuilder
) {
this.canEdit = this._permissionsService.isDossierMember(this.dossierWrapper) || this._permissionsService.isAdmin();
@ -40,8 +42,10 @@ export class EditDossierDictionaryComponent implements EditDossierSectionInterfa
return !this.canEdit;
}
ngOnInit() {
console.log(this.dossierWrapper.type ? 'has' : "doesn't have");
async ngOnInit() {
this._loadingService.start();
await this._appStateService.updateDossierDictionary(this.dossierWrapper.dossierTemplateId, this.dossierWrapper.dossierId);
this._loadingService.stop();
}
async updateDisplayName(label: string) {

View File

@ -24,8 +24,6 @@ export class EditDossierDownloadPackageComponent implements OnInit, EditDossierS
@Input() dossierWrapper: DossierWrapper;
@Output() updateDossier = new EventEmitter<any>();
reportTemplateValueMapper = (reportTemplate: ReportTemplate) => reportTemplate.templateId;
constructor(
private readonly _appStateService: AppStateService,
private readonly _reportTemplateController: ReportTemplateControllerService,
@ -65,6 +63,8 @@ export class EditDossierDownloadPackageComponent implements OnInit, EditDossierS
return this.dossierForm?.invalid;
}
reportTemplateValueMapper = (reportTemplate: ReportTemplate) => reportTemplate.templateId;
async ngOnInit() {
this.availableReportTypes =
(await this._reportTemplateController.getAvailableReportTemplates(this.dossierWrapper.dossierTemplateId).toPromise()) || [];
@ -89,8 +89,8 @@ export class EditDossierDownloadPackageComponent implements OnInit, EditDossierS
downloadFileTypes: this.dossierForm.get('downloadFileTypes').value,
reportTemplateIds: this.dossierForm.get('reportTemplateIds').value
};
const updatedDossier = await this._appStateService.createOrUpdateDossier(dossier);
this.updateDossier.emit(updatedDossier);
await this._appStateService.createOrUpdateDossier(dossier);
this.updateDossier.emit();
}
revert() {

View File

@ -20,37 +20,37 @@
</div>
<redaction-edit-dossier-general-info
(updateDossier)="updatedDossier($event)"
(updateDossier)="updatedDossier()"
*ngIf="activeNav === 'dossierInfo'"
[dossierWrapper]="dossierWrapper"
></redaction-edit-dossier-general-info>
<redaction-edit-dossier-download-package
(updateDossier)="updatedDossier($event)"
(updateDossier)="updatedDossier()"
*ngIf="activeNav === 'downloadPackage'"
[dossierWrapper]="dossierWrapper"
></redaction-edit-dossier-download-package>
<redaction-edit-dossier-dictionary
(updateDossier)="updatedDossier($event)"
(updateDossier)="updatedDossier()"
*ngIf="activeNav === 'dossierDictionary'"
[dossierWrapper]="dossierWrapper"
></redaction-edit-dossier-dictionary>
<redaction-edit-dossier-team-members
(updateDossier)="updatedDossier($event)"
(updateDossier)="updatedDossier()"
*ngIf="activeNav === 'members'"
[dossierWrapper]="dossierWrapper"
></redaction-edit-dossier-team-members>
<redaction-edit-dossier-attributes
(updateDossier)="updatedDossier($event)"
(updateDossier)="updatedDossier()"
*ngIf="activeNav === 'dossierAttributes'"
[dossierWrapper]="dossierWrapper"
></redaction-edit-dossier-attributes>
<redaction-edit-dossier-deleted-documents
(updateDossier)="updatedDossier($event)"
(updateDossier)="updatedDossier()"
*ngIf="activeNav === 'deletedDocuments'"
[dossierWrapper]="dossierWrapper"
></redaction-edit-dossier-deleted-documents>

View File

@ -11,6 +11,7 @@ import { EditDossierAttributesComponent } from './attributes/edit-dossier-attrib
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
import { EditDossierDeletedDocumentsComponent } from './deleted-documents/edit-dossier-deleted-documents.component';
import { AppStateService } from '@state/app-state.service';
type Section = 'dossierInfo' | 'downloadPackage' | 'dossierDictionary' | 'members' | 'dossierAttributes' | 'deletedDocuments';
@ -32,6 +33,7 @@ export class EditDossierDialogComponent {
constructor(
private readonly _toaster: Toaster,
private readonly _appStateService: AppStateService,
private readonly _changeRef: ChangeDetectorRef,
@Inject(MAT_DIALOG_DATA)
private readonly _data: {
@ -102,15 +104,10 @@ export class EditDossierDialogComponent {
return !['deletedDocuments'].includes(this.activeNav);
}
updatedDossier(updatedDossier: DossierWrapper) {
updatedDossier() {
this._toaster.success(_('edit-dossier-dialog.change-successful'));
if (updatedDossier) {
this.dossierWrapper = updatedDossier;
}
this.dossierWrapper = this._appStateService.getDossierById(this.dossierWrapper.dossierId);
this._changeRef.detectChanges();
this.afterSave();
}

View File

@ -101,8 +101,8 @@ export class EditDossierGeneralInfoComponent implements OnInit, EditDossierSecti
dueDate: this.hasDueDate ? this.dossierForm.get('dueDate').value : undefined,
dossierTemplateId: this.dossierForm.get('dossierTemplateId').value
};
const updatedDossier = await this._appStateService.createOrUpdateDossier(dossier);
if (updatedDossier) this.updateDossier.emit(updatedDossier);
await this._appStateService.createOrUpdateDossier(dossier);
this.updateDossier.emit();
}
async deleteDossier() {

View File

@ -1 +1 @@
<redaction-team-members-manager (save)="updatedDossier($event)" [dossierWrapper]="dossierWrapper"></redaction-team-members-manager>
<redaction-team-members-manager (save)="updateDossier.emit()" [dossierWrapper]="dossierWrapper"></redaction-team-members-manager>

View File

@ -32,10 +32,6 @@ export class EditDossierTeamMembersComponent implements EditDossierSectionInterf
await this.managerComponent.saveMembers();
}
updatedDossier($event) {
this.updateDossier.emit($event);
}
revert() {
this.managerComponent.revert();
}

View File

@ -295,33 +295,33 @@ export class AppStateService {
async activateFile(dossierId: string, fileId: string) {
if (this.activeDossierId === dossierId && this.activeFileId === fileId) return;
this.activateDossier(dossierId);
await this.activateDossier(dossierId);
if (this.activeDossier) {
this._appState.activeFileId = fileId;
if (!this.activeFile) {
this._appState.activeFileId = null;
this._router.navigate(['/main/dossiers/' + dossierId]);
await this._router.navigate(['/main/dossiers/' + dossierId]);
}
}
this._updateLastActiveFileForDossier(dossierId, fileId);
await this._updateLastActiveFileForDossier(dossierId, fileId);
}
activateDossierTemplate(dossierTemplateId: string) {
async activateDossierTemplate(dossierTemplateId: string) {
this._appState.activeDossierTemplateId = dossierTemplateId;
this._appState.activeDictionaryType = null;
if (!this.activeDossierTemplate) {
this._appState.activeDossierTemplateId = null;
this._router.navigate(['/main/admin/dossier-templates']);
await this._router.navigate(['/main/admin/dossier-templates']);
}
}
activateDictionary(dictionaryType: string, dossierTemplateId: string) {
this.activateDossierTemplate(dossierTemplateId);
async activateDictionary(dictionaryType: string, dossierTemplateId: string) {
await this.activateDossierTemplate(dossierTemplateId);
if (this.activeDossierTemplate) {
this._appState.activeDictionaryType = dictionaryType;
if (!this.activeDictionary) {
this._appState.activeDictionaryType = null;
this._router.navigate(['/main/admin/dossier-templates/' + this.activeDossierTemplateId]);
await this._router.navigate(['/main/admin/dossier-templates/' + this.activeDossierTemplateId]);
}
}
}