diff --git a/addons/web/static/src/model/relational_model/dynamic_group_list.js b/addons/web/static/src/model/relational_model/dynamic_group_list.js index e53c585dc8a..4b3a85c0c15 100644 --- a/addons/web/static/src/model/relational_model/dynamic_group_list.js +++ b/addons/web/static/src/model/relational_model/dynamic_group_list.js @@ -249,11 +249,11 @@ export class DynamicGroupList extends DynamicList { async _deleteGroups(groups) { const shouldReload = groups.some((g) => g.count > 0); await this._unlinkGroups(groups); + const configGroups = { ...this.config.groups }; + for (const group of groups) { + delete configGroups[group.value]; + } if (shouldReload) { - const configGroups = { ...this.config.groups }; - for (const group of groups) { - delete configGroups[group.value]; - } await this.model._updateConfig( this.config, { groups: configGroups }, @@ -263,6 +263,7 @@ export class DynamicGroupList extends DynamicList { for (const group of groups) { this._removeGroup(group); } + this.model._updateConfig(this.config, { groups: configGroups }, { reload: false }); } } 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 914c8543514..194c5b49e37 100644 --- a/addons/web/static/tests/views/kanban/kanban_view_tests.js +++ b/addons/web/static/tests/views/kanban/kanban_view_tests.js @@ -6256,6 +6256,55 @@ QUnit.module("Views", (hooks) => { ); }); + QUnit.test("delete an empty column, then a column with records.", async (assert) => { + patchDialog((_cls, props) => props.confirm()); + let firstLoad = true; + + await makeView({ + type: "kanban", + resModel: "partner", + serverData, + arch: + '' + + '' + + '' + + '
' + + "
" + + "
", + groupBy: ["product_id"], + async mockRPC(route, args, performRpc) { + if (args.method === "web_read_group") { + // override read_group to return an extra empty groups + const result = await performRpc(...arguments); + if (firstLoad) { + result.groups.unshift({ + __domain: [["product_id", "=", 7]], + product_id: [7, "empty group"], + product_id_count: 0, + }); + result.length = 3; + firstLoad = false; + } + return result; + } + }, + }); + + assert.containsOnce(target, ".o_kanban_header span:contains('empty group')"); + assert.containsOnce(target, ".o_kanban_header span:contains('hello')"); + assert.containsNone(target, ".o_kanban_header .o_column_title:contains('None')"); + // Delete the empty group + let clickColumnAction = await toggleColumnActions(target); + await clickColumnAction("Delete"); + // Delete the group 'hello' + clickColumnAction = await toggleColumnActions(target); + await clickColumnAction("Delete"); + // None of the previous groups should be present inside the view. Instead, a 'none' column should be displayed. + assert.containsNone(target, ".o_kanban_header span:contains('empty group')"); + assert.containsNone(target, ".o_kanban_header span:contains('hello')"); + assert.containsOnce(target, ".o_kanban_header .o_column_title:contains('None')"); + }); + QUnit.test("edit a column in grouped on m2o", async (assert) => { serverData.views["product,false,form"] = '
';