From 0c50be8130f647952cc2e6bd2a8e38064dfe8cf7 Mon Sep 17 00:00:00 2001 From: "Antoine Dupuis (andu)" Date: Wed, 1 Jun 2022 12:37:26 +0000 Subject: [PATCH] [FIX] website: fix conditional visibility based on file upload At the moment, if we try to make a website field conditionally visible based on whether a file has been uploaded, the field never appears even after uploading the file. Steps to reproduce issue - Create a new fresh DB with the website app. - Go to the Contact Us page, click on 'Edit'. - Add a File Upload field - Add another field, and set it to be conditionally visible on the File Upload field. Fix: - Create visibility comparators for files (fileSet / !fileSet), which check whether the `value.name` property is set / not set. opw-2856054 closes odoo/odoo#93756 X-original-commit: fec02f6cfc4abd68f0d6bd49285580510fe59465 Signed-off-by: Quentin Smetz (qsm) Signed-off-by: Antoine Dupuis (andu) --- addons/website/static/src/snippets/s_website_form/000.js | 4 ++++ addons/website/static/src/snippets/s_website_form/options.js | 4 ++++ addons/website/views/snippets/s_website_form.xml | 5 +++++ 3 files changed, 13 insertions(+) diff --git a/addons/website/static/src/snippets/s_website_form/000.js b/addons/website/static/src/snippets/s_website_form/000.js index 6bd6e54cfa7..3f61f6a04a7 100644 --- a/addons/website/static/src/snippets/s_website_form/000.js +++ b/addons/website/static/src/snippets/s_website_form/000.js @@ -545,6 +545,10 @@ odoo.define('website.s_website_form', function (require) { return value >= comparable; case 'less or equal': return value <= comparable; + case 'fileSet': + return value.name !== ''; + case '!fileSet': + return value.name === ''; } // Date & Date Time comparison requires formatting the value if (value.includes(':')) { 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 96dba522ec9..75318581a0a 100644 --- a/addons/website/static/src/snippets/s_website_form/options.js +++ b/addons/website/static/src/snippets/s_website_form/options.js @@ -1162,6 +1162,8 @@ options.registry.WebsiteFieldEditor = FieldEditor.extend({ return dependencyEl && dependencyEl.dataset.target && dependencyEl.dataset.target.includes('#datepicker'); case 'hidden_condition_datetime_opt': return dependencyEl && dependencyEl.dataset.target && dependencyEl.dataset.target.includes('#datetimepicker'); + case 'hidden_condition_file_opt': + return dependencyEl && dependencyEl.type === 'file'; case 'hidden_condition_opt': return this.$target[0].classList.contains('s_website_form_field_hidden_if'); case 'char_input_type_opt': @@ -1256,6 +1258,8 @@ options.registry.WebsiteFieldEditor = FieldEditor.extend({ } else if (['text', 'email', 'tel', 'url', 'search', 'password', 'number'].includes(dependencyEl.type) || dependencyEl.nodeName === 'TEXTAREA') { this.$target[0].dataset.visibilityComparator = 'equal'; + } else if (dependencyEl.type === 'file') { + this.$target[0].dataset.visibilityComparator = 'fileSet'; } } } diff --git a/addons/website/views/snippets/s_website_form.xml b/addons/website/views/snippets/s_website_form.xml index da436168824..1f532753454 100644 --- a/addons/website/views/snippets/s_website_form.xml +++ b/addons/website/views/snippets/s_website_form.xml @@ -179,6 +179,11 @@ Is between (included) Is not between (excluded) + + + Is set + Is not set +