[FIX] web: add missing binary class to domain_selector/fields
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 <mcm@odoo.com> Signed-off-by: Ivan Elizaryev (iel) <iel@odoo.com>
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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();
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<templates xml:space="preserve">
|
||||
|
||||
<t t-name="web.DomainSelectorDefaultField" owl="1">
|
||||
<div class="o_ds_value_cell">
|
||||
<DomainSelectorFieldInput t-props="props" />
|
||||
</div>
|
||||
</t>
|
||||
|
||||
</templates>
|
||||
@@ -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: `
|
||||
<form>
|
||||
<sheet>
|
||||
<group>
|
||||
<field name="foo" widget="domain" options="{'model': 'partner'}" />
|
||||
</group>
|
||||
</sheet>
|
||||
</form>`,
|
||||
});
|
||||
|
||||
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";
|
||||
|
||||
Reference in New Issue
Block a user