From 0cc447814586c9931ada3b26bcbdf77243f0e2c1 Mon Sep 17 00:00:00 2001 From: Arlen Johnson Date: Mon, 26 Jun 2023 17:23:25 -0400 Subject: [PATCH] Provide a datepicker to date field filters such as DOB (CFM-295) --- app/templates/element/filter.php | 45 ++++++++++++++++++++++++-------- app/webroot/css/co-base.css | 3 +++ 2 files changed, 37 insertions(+), 11 deletions(-) diff --git a/app/templates/element/filter.php b/app/templates/element/filter.php index e9b17fc84..a3f5098cb 100644 --- a/app/templates/element/filter.php +++ b/app/templates/element/filter.php @@ -161,17 +161,38 @@ } if($options['type'] == 'date') { - // date picker - $formParams = [ - 'label' => !empty($columns[$key]['label']) ? $columns[$key]['label'] : $options['label'], - 'type' => 'text', // date inputs must be text for accessibility reasons for now. - 'value' => (!empty($query[$key]) ? $query[$key] : ''), - 'required' => false, - 'pattern' => '\d{4}-\d{2}-\d{2}', - 'placeholder' => 'YYYY-MM-DD', - 'title' => __d('field','datepicker.enterDate'), - 'class' => 'form-control datepicker' + // Date fields use a date picker (e.g. DOB) + // (Note that timestamps are handled specially. See below.) + $opts = []; + $opts['type'] = 'text'; // date inputs must be text for accessibility reasons for now. + $opts['required'] = false; + $opts['pattern'] = '\d{4}-\d{2}-\d{2}'; + $opts['placeholder'] = 'YYYY-MM-DD'; + $opts['title'] = __d('field','datepicker.enterDate'); + $opts['class'] = 'form-control datepicker'; + $opts['id'] = str_replace("_", "-", $key); + + $date = \Cake\I18n\FrozenTime::parseDate(date("Y-m-d"),'yyyy-MM-dd'); + if(!empty($query[$key])) { + $date = \Cake\I18n\FrozenTime::parseDate($query[$key],'yyyy-MM-dd'); + $opts['value'] = $date->i18nFormat("yyyy-MM-dd"); + } + $pickerDate = $date->i18nFormat("yyyy-MM-dd"); + $pickerFloor = $date->subYears(100)->i18nFormat("yyyy-MM-dd"); + + $date_args = [ + 'fieldName' => $key, + 'pickerDate' => $pickerDate, + 'pickerType' => \App\Lib\Enum\DateTypeEnum::DateOnly, + 'pickerFloor' => $pickerFloor ]; + // Create a text field to hold our date value. + print '
'; + print $this->Form->label($key, !empty($columns[$key]['label']) ? $columns[$key]['label'] : $options['label']); + print '
'; + print $this->Form->text($key, $opts) . $this->element('datePicker', $date_args); + print '
'; + print '
'; } else { // text input $formParams = [ @@ -196,7 +217,9 @@ $formParams['empty'] = true; } - print $this->Form->control($key, $formParams); + if($options['type'] != 'date') { + print $this->Form->control($key, $formParams); + } } ?> diff --git a/app/webroot/css/co-base.css b/app/webroot/css/co-base.css index 42df17a9c..73c6d8b99 100644 --- a/app/webroot/css/co-base.css +++ b/app/webroot/css/co-base.css @@ -894,6 +894,9 @@ ul.form-list li.alert-banner .co-alert { white-space: nowrap; margin-right: 0.5em; } +.top-filters-fields-date .duet-date__toggle { + margin-top: -3px; +} /* CO CONFIGURATION DASHBOARD */ .config-menu { list-style: none;