diff --git a/addons/web/static/src/model/relational_model/relational_model.js b/addons/web/static/src/model/relational_model/relational_model.js index 707b7c999a2..9f411d7fb1f 100644 --- a/addons/web/static/src/model/relational_model/relational_model.js +++ b/addons/web/static/src/model/relational_model/relational_model.js @@ -410,7 +410,7 @@ export class RelationalModel extends Model { groupData[config.groupBy[0]], group.range ); - group.rawValue = groupData[config.groupBy]; + group.rawValue = groupData[config.groupBy[0]]; group.displayName = getDisplayNameFromGroupData( groupByField, groupData[config.groupBy[0]] @@ -429,6 +429,10 @@ export class RelationalModel extends Model { groupBy, }, }; + if (isRelational(config.fields[firstGroupByName]) && !group.value) { + // fold the "unset" group by default when grouped by many2one + config.groups[group.value].isFolded = true; + } if (groupRecordConfig) { config.groups[group.value].record = { ...groupRecordConfig, @@ -464,9 +468,6 @@ export class RelationalModel extends Model { } else { group.records = []; } - if (isRelational(config.fields[firstGroupByName]) && !group.value) { - groupConfig.isFolded = true; - } if (!groupConfig.isFolded) { nbOpenGroups++; if (nbOpenGroups > this.constructor.MAX_NUMBER_OPENED_GROUPS) { diff --git a/addons/web/static/tests/views/kanban/kanban_view_tests.js b/addons/web/static/tests/views/kanban/kanban_view_tests.js index bd45555b186..bb9b6eecea6 100644 --- a/addons/web/static/tests/views/kanban/kanban_view_tests.js +++ b/addons/web/static/tests/views/kanban/kanban_view_tests.js @@ -1738,6 +1738,50 @@ QUnit.module("Views", (hooks) => { assert.containsN(target, ".thisisdeletable", 4, "records should be deletable"); }); + QUnit.test("kanban grouped by many2one: false column is folded by default", async (assert) => { + serverData.models.partner.records[0].product_id = false; + + const kanban = await makeView({ + type: "kanban", + resModel: "partner", + serverData, + arch: ` + + + +
+
+
+
`, + groupBy: ["product_id"], + }); + + assert.containsN(target, ".o_kanban_group", 3); + assert.containsOnce(target, ".o_column_folded"); + assert.deepEqual(getNodesTextContent(target.querySelectorAll(".o_kanban_header")), [ + "None1", + "hello", + "xmo", + ]); + + await click(target.querySelector(".o_kanban_header")); + assert.containsNone(target, ".o_column_folded"); + assert.deepEqual(getNodesTextContent(target.querySelectorAll(".o_kanban_header")), [ + "None", + "hello", + "xmo", + ]); + + // reload -> None column should remain open + await reload(kanban, { groupBy: ["product_id"] }); + assert.containsNone(target, ".o_column_folded"); + assert.deepEqual(getNodesTextContent(target.querySelectorAll(".o_kanban_header")), [ + "None", + "hello", + "xmo", + ]); + }); + QUnit.test("quick created records in grouped kanban are on displayed top", async (assert) => { await makeView({ type: "kanban",