From 2faf0ac64d7e785190c3b3144bba4c4d882f8fed Mon Sep 17 00:00:00 2001 From: "Michael (mcm)" Date: Wed, 13 Jul 2022 06:18:36 +0000 Subject: [PATCH] [FIX] web: fallback for domain selector operator Before this commit, it happened that the domain selector couldn't find the operator linked to the field. This commit adds a fallback on the existing operators to find an operator that matches. for example the domain `[["name", "like", "M"]]` gave `Name ? "M"`, now it correctly gives `Name like "M"`. closes odoo/odoo#95891 Signed-off-by: Aaron Bohy (aab) --- .../domain_selector/domain_selector_leaf_node.js | 15 ++++++++++++++- .../domain_selector/domain_selector_operators.js | 1 + .../static/tests/core/domain_selector_tests.js | 12 ++++++++++++ 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/addons/web/static/src/core/domain_selector/domain_selector_leaf_node.js b/addons/web/static/src/core/domain_selector/domain_selector_leaf_node.js index 2a1a9d3bf9b..35c275a792e 100644 --- a/addons/web/static/src/core/domain_selector/domain_selector_leaf_node.js +++ b/addons/web/static/src/core/domain_selector/domain_selector_leaf_node.js @@ -24,7 +24,20 @@ export class DomainSelectorLeafNode extends Component { } get displayedOperator() { - const op = this.getOperatorInfo(this.props.node.operator); + let op = this.getOperatorInfo(this.props.node.operator); + if (op) { + return op.label; + } + op = registry + .category("domain_selector/operator") + .getAll() + .find((op) => + op.matches({ + field: this.fieldInfo, + operator: this.props.node.operator, + value: this.props.node.operands[1], + }) + ); return op ? op.label : "?"; } get isValueHidden() { diff --git a/addons/web/static/src/core/domain_selector/domain_selector_operators.js b/addons/web/static/src/core/domain_selector/domain_selector_operators.js index 54e35368c65..f2fe1934f71 100644 --- a/addons/web/static/src/core/domain_selector/domain_selector_operators.js +++ b/addons/web/static/src/core/domain_selector/domain_selector_operators.js @@ -84,6 +84,7 @@ dso.add("like", { label: _lt("like"), value: "like", onDidChange: onDidChange(() => ({ value: "" })), + matches: matchValue(), }); dso.add("not like", { category: "like", diff --git a/addons/web/static/tests/core/domain_selector_tests.js b/addons/web/static/tests/core/domain_selector_tests.js index cbbb2b125c7..9f0d00d1257 100644 --- a/addons/web/static/tests/core/domain_selector_tests.js +++ b/addons/web/static/tests/core/domain_selector_tests.js @@ -339,4 +339,16 @@ QUnit.module("Components", (hooks) => { "should still have a single domain node" ); }); + + QUnit.test("operator fallback", async (assert) => { + await mount(DomainSelector, target, { + env, + props: { + resModel: "partner", + value: "[['foo', 'like', 'kikou']]", + }, + }); + + assert.strictEqual(target.querySelector(".o_domain_leaf").textContent, `Foo like "kikou"`); + }); });