From d3551a626b2ca396e3430063feb41ab337239ab3 Mon Sep 17 00:00:00 2001 From: Alex ORLUC <alex.orluc@maarch.org> Date: Mon, 30 Dec 2019 10:45:44 +0100 Subject: [PATCH] FEAT #12636 TIME 0:40 load param filling with custom fields --- .../modal/contact-modal.component.html | 2 +- .../contact/modal/contact-modal.component.ts | 1 + .../page/form/contacts-form.component.ts | 100 ++++++++++-------- 3 files changed, 59 insertions(+), 44 deletions(-) diff --git a/src/frontend/app/administration/contact/modal/contact-modal.component.html b/src/frontend/app/administration/contact/modal/contact-modal.component.html index 86d0fcfe53e..93a4118256a 100644 --- a/src/frontend/app/administration/contact/modal/contact-modal.component.html +++ b/src/frontend/app/administration/contact/modal/contact-modal.component.html @@ -12,7 +12,7 @@ <app-contacts-list *ngIf="mode === 'read'" [contact]="contact"></app-contacts-list> </mat-dialog-content> <div mat-dialog-actions class="actions" *ngIf="canUpdate && mode === 'read'"> - <button mat-raised-button mat-button color="primary" + <button mat-raised-button *ngIf="contact.type === 'contact'" color="primary" (click)="mode = mode === 'read' ? 'update' : 'read'">{{lang.update}}</button> </div> </div> \ No newline at end of file diff --git a/src/frontend/app/administration/contact/modal/contact-modal.component.ts b/src/frontend/app/administration/contact/modal/contact-modal.component.ts index e218e8593d4..9bd4fb8af21 100644 --- a/src/frontend/app/administration/contact/modal/contact-modal.component.ts +++ b/src/frontend/app/administration/contact/modal/contact-modal.component.ts @@ -31,6 +31,7 @@ export class ContactModalComponent { this.creationMode = false; } else { this.creationMode = true; + this.mode = 'update'; } this.canUpdate = this.privilegeService.hasCurrentUserPrivilege('update_contacts'); } diff --git a/src/frontend/app/administration/contact/page/form/contacts-form.component.ts b/src/frontend/app/administration/contact/page/form/contacts-form.component.ts index 2250f51b373..9a8d1bd6c4c 100644 --- a/src/frontend/app/administration/contact/page/form/contacts-form.component.ts +++ b/src/frontend/app/administration/contact/page/form/contacts-form.component.ts @@ -239,15 +239,16 @@ export class ContactsFormComponent implements OnInit { this.creationMode = true; - this.http.get("../../rest/contactsCustomFields").pipe( - tap((data: any) => { - this.initCustomElementForm(data); - }), - exhaustMap(() => this.http.get("../../rest/contactsParameters")), + this.http.get("../../rest/contactsParameters").pipe( tap((data: any) => { this.fillingParameters = data.contactsFilling; this.initElemForm(data); + }), + exhaustMap(() => this.http.get("../../rest/contactsCustomFields")), + tap((data: any) => { + this.initCustomElementForm(data); this.initAutocompleteAddressBan(); + }), finalize(() => this.loading = false), catchError((err: any) => { @@ -262,14 +263,15 @@ export class ContactsFormComponent implements OnInit { element.display = false; }); - this.http.get("../../rest/contactsCustomFields").pipe( - tap((data: any) => { - this.initCustomElementForm(data); - }), - exhaustMap(() => this.http.get("../../rest/contactsParameters")), + this.http.get("../../rest/contactsParameters").pipe( tap((data: any) => { this.fillingParameters = data.contactsFilling; this.initElemForm(data); + + }), + exhaustMap(() => this.http.get("../../rest/contactsCustomFields")), + tap((data: any) => { + this.initCustomElementForm(data); this.initAutocompleteAddressBan(); }), exhaustMap(() => this.http.get("../../rest/contacts/" + this.contactId)), @@ -293,31 +295,49 @@ export class ContactsFormComponent implements OnInit { let valArr: ValidatorFn[] = []; data.contactsParameters.forEach((element: any) => { + let targetField: any = this.contactForm.filter(contact => contact.id === element.identifier)[0]; + valArr = []; - if ((element.mandatory || element.filling) && this.creationMode) { - this.contactForm.filter(contact => contact.id === element.identifier)[0].display = true; + if (targetField === undefined && element.identifier.split('_')[1] !== undefined) { + let field: any = {}; + + field = { + id: `customField_${element.identifier.split('_')[1]}`, + unit: 'complement', + label: null, + type: null, + control: new FormControl(), + required: false, + display: false, + values: [] + }; + this.contactForm.push(field); + + targetField = this.contactForm.filter(contact => contact.id === field.id)[0]; } + if (targetField !== undefined) { + if ((element.mandatory || element.filling) && this.creationMode) { + targetField.display = true; + } - if (element.filling) { - this.contactForm.filter(contact => contact.id === element.identifier)[0].filling = true; - } + if (element.filling) { + targetField.filling = true; + } - if (element.identifier === 'email') { - valArr.push(Validators.email); - } else if (element.identifier === 'phone') { - valArr.push(Validators.pattern(/\+?((|\ |\.|\(|\)|\-)?(\d)*)*\d$/)); - } + if (element.identifier === 'email') { + valArr.push(Validators.email); + } else if (element.identifier === 'phone') { + valArr.push(Validators.pattern(/\+?((|\ |\.|\(|\)|\-)?(\d)*)*\d$/)); + } - if (element.mandatory) { - this.contactForm.filter(contact => contact.id === element.identifier)[0].required = true; - valArr.push(Validators.required); - } + if (element.mandatory) { + targetField.required = true; + valArr.push(Validators.required); + } - if (this.contactForm.filter(contact => contact.id === element.identifier)[0] !== undefined) { - this.contactForm.filter(contact => contact.id === element.identifier)[0].control.setValidators(valArr); + targetField.control.setValidators(valArr); } - }); } @@ -328,23 +348,17 @@ export class ContactsFormComponent implements OnInit { data.customFields.forEach((element: any) => { valArr = []; + field = this.contactForm.filter(contact => contact.id === 'customField_' + element.id)[0]; - field = { - id: `customField_${element.id}`, - unit: 'complement', - label: element.label, - type: element.type, - control: new FormControl({ value: '', disabled: false }), - required: false, - display: false, - values: element.values.map((val: any) => { return { id: val, label: val } }) - }; - - if (element.type === 'integer') { - valArr.push(Validators.pattern(/^[+-]?([0-9]+([.][0-9]*)?|[.][0-9]+)$/)); - field.control.setValidators(valArr); + if (field !== undefined) { + field.label = element.label; + field.type = element.type; + + if (element.type === 'integer') { + valArr.push(Validators.pattern(/^[+-]?([0-9]+([.][0-9]*)?|[.][0-9]+)$/)); + field.control.setValidators(valArr); + } } - this.contactForm.push(field); }); } @@ -418,7 +432,7 @@ export class ContactsFormComponent implements OnInit { createContact() { this.http.post("../../rest/contacts", this.formatContact()).pipe( - tap((data:any) => { + tap((data: any) => { this.onSubmitEvent.emit(data.id); this.notify.success(this.lang.contactAdded); }), -- GitLab