From bc98aad620a507865e468b094463534fe1da58e3 Mon Sep 17 00:00:00 2001 From: "Hugo Carlier (Huca)" Date: Wed, 6 Dec 2023 17:53:44 +0100 Subject: [PATCH] [IMP] web: add always_range option to daterange widget always_range option on the daterange widget allows to always display this widget as a range (two inputs separated by an arrow) even if both start/end date are empty and not required. task-3628069 Part-of: odoo/odoo#145167 --- .../views/fields/datetime/datetime_field.js | 24 +++++++-- .../views/fields/datetime/datetime_field.xml | 8 +-- .../views/fields/daterange_field_tests.js | 52 +++++++++++++++++++ 3 files changed, 76 insertions(+), 8 deletions(-) diff --git a/addons/web/static/src/views/fields/datetime/datetime_field.js b/addons/web/static/src/views/fields/datetime/datetime_field.js index b253bb518bf..42a2b470614 100644 --- a/addons/web/static/src/views/fields/datetime/datetime_field.js +++ b/addons/web/static/src/views/fields/datetime/datetime_field.js @@ -40,6 +40,7 @@ export class DateTimeField extends Component { endDateField: { type: String, optional: true }, maxDate: { type: String, optional: true }, minDate: { type: String, optional: true }, + alwaysRange: { type: Boolean, optional: true }, placeholder: { type: String, optional: true }, required: { type: Boolean, optional: true }, rounding: { type: Number, optional: true }, @@ -198,7 +199,11 @@ export class DateTimeField extends Component { if (!this.relatedField) { return false; } - return this.props.required || ensureArray(value).filter(Boolean).length === 2; + return ( + this.props.alwaysRange || + this.props.required || + ensureArray(value).filter(Boolean).length === 2 + ); } /** @@ -216,9 +221,10 @@ export class DateTimeField extends Component { */ shouldShowSeparator() { return ( - this.state.range && - (this.props.required || - (!this.isEmpty(this.startDateField) && !this.isEmpty(this.endDateField))) + this.props.alwaysRange || + (this.state.range && + (this.props.required || + (!this.isEmpty(this.startDateField) && !this.isEmpty(this.endDateField)))) ); } @@ -275,6 +281,7 @@ export const dateField = { endDateField: options[END_DATE_FIELD_OPTION], maxDate: options.max_date, minDate: options.min_date, + alwaysRange: archParseBoolean(options.always_range), placeholder: attrs.placeholder, required: dynamicInfo.required, rounding: options.rounding && parseInt(options.rounding, 10), @@ -342,6 +349,15 @@ export const dateRangeField = { type: "field", availableTypes: ["date", "datetime"], }, + { + label: _t("Always range"), + name: "always_range", + type: "boolean", + default: false, + help: _t( + `Set to true the full range input has to be display by default, even if empty.` + ), + }, ], supportedTypes: ["date", "datetime"], }; diff --git a/addons/web/static/src/views/fields/datetime/datetime_field.xml b/addons/web/static/src/views/fields/datetime/datetime_field.xml index 3dacd40d27f..b702fa41049 100644 --- a/addons/web/static/src/views/fields/datetime/datetime_field.xml +++ b/addons/web/static/src/views/fields/datetime/datetime_field.xml @@ -7,7 +7,7 @@ - +