Bert Leunis pushed to branch feature/CHANNELMGR-1391 at cms-community / 
hippo-addon-channel-manager


Commits:
f62023f1 by Bert Leunis at 2018-03-13T13:51:59+01:00
CHANNELMGR-1391 improve handling of date string value

Many thanks to the unit test!

- - - - -
4ea1adb6 by Bert Leunis at 2018-03-13T13:52:48+01:00
CHANNELMGR-1391 show validation per date field

Also in case of multiple fields, the error message appears per field instance.

- - - - -


5 changed files:

- 
content-service/src/main/java/org/onehippo/cms/channelmanager/content/documenttype/field/type/DateFieldType.java
- 
content-service/src/test/java/org/onehippo/cms/channelmanager/content/documenttype/field/type/DateFieldTypeTest.java
- 
frontend-ng/src/app/channel/sidePanels/rightSidePanel/contentEditor/fields/dateField/dateField.controller.js
- 
frontend-ng/src/app/channel/sidePanels/rightSidePanel/contentEditor/fields/dateField/dateField.html
- frontend-ng/src/i18n/en.json


Changes:

=====================================
content-service/src/main/java/org/onehippo/cms/channelmanager/content/documenttype/field/type/DateFieldType.java
=====================================
--- 
a/content-service/src/main/java/org/onehippo/cms/channelmanager/content/documenttype/field/type/DateFieldType.java
+++ 
b/content-service/src/main/java/org/onehippo/cms/channelmanager/content/documenttype/field/type/DateFieldType.java
@@ -61,7 +61,7 @@ public class DateFieldType extends PrimitiveFieldType {
         }
 
         final Calendar calendar = ISO8601.parse(value);
