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);
+ }
+ );
});