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