From 0e641a906401f3ee859fc3143f0d73571e21888d Mon Sep 17 00:00:00 2001 From: leigh-mil Date: Mon, 23 Sep 2019 15:27:09 -0400 Subject: [PATCH] Create vue component to manage date range logic --- js/components/clin_fields.js | 2 + js/components/pop_date_range.js | 30 ++++ js/index.js | 2 + templates/components/clin_fields.html | 144 +---------------- templates/components/pop_date_range.html | 192 +++++++++++++++++++++++ 5 files changed, 229 insertions(+), 141 deletions(-) create mode 100644 js/components/pop_date_range.js create mode 100644 templates/components/pop_date_range.html diff --git a/js/components/clin_fields.js b/js/components/clin_fields.js index 0678e111..03102025 100644 --- a/js/components/clin_fields.js +++ b/js/components/clin_fields.js @@ -7,6 +7,7 @@ import Modal from '../mixins/modal' import optionsinput from './options_input' import textinput from './text_input' import clindollaramount from './clin_dollar_amount' +import PopDateRange from './pop_date_range' const TOTAL_AMOUNT = 'total_amount' const OBLIGATED_AMOUNT = 'obligated_amount' @@ -23,6 +24,7 @@ export default { optionsinput, textinput, clindollaramount, + PopDateRange, }, mixins: [Modal], diff --git a/js/components/pop_date_range.js b/js/components/pop_date_range.js new file mode 100644 index 00000000..97d4b097 --- /dev/null +++ b/js/components/pop_date_range.js @@ -0,0 +1,30 @@ +import DateSelector from './date_selector' + +export default { + name: 'pop-date-range', + + components: { + DateSelector, + }, + + props: { + initialMinStartDate: String, + initialMaxEndDate: String, + initialStartDate: String, + initialEndDate: String, + clinIndex: Number, + }, + + data: function() { + return { + startDate: this.initialStartDate, + endDate: this.initialEndDate, + startValid: false, + endValid: false, + minStartDate: this.initialMinStartDate, + maxStartDate: this.initialMaxEndDate, + minEndDate: this.initialMinStartDate, + maxEndDate: this.initialMaxEndDate, + } + }, +} diff --git a/js/index.js b/js/index.js index 0a3db6ba..575006d4 100644 --- a/js/index.js +++ b/js/index.js @@ -32,6 +32,7 @@ import NewEnvironment from './components/forms/new_environment' import SemiCollapsibleText from './components/semi_collapsible_text' import ToForm from './components/forms/to_form' import ClinFields from './components/clin_fields' +import PopDateRange from './components/pop_date_range' Vue.config.productionTip = false @@ -65,6 +66,7 @@ const app = new Vue({ SemiCollapsibleText, ToForm, ClinFields, + PopDateRange, }, mounted: function() { diff --git a/templates/components/clin_fields.html b/templates/components/clin_fields.html index 82e54a8e..b6db59f3 100644 --- a/templates/components/clin_fields.html +++ b/templates/components/clin_fields.html @@ -4,6 +4,7 @@ {% from 'components/icon.html' import Icon %} {% from 'components/options_input.html' import OptionsInput %} {% from 'components/text_input.html' import TextInput %} +{% from 'components/pop_date_range.html' import PopDateRange %} {% macro CLINFields(contract_start, contract_end, fields=None, index=None) %} {% set contract_end_formatted = contract_end | dateFromString(formatter="%Y-%m-%d") | formattedDate(formatter="%B %d, %Y") %} {% if fields %} -
-
- {{ DatePicker(fields.start_date, watch=True, optional=False) }} -
-
-
-
- {% call DatePicker(fields.end_date, watch=True, optional=False) %} - {{ Alert(message="task_orders.form.pop_end_alert" | translate({'end_date': contract_end_formatted})) }} - {% endcall %} -
-
+ {{ PopDateRange(start_field=fields.start_date, end_field=fields.end_date, watch=True, optional=False, mindate=contract_start | dateFromString(formatter="%Y-%m-%d"), maxdate=contract_end | dateFromString(formatter="%Y-%m-%d")) }} {% else %} -
-
- -
- -
- {{ 'task_orders.form.pop_start' | translate }} -
-

- {{ 'task_orders.form.pop_example' | translate }} -

-
- -
- - -
- - -
- -
- - -
- -
- - -
- -
- {{ Icon("ok", classes="icon--green") }} -
-
-
-
-
-
-
-
- -
- -
- {{ 'task_orders.form.pop_end' | translate }} -
- - {{ Alert(message="task_orders.form.pop_end_alert" | translate({'end_date': contract_end_formatted})) }} - -

- {{ 'task_orders.form.pop_example' | translate }} -

-
- -
- - -
- - -
- -
- - -
- -
- - -
- -
- {{ Icon("ok", classes="icon--green") }} -
-
-
-
-
-
+ {{ PopDateRange(watch=True, optional=False, mindate=contract_start | dateFromString(formatter="%Y-%m-%d"), maxdate=contract_end | dateFromString(formatter="%Y-%m-%d")) }} {% endif %}
diff --git a/templates/components/pop_date_range.html b/templates/components/pop_date_range.html new file mode 100644 index 00000000..a468b8fa --- /dev/null +++ b/templates/components/pop_date_range.html @@ -0,0 +1,192 @@ +{% from 'components/alert.html' import Alert %} +{% from 'components/icon.html' import Icon %} + +{% macro PopDateRange(start_field=None, end_field=None, mindate=mindate, maxdate=maxdate, watch=False, optional=True) %} + + +
+
+
+ + +
+ +
+ {{ "task_orders.form.pop_start" | translate }} +
+ +

+ {{ "task_orders.form.pop_example" | translate | safe }} +

+
+ +
+ + +
+ + +
+ +
+ + +
+ +
+ + + +
+ +
+
+ {{ Icon("ok", classes="icon--green") }} +
+
+ {{ Icon("alert", classes="icon--red")}} +
+
+
+
+
+
+
+ +
+
+ + +
+ +
+ {{ 'task_orders.form.pop_end' | translate }} +
+ + {{ Alert(message="task_orders.form.pop_end_alert" | translate({'end_date': contract_end_formatted})) }} + +

+ {{ 'task_orders.form.pop_example' | translate }} +

+
+ +
+ + +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+ {{ Icon("ok", classes="icon--green") }} +
+
+ {{ Icon("alert", classes="icon--red")}} +
+
+
+
+
+
+
+
+
+{% endmacro %}