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 a21bcb66aaf..e53c585dc8a 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 @@ -3,6 +3,7 @@ import { Domain } from "@web/core/domain"; import { DynamicList } from "./dynamic_list"; +import { getGroupServerValue } from "./utils"; export class DynamicGroupList extends DynamicList { static type = "DynamicGroupList"; @@ -226,6 +227,7 @@ export class DynamicGroupList extends DynamicList { __domain: domain, [this.groupByField.name]: [id, groupName], value: id, + serverValue: getGroupServerValue(this.groupByField, id), displayName: groupName, rawValue: [id, groupName], }; diff --git a/addons/web/static/src/model/relational_model/utils.js b/addons/web/static/src/model/relational_model/utils.js index 0a7e8602b20..2156c614e46 100644 --- a/addons/web/static/src/model/relational_model/utils.js +++ b/addons/web/static/src/model/relational_model/utils.js @@ -475,7 +475,7 @@ export function extractInfoFromGroupData(groupData, groupBy, fields) { info.rawValue = groupData[groupBy[0]]; info.value = getValueFromGroupData(groupByField, info.rawValue, info.range); info.displayName = getDisplayNameFromGroupData(groupByField, info.rawValue); - info.serverValue = getServerValueFromGroupData(groupByField, info.value); + info.serverValue = getGroupServerValue(groupByField, info.value); info.aggregates = getAggregatesFromGroupData(groupData, fields); return info; } @@ -514,7 +514,7 @@ function getDisplayNameFromGroupData(field, rawValue) { * @param {any} value * @returns {any} */ -function getServerValueFromGroupData(field, value) { +export function getGroupServerValue(field, value) { switch (field.type) { case "many2many": { return value ? [value] : 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 81b4bf959cc..914c8543514 100644 --- a/addons/web/static/tests/views/kanban/kanban_view_tests.js +++ b/addons/web/static/tests/views/kanban/kanban_view_tests.js @@ -9442,6 +9442,57 @@ QUnit.module("Views", (hooks) => { ]); }); + QUnit.test("filter on progressbar in new groups", async (assert) => { + serverData.views = { + "partner,some_view_ref,form": `
`, + }; + + await makeView({ + type: "kanban", + resModel: "partner", + serverData, + arch: ` + + + + +
+
+
+ `, + groupBy: ["product_id"], + }); + + assert.containsN(target, ".o_kanban_group", 2); + + await createColumn(target); + await editColumnName(target, "new column 1"); + await validateColumn(target); + await editColumnName(target, "new column 2"); + await validateColumn(target); + assert.containsN(target, ".o_kanban_group", 4); + assert.containsNone(target.querySelectorAll(".o_kanban_group")[2], ".o_kanban_record"); + assert.containsNone(target.querySelectorAll(".o_kanban_group")[3], ".o_kanban_record"); + + await quickCreateRecord(target, 2); + await editInput(target, ".o_field_widget[name=foo] input", "new record 1"); + await validateRecord(target); + await quickCreateRecord(target, 3); + await editInput(target, ".o_field_widget[name=foo] input", "new record 2"); + await validateRecord(target); + assert.containsOnce(target.querySelectorAll(".o_kanban_group")[2], ".o_kanban_record"); + assert.containsOnce(target.querySelectorAll(".o_kanban_group")[3], ".o_kanban_record"); + + assert.containsNone(target, ".o_kanban_group_show_200"); + + await click( + target.querySelectorAll(".o_kanban_group")[2], + ".o_column_progress .progress-bar" + ); + assert.containsOnce(target, ".o_kanban_group_show_200"); + assert.hasClass(target.querySelectorAll(".o_kanban_group")[2], "o_kanban_group_show_200"); + }); + QUnit.test('column progressbars: "false" bar is clickable', async (assert) => { serverData.models.partner.records.push({ id: 5, @@ -11153,8 +11204,7 @@ QUnit.module("Views", (hooks) => { type: "kanban", resModel: "partner", serverData, - arch: - ` + arch: ` Set Cover Image @@ -14380,13 +14430,14 @@ QUnit.module("Views", (hooks) => { } ); - QUnit.test("can quick create a column when pressing enter when input is focused", async (assert) => { - await makeView({ - type: "kanban", - resModel: "partner", - serverData, - arch: - ` + QUnit.test( + "can quick create a column when pressing enter when input is focused", + async (assert) => { + await makeView({ + type: "kanban", + resModel: "partner", + serverData, + arch: ` @@ -14394,23 +14445,24 @@ QUnit.module("Views", (hooks) => { `, - groupBy: ["product_id"], - }); + groupBy: ["product_id"], + }); - assert.containsN(target, ".o_kanban_group", 2); + assert.containsN(target, ".o_kanban_group", 2); - await createColumn(target); - - // We don't use the editInput helper as it would trigger a change event automatically. - // We need to wait for the enter key to trigger the event. - const input = target.querySelector(".o_column_quick_create input"); - input.value = "New Column"; - await triggerEvent(input, null, "input"); + await createColumn(target); - await triggerEvent(target, ".o_quick_create_unfolded input", "keydown", { - key: "Enter", - }); + // We don't use the editInput helper as it would trigger a change event automatically. + // We need to wait for the enter key to trigger the event. + const input = target.querySelector(".o_column_quick_create input"); + input.value = "New Column"; + await triggerEvent(input, null, "input"); - assert.containsN(target, ".o_kanban_group", 3); - }); + await triggerEvent(target, ".o_quick_create_unfolded input", "keydown", { + key: "Enter", + }); + + assert.containsN(target, ".o_kanban_group", 3); + } + ); });