APIv4 - Fix datePicker defaults
authorColeman Watts <coleman@civicrm.org>
Thu, 9 Dec 2021 17:34:57 +0000 (12:34 -0500)
committerColeman Watts <coleman@civicrm.org>
Thu, 9 Dec 2021 19:19:57 +0000 (14:19 -0500)
Ensures datepickers can select more than the current year (start and end date years were defaulting to 0)
Fixes dev/report#84

Civi/Api4/Service/Spec/SpecFormatter.php
js/crm.datepicker.js

index f57054230906afc718963054284ee69eeaf273bd..cee41e1ac1daea71ec7dabf8a88b3adf7f1717f4 100644 (file)
@@ -275,8 +275,8 @@ class SpecFormatter {
     if ($inputType == 'Date' && !empty($data['custom_group_id'])) {
       $inputAttrs['time'] = empty($data['time_format']) ? FALSE : ($data['time_format'] == 1 ? 12 : 24);
       $inputAttrs['date'] = $data['date_format'];
-      $inputAttrs['start_date_years'] = (int) $data['start_date_years'];
-      $inputAttrs['end_date_years'] = (int) $data['end_date_years'];
+      $inputAttrs['start_date_years'] = isset($data['start_date_years']) ? (int) $data['start_date_years'] : NULL;
+      $inputAttrs['end_date_years'] = isset($data['end_date_years']) ? (int) $data['end_date_years'] : NULL;
     }
     if ($inputType == 'Text' && !empty($data['maxlength'])) {
       $inputAttrs['maxlength'] = (int) $data['maxlength'];
index d630834c5c0b4c4efce4132d1b10fa8bb4611e07..ee628f118ef2bda5b39c9985c4bc35381004ff3e 100644 (file)
         CRM.utils.copyAttributes($dataField, $dateField, ['style', 'class', 'disabled', 'aria-label']);
         placeholder = settings.placeholder || $dataField.attr('placeholder');
         $dateField.addClass('crm-form-' + type);
-        if (!settings.minDate && !_.isUndefined(settings.start_date_years)) {
+        if (!settings.minDate && isInt(settings.start_date_years)) {
           settings.minDate = '' + (new Date().getFullYear() - settings.start_date_years) + '-01-01';
         }
-        if (!settings.maxDate && !_.isUndefined(settings.end_date_years)) {
+        if (!settings.maxDate && isInt(settings.end_date_years)) {
           settings.maxDate = '' + (new Date().getFullYear() + settings.end_date_years) + '-12-31';
         }
         if (hasDatepicker) {
        */
       function dateHasDay() {
         var lowerFormat = settings.dateFormat.toLowerCase();
-        if (lowerFormat.indexOf('d') < 0) {
-          return false;
-        }
-        return true;
+        return lowerFormat.indexOf('d') >= 0;
       }
       function updateInputFields(e, context) {
         var val = $dataField.val(),
       updateInputFields();
     });
   };
+
+  function isInt(value) {
+    if (isNaN(value)) {
+      return false;
+    }
+    var x = parseFloat(value);
+    return (x | 0) === x;
+  }
+
 })(jQuery, CRM, CRM._);