From d8d2199eec2e9584f28988a8a1986ccef0a191f6 Mon Sep 17 00:00:00 2001 From: Benjamin Vray Date: Wed, 20 Mar 2024 08:39:16 +0100 Subject: [PATCH] [FIX] website: fix conditional visibility depending on date field MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Since commit [1], the "tempusdominus" date(time) picker has been replaced by the OWL date(time) picker. This change resulted in a modification of the HTML structure for date(time) input fields. Consequently, a bug emerged in the visibility options for fields reliant on a date(time) field. Specifically, the time condition selector failed to display the time conditions because they are rendered based on the HTML structure of the fields. Since the code was not adjusted to fit the new structure, this functionality stopped functioning. [1]:  https://github.com/odoo/odoo/commit/910897fc97d87b08f01627094ec8c159f5267628 task-3790809 Part-of: odoo/odoo#158288 --- .../src/snippets/s_website_form/options.js | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/addons/website/static/src/snippets/s_website_form/options.js b/addons/website/static/src/snippets/s_website_form/options.js index 9fe595b3212..8c4555dad53 100644 --- a/addons/website/static/src/snippets/s_website_form/options.js +++ b/addons/website/static/src/snippets/s_website_form/options.js @@ -1227,18 +1227,18 @@ options.registry.WebsiteFieldEditor = FieldEditor.extend({ const dependencyEl = this._getDependencyEl(); switch (widgetName) { case 'hidden_condition_time_comparators_opt': - return dependencyEl && dependencyEl.dataset.target; + return dependencyEl?.classList.contains("datetimepicker-input"); case 'hidden_condition_date_between': - return dependencyEl && dependencyEl.dataset.target && dependencyEl.dataset.target.includes('#datepicker') + return dependencyEl?.closest(".s_website_form_date") && ['between', '!between'].includes(this.$target[0].getAttribute('data-visibility-comparator')); case 'hidden_condition_datetime_between': - return dependencyEl && dependencyEl.dataset.target && dependencyEl.dataset.target.includes('#datetimepicker') + return dependencyEl?.closest(".s_website_form_datetime") && ['between', '!between'].includes(this.$target[0].dataset.visibilityComparator); case 'hidden_condition_additional_datetime': - return dependencyEl && dependencyEl.dataset.target && dependencyEl.dataset.target.includes('#datetimepicker') + return dependencyEl?.closest(".s_website_form_datetime") && !['set', '!set'].includes(this.$target[0].dataset.visibilityComparator); case 'hidden_condition_additional_date': - return dependencyEl && dependencyEl.dataset.target && dependencyEl.dataset.target.includes('#datepicker') + return dependencyEl && dependencyEl?.closest(".s_website_form_date") && !['set', '!set'].includes(this.$target[0].dataset.visibilityComparator); case 'hidden_condition_additional_text': if (!this.$target[0].classList.contains('s_website_form_field_hidden_if') || @@ -1248,7 +1248,7 @@ options.registry.WebsiteFieldEditor = FieldEditor.extend({ if (!dependencyEl) { return true; } - if (dependencyEl.dataset.target && dependencyEl.dataset.target.includes('#date')) { + if (dependencyEl?.classList.contains("datetimepicker-input")) { return false; } return (['text', 'email', 'tel', 'url', 'search', 'password', 'number'].includes(dependencyEl.type) @@ -1258,16 +1258,16 @@ options.registry.WebsiteFieldEditor = FieldEditor.extend({ case 'hidden_condition_num_opt': return dependencyEl && dependencyEl.type === 'number'; case 'hidden_condition_text_opt': - if (!this.$target[0].classList.contains('s_website_form_field_hidden_if') || (dependencyEl && - dependencyEl.dataset.target && dependencyEl.dataset.target.includes('#date'))) { + if (!this.$target[0].classList.contains('s_website_form_field_hidden_if') || + (dependencyEl?.classList.contains("datetimepicker-input"))) { return false; } return !dependencyEl || (['text', 'email', 'tel', 'url', 'search', 'password'].includes(dependencyEl.type) || dependencyEl.nodeName === 'TEXTAREA'); case 'hidden_condition_date_opt': - return dependencyEl && dependencyEl.dataset.target && dependencyEl.dataset.target.includes('#datepicker'); + return dependencyEl?.closest(".s_website_form_date"); case 'hidden_condition_datetime_opt': - return dependencyEl && dependencyEl.dataset.target && dependencyEl.dataset.target.includes('#datetimepicker'); + return dependencyEl?.closest(".s_website_form_datetime"); case 'hidden_condition_file_opt': return dependencyEl && dependencyEl.type === 'file'; case 'hidden_condition_opt':