From c1b241dc299392842f6c5b4edae415867f5b6cd2 Mon Sep 17 00:00:00 2001
From: Giuseppe Digilio <giuseppe.digilio@4science.it>
Date: Thu, 22 Aug 2019 11:29:31 +0200
Subject: [PATCH] Fixed issue with lookup field which updated model on input
 event

---
 .../lookup/dynamic-lookup.component.html      | 10 ++++----
 .../lookup/dynamic-lookup.component.spec.ts   |  4 ++--
 .../models/lookup/dynamic-lookup.component.ts | 23 +++++++++++--------
 3 files changed, 20 insertions(+), 17 deletions(-)

diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/lookup/dynamic-lookup.component.html b/src/app/shared/form/builder/ds-dynamic-form-ui/models/lookup/dynamic-lookup.component.html
index cb2d1fe217..3cfb5980c6 100644
--- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/lookup/dynamic-lookup.component.html
+++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/lookup/dynamic-lookup.component.html
@@ -20,11 +20,10 @@
              [disabled]="isInputDisabled()"
              [placeholder]="model.placeholder | translate"
              [readonly]="model.readOnly"
-             (change)="$event.preventDefault()"
+             (change)="onChange($event)"
              (blur)="onBlurEvent($event); $event.stopPropagation(); sdRef.close();"
              (focus)="onFocusEvent($event); $event.stopPropagation(); sdRef.close();"
-             (click)="$event.stopPropagation(); $event.stopPropagation(); sdRef.close();"
-             (input)="onInput($event)">
+             (click)="$event.stopPropagation(); $event.stopPropagation(); sdRef.close();">
     </div>
 
     <!--Lookup-name, second field-->
@@ -40,11 +39,10 @@
               [disabled]="firstInputValue.length === 0 || isInputDisabled()"
               [placeholder]="model.secondPlaceholder | translate"
               [readonly]="model.readOnly"
-              (change)="$event.preventDefault()"
+              (change)="onChange($event)"
               (blur)="onBlurEvent($event); $event.stopPropagation(); sdRef.close();"
               (focus)="onFocusEvent($event); $event.stopPropagation(); sdRef.close();"
-              (click)="$event.stopPropagation(); sdRef.close();"
-              (input)="onInput($event)">
+              (click)="$event.stopPropagation(); sdRef.close();">
     </div>
     <div class="col-auto text-center">
       <button ngbDropdownAnchor
diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/lookup/dynamic-lookup.component.spec.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/lookup/dynamic-lookup.component.spec.ts
index 4a1d636adb..39c2c61efe 100644
--- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/lookup/dynamic-lookup.component.spec.ts
+++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/lookup/dynamic-lookup.component.spec.ts
@@ -289,7 +289,7 @@ describe('Dynamic Lookup component', () => {
           lookupComp.firstInputValue = 'test';
           lookupFixture.detectChanges();
 
-          lookupComp.onInput(new Event('input'));
+          lookupComp.onChange(new Event('change'));
           expect(lookupComp.model.value).toEqual(new FormFieldMetadataValueObject('test'))
 
         }));
@@ -299,7 +299,7 @@ describe('Dynamic Lookup component', () => {
           lookupComp.firstInputValue = 'test';
           lookupFixture.detectChanges();
 
-          lookupComp.onInput(new Event('input'));
+          lookupComp.onChange(new Event('change'));
           expect(lookupComp.model.value).not.toBeDefined();
 
         });
diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/lookup/dynamic-lookup.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/lookup/dynamic-lookup.component.ts
index 597f39b271..ac9046c12b 100644
--- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/lookup/dynamic-lookup.component.ts
+++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/lookup/dynamic-lookup.component.ts
@@ -123,6 +123,15 @@ export class DsDynamicLookupComponent extends DynamicFormControlComponent implem
     }
   }
 
+  protected updateModel(value) {
+    this.group.markAsDirty();
+    this.model.valueUpdates.next(value);
+    this.setInputsValue(value);
+    this.change.emit(value);
+    this.optionsList = null;
+    this.pageInfo = null;
+  }
+
   public formatItemForInput(item: any, field: number): string {
     if (isUndefined(item) || isNull(item)) {
       return '';
@@ -170,12 +179,13 @@ export class DsDynamicLookupComponent extends DynamicFormControlComponent implem
     this.focus.emit(event);
   }
 
-  public onInput(event) {
+  public onChange(event) {
+    event.preventDefault();
     if (!this.model.authorityOptions.closed) {
       if (isNotEmpty(this.getCurrentValue())) {
         const currentValue = new FormFieldMetadataValueObject(this.getCurrentValue());
         if (!this.editMode) {
-          this.onSelect(currentValue);
+          this.updateModel(currentValue);
         }
       } else {
         this.remove();
@@ -191,12 +201,7 @@ export class DsDynamicLookupComponent extends DynamicFormControlComponent implem
   }
 
   public onSelect(event) {
-    this.group.markAsDirty();
-    this.model.valueUpdates.next(event);
-    this.setInputsValue(event);
-    this.change.emit(event);
-    this.optionsList = null;
-    this.pageInfo = null;
+    this.updateModel(event);
   }
 
   public openChange(isOpened: boolean) {
@@ -219,7 +224,7 @@ export class DsDynamicLookupComponent extends DynamicFormControlComponent implem
         display: this.getCurrentValue(),
         value: this.getCurrentValue()
       });
-      this.onSelect(newValue);
+      this.updateModel(newValue);
     } else {
       this.remove();
     }
-- 
GitLab