[FIX] web: usable *_activity widget in many2many subview
Example of steps: - Install `web_studio` - add a `many2many` field from res.partner - create a record - add a line by selecting a partner In this case `_parseServerValue` will crash https://github.com/odoo/odoo/blob/29d55e44035b6e6c6aba6fa4a114d555a766b7c7/addons/web/static/src/legacy/js/views/abstract_model.js#L101-L111 Because `field.selection` is undefined this code is getting field from this line https://github.com/odoo/odoo/blob/d3ef5891e8e92636dd61b8f2b7186ad139e8b42a/addons/mail/static/src/web/fields/kanban_activity/kanban_activity.js#L14 Instead of specifying `selection: []` in the fieldDependencies this pr fixes this issue generally and prevents these kind of fixes https://github.com/odoo/odoo/pull/125052 opw-3671417 closes odoo/odoo#150445 X-original-commit: 139e107a58ff4be4f03a57df07806355cb7d6236 Signed-off-by: Lucas Perais (lpe) <lpe@odoo.com>
This commit is contained in:
@@ -65,13 +65,17 @@ export function addFieldDependencies(activeFields, fields, fieldDependencies = [
|
||||
activeFields[field.name] = makeActiveField(field);
|
||||
}
|
||||
if (!fields[field.name]) {
|
||||
fields[field.name] = omit(field, [
|
||||
const newField = omit(field, [
|
||||
"context",
|
||||
"invisible",
|
||||
"required",
|
||||
"readonly",
|
||||
"onChange",
|
||||
]);
|
||||
fields[field.name] = newField;
|
||||
if (newField.type === "selection" && !Array.isArray(newField.selection)) {
|
||||
newField.selection = [];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -765,6 +765,60 @@ QUnit.module("Views", (hooks) => {
|
||||
assert.containsOnce(target, ".modal .o_form_view .o_field_widget[name=p]");
|
||||
});
|
||||
|
||||
QUnit.test(
|
||||
"form with o2m having a selection field with fieldDependencies",
|
||||
async function (assert) {
|
||||
class MyField extends CharField {}
|
||||
fieldRegistry.add("my_widget", {
|
||||
component: MyField,
|
||||
fieldDependencies: [{ name: "selection", type: "selection" }],
|
||||
});
|
||||
|
||||
serverData.models.partner.fields.o2m = { type: "one2many", relation: "partner_type" };
|
||||
serverData.models.partner.records[1].o2m = [];
|
||||
serverData.views = {
|
||||
"partner_type,false,form": `<form><field name="display_name" /></form>`,
|
||||
};
|
||||
|
||||
serverData.models.partner_type.fields.selection = {
|
||||
type: "selection",
|
||||
selection: [
|
||||
["a", "A"],
|
||||
["b", "B"],
|
||||
],
|
||||
};
|
||||
serverData.models.partner_type.records = [
|
||||
{
|
||||
id: 1,
|
||||
display_name: "first partner_type",
|
||||
selection: false,
|
||||
},
|
||||
];
|
||||
|
||||
serverData.models.partner.records[1].o2m = [1];
|
||||
await makeView({
|
||||
type: "form",
|
||||
resModel: "partner",
|
||||
serverData,
|
||||
arch: `
|
||||
<form>
|
||||
<field name="o2m">
|
||||
<tree>
|
||||
<field name="display_name" widget="my_widget"/>
|
||||
</tree>
|
||||
</field>
|
||||
</form>`,
|
||||
resId: 2,
|
||||
});
|
||||
|
||||
assert.containsOnce(target, ".o_field_widget[name=o2m] .o_data_row");
|
||||
await click(
|
||||
target.querySelector(".o_field_widget[name=o2m] .o_field_x2many_list_row_add a")
|
||||
);
|
||||
assert.containsOnce(target, ".modal .o_form_view .o_field_widget[name=display_name]");
|
||||
}
|
||||
);
|
||||
|
||||
QUnit.test("fieldDependencies are readonly by default", async function (assert) {
|
||||
class MyField extends CharField {}
|
||||
fieldRegistry.add("my_widget", {
|
||||
|
||||
Reference in New Issue
Block a user