diff --git a/addons/web/static/src/model/relational_model/utils.js b/addons/web/static/src/model/relational_model/utils.js index ca558b7bb3e..e877d59ed6e 100644 --- a/addons/web/static/src/model/relational_model/utils.js +++ b/addons/web/static/src/model/relational_model/utils.js @@ -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 = []; + } } } } diff --git a/addons/web/static/tests/views/form/form_view_tests.js b/addons/web/static/tests/views/form/form_view_tests.js index e1ee2e1d752..5fae239f2a1 100644 --- a/addons/web/static/tests/views/form/form_view_tests.js +++ b/addons/web/static/tests/views/form/form_view_tests.js @@ -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": `
`, + }; + + 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: ` + `, + 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", {