diff --git a/addons/web/static/src/views/relational_model.js b/addons/web/static/src/views/relational_model.js index 4cec0b3aafd..143623c5d93 100644 --- a/addons/web/static/src/views/relational_model.js +++ b/addons/web/static/src/views/relational_model.js @@ -2542,9 +2542,15 @@ export class DynamicGroupList extends DynamicList { } } } - const previousGroup = this.groups.find( - (g) => !g.deleted && g.value === groupParams.value - ); + const groupValue = groupParams.__rawValue; + const previousGroup = this.groups.find((g) => { + if (g.deleted) { + return false; + } + return Array.isArray(g.__rawValue) && Array.isArray(groupValue) + ? g.__rawValue[0] === groupValue[0] + : g.__rawValue === groupValue; + }); const state = previousGroup ? previousGroup.exportState() : {}; return [groupParams, state]; }); diff --git a/addons/web/static/tests/views/kanban_view_tests.js b/addons/web/static/tests/views/kanban_view_tests.js index ccf8df834e5..f7021c309b2 100644 --- a/addons/web/static/tests/views/kanban_view_tests.js +++ b/addons/web/static/tests/views/kanban_view_tests.js @@ -10668,6 +10668,59 @@ QUnit.module("Views", (hooks) => { assert.containsN(target, ".o_kanban_record", 2); }); + QUnit.test( + "folded groups are kept when leaving and coming back (grouped by date)", + async (assert) => { + serverData.models.partner.fields.date.default = "2022-10-10"; + serverData.models.partner.records[0].date = "2022-05-10"; + serverData.views = { + "partner,false,kanban": ` + + + +
+ +
+
+
+
`, + "partner,false,search": "", + "partner,false,form": "
", + }; + const webClient = await createWebClient({ serverData }); + await doAction(webClient, { + name: "Partners", + res_model: "partner", + type: "ir.actions.act_window", + views: [ + [false, "kanban"], + [false, "form"], + ], + context: { + group_by: ["date"], + }, + }); + + assert.containsOnce(target, ".o_kanban_view"); + assert.containsN(target, ".o_kanban_group", 2); + assert.containsNone(target, ".o_column_folded"); + assert.containsN(target, ".o_kanban_record", 4); + + // fold the second column + const clickColumnAction = await toggleColumnActions(1); + await clickColumnAction("Fold"); + assert.containsOnce(target, ".o_column_folded"); + assert.containsOnce(target, ".o_kanban_record"); + + // open a record and go back + await click(target.querySelector(".o_kanban_record")); + assert.containsOnce(target, ".o_form_view"); + await click(target.querySelector(".breadcrumb-item a")); + assert.containsOnce(target, ".o_column_folded"); + assert.containsOnce(target, ".o_kanban_record"); + } + ); + QUnit.test("loaded records are kept when leaving and coming back", async (assert) => { serverData.views = { "partner,false,kanban": ` diff --git a/addons/web/static/tests/views/list_view_tests.js b/addons/web/static/tests/views/list_view_tests.js index e4e993f8fe2..8a9c52ae1bc 100644 --- a/addons/web/static/tests/views/list_view_tests.js +++ b/addons/web/static/tests/views/list_view_tests.js @@ -15890,6 +15890,49 @@ QUnit.module("Views", (hooks) => { assert.containsN(target, ".o_data_row", 3); }); + QUnit.test( + "open groups are kept when leaving and coming back (grouped by date)", + async (assert) => { + serverData.models.foo.fields.date.default = "2022-10-10"; + serverData.views = { + "foo,false,list": ``, + "foo,false,search": "", + "foo,false,form": "", + }; + const webClient = await createWebClient({ serverData }); + await doAction(webClient, { + name: "Partners", + res_model: "foo", + type: "ir.actions.act_window", + views: [ + [false, "list"], + [false, "form"], + ], + context: { + group_by: ["date"], + }, + }); + + assert.containsOnce(target, ".o_list_view"); + assert.containsN(target, ".o_group_header", 2); + assert.containsNone(target, ".o_group_open"); + assert.containsNone(target, ".o_data_row"); + + // unfold the second group + await click(target.querySelectorAll(".o_group_header")[1]); + assert.containsOnce(target, ".o_group_open"); + assert.containsN(target, ".o_data_row", 3); + + // open a record and go back + await click(target.querySelector(".o_data_cell")); + assert.containsOnce(target, ".o_form_view"); + await click(target.querySelector(".breadcrumb-item a")); + + assert.containsOnce(target, ".o_group_open"); + assert.containsN(target, ".o_data_row", 3); + } + ); + QUnit.test( "go to the next page after leaving and coming back to a grouped list view", async (assert) => {