From 924a797a3b71eeca04582e0aab504282a68266db Mon Sep 17 00:00:00 2001 From: "Julien Carion (juca)" Date: Thu, 2 Nov 2023 14:50:54 +0100 Subject: [PATCH] [FIX] web: domain field: foldable invalid domain This commit fixes an issue with the domain field where a traceback would be launched when an invalid domain is received. It also changes how invalid domains are displayed in foldable domain fields so that only the content of the domain selector component is displayed in this case. closes odoo/odoo#140719 Signed-off-by: Mathieu Duckerts-Antoine (dam) --- .../src/views/fields/domain/domain_field.js | 2 +- .../src/views/fields/domain/domain_field.xml | 4 +-- .../tests/views/fields/domain_field_tests.js | 36 +++++++++++++++++++ 3 files changed, 39 insertions(+), 3 deletions(-) diff --git a/addons/web/static/src/views/fields/domain/domain_field.js b/addons/web/static/src/views/fields/domain/domain_field.js index adeb36b0f58..9d73903ad25 100644 --- a/addons/web/static/src/views/fields/domain/domain_field.js +++ b/addons/web/static/src/views/fields/domain/domain_field.js @@ -143,7 +143,7 @@ export class DomainField extends Component { throw new Error(`Invalid model: ${resModel}`); } - let promises; + let promises = []; const domain = this.getDomain(props); try { const tree = treeFromDomain(domain, { distributeNot: !this.env.debug }); diff --git a/addons/web/static/src/views/fields/domain/domain_field.xml b/addons/web/static/src/views/fields/domain/domain_field.xml index 7e208917a8d..047ac16de33 100644 --- a/addons/web/static/src/views/fields/domain/domain_field.xml +++ b/addons/web/static/src/views/fields/domain/domain_field.xml @@ -5,7 +5,7 @@
- +
@@ -40,7 +40,7 @@
- + { '[("id", "=", 1)]' ); }); + + QUnit.test( + "foldable domain field unfolds and hides caret when domain is invalid", + async function (assert) { + serverData.models.partner.records[0].foo = "["; + + await makeView({ + type: "form", + resModel: "partner", + resId: 1, + serverData, + arch: ` +
+ + + + + +
`, + }); + assert.strictEqual( + target.querySelector(".o_field_domain span").textContent, + " Invalid domain " + ); + assert.containsNone(target, ".fa-caret-down"); + assert.strictEqual( + target.querySelector(".o_domain_selector_row").textContent, + " This domain is not supported. Reset domain" + ); + await click(target, ".o_domain_selector_row button"); + assert.strictEqual( + target.querySelector(".o_field_domain span").textContent, + "Match all records" + ); + } + ); });