From f59cea452141e1c16e777899e0ca1441bc75a374 Mon Sep 17 00:00:00 2001 From: Ivan Yelizariev Date: Thu, 15 Dec 2022 10:30:56 +0000 Subject: [PATCH] [FIX] web: add missing binary class to domain_selector/fields MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Domain widget has Components for every type of field to define list of available operators, initial value, etc. However, class and template for some fields is missing (e.g. for binary field). This commit adds support for such fields via Default class. More specific classes could be added later. STEPS * Activate Debug mode * Open menu *User-defined Filters* * Create a filter for `product.product` * Select any binary field in the domain widget opw-3084273 closes odoo/odoo#108631 X-original-commit: 3d0044046517690215625c92a6550fd6083fbd93 Signed-off-by: Michaƫl Mattiello Signed-off-by: Ivan Elizaryev (iel) --- .../domain_selector_leaf_node.js | 3 ++- .../fields/domain_selector_default_field.js | 23 +++++++++++++++++ .../fields/domain_selector_default_field.xml | 10 ++++++++ .../tests/views/fields/domain_field_tests.js | 25 +++++++++++++++++++ 4 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 addons/web/static/src/core/domain_selector/fields/domain_selector_default_field.js create mode 100644 addons/web/static/src/core/domain_selector/fields/domain_selector_default_field.xml 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 6f4bcf8e99c..f4f42e09280 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 @@ -4,6 +4,7 @@ import { useModelField } from "@web/core/model_field_selector/model_field_hook"; import { ModelFieldSelector } from "@web/core/model_field_selector/model_field_selector"; import { registry } from "@web/core/registry"; import { DomainSelectorControlPanel } from "./domain_selector_control_panel"; +import { DomainSelectorDefaultField } from "./fields/domain_selector_default_field"; import { Component, onWillStart, onWillUpdateProps, useRef } from "@odoo/owl"; @@ -46,7 +47,7 @@ export class DomainSelectorLeafNode extends Component { } getFieldComponent(type) { - return registry.category("domain_selector/fields").get(type, null); + return registry.category("domain_selector/fields").get(type, DomainSelectorDefaultField); } getOperatorInfo(operator) { const op = this.getFieldComponent(this.fieldInfo.type) diff --git a/addons/web/static/src/core/domain_selector/fields/domain_selector_default_field.js b/addons/web/static/src/core/domain_selector/fields/domain_selector_default_field.js new file mode 100644 index 00000000000..e3a2ba44c78 --- /dev/null +++ b/addons/web/static/src/core/domain_selector/fields/domain_selector_default_field.js @@ -0,0 +1,23 @@ +/** @odoo-module **/ + +import { registry } from "@web/core/registry"; +import { DomainSelectorFieldInput } from "./domain_selector_field_input"; + +import { Component } from "@odoo/owl"; + +const dso = registry.category("domain_selector/operator"); + +export class DomainSelectorDefaultField extends Component {} +Object.assign(DomainSelectorDefaultField, { + template: "web.DomainSelectorDefaultField", + components: { + DomainSelectorFieldInput, + }, + + onDidTypeChange() { + return { value: "" }; + }, + getOperators() { + return dso.getAll(); + }, +}); diff --git a/addons/web/static/src/core/domain_selector/fields/domain_selector_default_field.xml b/addons/web/static/src/core/domain_selector/fields/domain_selector_default_field.xml new file mode 100644 index 00000000000..42daa775401 --- /dev/null +++ b/addons/web/static/src/core/domain_selector/fields/domain_selector_default_field.xml @@ -0,0 +1,10 @@ + + + + +
+ +
+
+ +
diff --git a/addons/web/static/tests/views/fields/domain_field_tests.js b/addons/web/static/tests/views/fields/domain_field_tests.js index a7851e4ecd5..a3d906ff86b 100644 --- a/addons/web/static/tests/views/fields/domain_field_tests.js +++ b/addons/web/static/tests/views/fields/domain_field_tests.js @@ -32,6 +32,7 @@ QUnit.module("Fields", (hooks) => { }, bar: { string: "Bar", type: "boolean", default: true }, int_field: { string: "int_field", type: "integer" }, + image: { string: "Picture", type: "binary", searchable: true }, }, records: [ { @@ -196,6 +197,30 @@ QUnit.module("Fields", (hooks) => { ); }); + QUnit.test("using binary field in domain widget", async function (assert) { + assert.expect(0); + serverData.models.partner.records[0].foo = "[]"; + + await makeView({ + type: "form", + resModel: "partner", + resId: 1, + serverData, + arch: ` +
+ + + + + +
`, + }); + + await click(target, ".o_domain_add_first_node_button"); + await click(target, ".o_field_selector"); + await click(document.body.querySelector(".o_field_selector_item[data-name='image']")); + }); + QUnit.test("domain field is correctly reset on every view change", async function (assert) { serverData.models.partner.records[0].foo = `[("id", "=", 1)]`; serverData.models.partner.fields.bar.type = "char";