Merge "[CORD-1858] Avoid event duplication and skipping notification for parent models"
diff --git a/src/app/core/field/field.html b/src/app/core/field/field.html
index b3597fd..a91665d 100644
--- a/src/app/core/field/field.html
+++ b/src/app/core/field/field.html
@@ -15,7 +15,6 @@
 limitations under the License.
 -->
 
-
 <label ng-if="vm.field.type !== 'object' && vm.field.type !== 'array'">
     {{vm.field.label}}
     <span class="required" ng-if="vm.field.validators.required">*</span>
diff --git a/src/app/core/field/field.ts b/src/app/core/field/field.ts
index 89fdd76..ab5f1d2 100644
--- a/src/app/core/field/field.ts
+++ b/src/app/core/field/field.ts
@@ -57,7 +57,7 @@
     }
 
     // NOTE set default value (if any)
-    if (this.field.default && !angular.isDefined(this.ngModel)) {
+    if (angular.isDefined(this.field.default) && angular.isUndefined(this.ngModel)) {
       if (this.field.type === 'number') {
         this.ngModel = parseInt(this.field.default, 10);
       }
diff --git a/src/app/core/form/form.html b/src/app/core/form/form.html
index 072039d..d619fc7 100644
--- a/src/app/core/form/form.html
+++ b/src/app/core/form/form.html
@@ -15,8 +15,6 @@
 limitations under the License.
 -->
 
-
-<!--<pre>{{vm.config.inputs | json}}</pre>-->
 <form name="vm.{{vm.config.formName || 'form'}}" novalidate>
     <!--<div class="form-group" ng-repeat="(name, field) in vm.formField">-->
         <!--<xos-field name="name" field="field" ng-model="vm.ngModel[name]"></xos-field>-->
diff --git a/src/app/core/services/helpers/config.helpers.spec.ts b/src/app/core/services/helpers/config.helpers.spec.ts
index f06fc4f..7718a44 100644
--- a/src/app/core/services/helpers/config.helpers.spec.ts
+++ b/src/app/core/services/helpers/config.helpers.spec.ts
@@ -211,6 +211,7 @@
 
       expect(cols[4]).not.toBeDefined();
     });
+
   });
 
   describe('the modelToTableCfg method', () => {
@@ -245,6 +246,26 @@
       expect(inputs[2].validators.min).toBe(20);
       expect(inputs[2].validators.max).toBe(40);
     });
+
+    it('should convert boolean defaults to real booleans', () => {
+      const fields: IXosModelDefsField[] = [
+        {
+          type: 'boolean',
+          name: 'active',
+          default: '"True"',
+          validators: []
+        },
+        {
+          type: 'boolean',
+          name: 'disabled',
+          default: '"False"',
+          validators: []
+        },
+      ];
+      const form_fields = service.modelFieldToInputCfg(fields);
+      expect(form_fields[0].default).toBe(true);
+      expect(form_fields[1].default).toBe(false);
+    });
   });
 
   describe('the modelToFormCfg method', () => {
diff --git a/src/app/core/services/helpers/config.helpers.ts b/src/app/core/services/helpers/config.helpers.ts
index c177568..e4a0a70 100644
--- a/src/app/core/services/helpers/config.helpers.ts
+++ b/src/app/core/services/helpers/config.helpers.ts
@@ -257,7 +257,7 @@
         type: f.type,
         validators: this.formatValidators(f.validators),
         hint: f.hint,
-        default: f.default || null
+        default: this.formatDefaultValues(f.default)
       };
 
       // NOTE populate drop-downs based on relation
@@ -277,6 +277,7 @@
   }
 
   public modelToFormCfg(model: IXosModeldef): IXosFormCfg {
+
     const formCfg: IXosFormCfg = {
       formName: `${model.name}Form`,
       exclude: this.form_excluded_fields,
@@ -338,6 +339,21 @@
     return formCfg;
   }
 
+  private formatDefaultValues(val: any): any {
+
+    if (angular.isString(val)) {
+      const unquoted = val.split('"').join('').toLowerCase();
+      if (unquoted === 'true') {
+        return true;
+      }
+      else if (unquoted === 'false') {
+        return false;
+      }
+    }
+
+    return val || undefined;
+  }
+
   private formatValidators(validators: IXosModelDefsFieldValidators[]): IXosFormInputValidator {
     // convert validators as expressed from modelDefs,
     // to the object required by xosForm