-        if (calendar != null && 
calendar.getTime().equals(PropertyValueProvider.EMPTY_DATE)) {
+        if (calendar == null || 
calendar.getTime().equals(PropertyValueProvider.EMPTY_DATE)) {
             return new FieldValue(StringUtils.EMPTY);
         }
 


=====================================
content-service/src/test/java/org/onehippo/cms/channelmanager/content/documenttype/field/type/DateFieldTypeTest.java
=====================================
--- 
a/content-service/src/test/java/org/onehippo/cms/channelmanager/content/documenttype/field/type/DateFieldTypeTest.java
+++ 
b/content-service/src/test/java/org/onehippo/cms/channelmanager/content/documenttype/field/type/DateFieldTypeTest.java
@@ -23,8 +23,6 @@ import java.util.List;
 import java.util.Optional;
 
 import javax.jcr.Node;
-import javax.jcr.PropertyType;
-import javax.jcr.Value;
 
 import org.apache.jackrabbit.value.ValueFactoryImpl;
 import org.hippoecm.repository.util.JcrUtils;
@@ -98,6 +96,34 @@ public class DateFieldTypeTest {
         assertThat(node.getProperty(PROPERTY).getString(), equalTo("" + 
newValue));
     }
 
+    @Test
+    public void testGetFieldValueForNullValue() {
+        final PrimitiveFieldType fieldType = new DateFieldType();
+        final FieldValue fieldValue = fieldType.getFieldValue(null);
+        assertThat(fieldValue.getValue(), equalTo(""));
+    }
+
+    @Test
+    public void testGetFieldValueForBlankValue() {
+        final PrimitiveFieldType fieldType = new DateFieldType();
+        final FieldValue fieldValue = fieldType.getFieldValue(" ");
+        assertThat(fieldValue.getValue(), equalTo(""));
+    }
+
+    @Test
+    public void testGetFieldValueForUnparsableValue() {
+        final PrimitiveFieldType fieldType = new DateFieldType();
+        final FieldValue fieldValue = fieldType.getFieldValue("doesnotparse");
+        assertThat(fieldValue.getValue(), equalTo(""));
+    }
+
+    @Test
+    public void testGetFieldValueForParsableValue() {
+        final PrimitiveFieldType fieldType = new DateFieldType();
+        final FieldValue fieldValue = 
fieldType.getFieldValue("2015-08-24T06:53:00.000Z");
+        assertThat(fieldValue.getValue(), equalTo("2015-08-24T06:53:00.000Z"));
+    }
+
     // TODO: what is considered an invalid value?
 /*
     @Test


=====================================
frontend-ng/src/app/channel/sidePanels/rightSidePanel/contentEditor/fields/dateField/dateField.controller.js
=====================================
--- 
a/frontend-ng/src/app/channel/sidePanels/rightSidePanel/contentEditor/fields/dateField/dateField.controller.js
+++ 
b/frontend-ng/src/app/channel/sidePanels/rightSidePanel/contentEditor/fields/dateField/dateField.controller.js
@@ -126,6 +126,12 @@ class DateFieldController {
     return index > 0 ? `${fieldName}[${index + 1}]` : fieldName;
   }
 
+  getFieldError(index) {
+    const fieldName = this.getFieldName(index);
+    const field = this.form[fieldName];
+    return field.$error;
+  }
+
   valueChanged() {
     this._updateFieldValues();
     this.FieldService.startDraftTimer(this.getFieldName(), this.fieldValues);


=====================================
frontend-ng/src/app/channel/sidePanels/rightSidePanel/contentEditor/fields/dateField/dateField.html
=====================================
--- 
a/frontend-ng/src/app/channel/sidePanels/rightSidePanel/contentEditor/fields/dateField/dateField.html
+++ 
b/frontend-ng/src/app/channel/sidePanels/rightSidePanel/contentEditor/fields/dateField/dateField.html
@@ -36,13 +36,17 @@
       </md-icon>
     </label>
 
-  <md-datepicker ng-model="dateValue.date"
-                 ng-change="$ctrl.valueChanged()"
-                 name="{{::$ctrl.getFieldName($index)}}"
-                 aria-label="{{::$ctrl.fieldType.displayName}}"
-                 ng-required="::$ctrl.fieldType.required"
-                 ng-focus="$ctrl.focusDateField($event)"
-                 ng-blur="$ctrl.blurDateField($event)"/>
+    <md-datepicker ng-model="dateValue.date"
+                   ng-change="$ctrl.valueChanged()"
+                   name="{{::$ctrl.getFieldName($index)}}"
+                   aria-label="{{::$ctrl.fieldType.displayName}}"
+                   ng-required="::$ctrl.fieldType.required"
+                   ng-focus="$ctrl.focusDateField($event)"
+                   ng-blur="$ctrl.blurDateField($event)"/>
+    <div ng-messages="$ctrl.getFieldError($index)">
+      <div ng-message="valid">{{ ::'ERROR_INVALID_DATE' | translate }}</div>
+      <div ng-message="required">{{ ::'ERROR_FIELD_REQUIRED' | 
translate:$ctrl.fieldType }}</div>
+    </div>
   </md-input-container>
 
   <md-input-container class="qa-field">


=====================================
frontend-ng/src/i18n/en.json
=====================================
--- a/frontend-ng/src/i18n/en.json
+++ b/frontend-ng/src/i18n/en.json
@@ -69,6 +69,7 @@
   "ERROR_FIELD_LONG_PATTERN": "Use numbers only",
   "ERROR_FIELD_REQUIRED": "{{displayName}} is a required field",
   "ERROR_INVALID_DATA": "Unable to save. The document contains invalid 
content",
+  "ERROR_INVALID_DATE": "Enter a valid date",
   "ERROR_INVALID_TEMPLATE_QUERY": "The template query '{{templateQuery}}' 
failed to execute",
   "ERROR_MENU_LOAD_FAILED": "Failed to load menu",
   "ERROR_MENU_LOCKED_BY": "Menu locked by '{{lockedBy}}'",



View it on GitLab: 
https://code.onehippo.org/cms-community/hippo-addon-channel-manager/compare/8d569627e313094ab5350ea311649e52222ad406...4ea1adb6f14f2564c1cabe86fb2f8a603f9a3e67

---
View it on GitLab: 
https://code.onehippo.org/cms-community/hippo-addon-channel-manager/compare/8d569627e313094ab5350ea311649e52222ad406...4ea1adb6f14f2564c1cabe86fb2f8a603f9a3e67
You're receiving this email because of your account on code.onehippo.org.
_______________________________________________
Hippocms-svn mailing list
Hippocms-svn@lists.onehippo.org
https://lists.onehippo.org/mailman/listinfo/hippocms-svn

Reply via email to