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";