diff --git a/addons/web/static/src/views/kanban/kanban_model.js b/addons/web/static/src/views/kanban/kanban_model.js
index d934301cec2..fd65f8e43af 100644
--- a/addons/web/static/src/views/kanban/kanban_model.js
+++ b/addons/web/static/src/views/kanban/kanban_model.js
@@ -69,6 +69,7 @@ class KanbanGroup extends Group {
/** @type {ProgressBar[]} */
this.progressBars = this._generateProgressBars();
this.progressValue = markRaw(state.progressValue || { active: null });
+ this.list.domain = this.getProgressBarDomain();
this.tooltip = [];
this.model.transaction.register({
diff --git a/addons/web/static/tests/views/kanban_view_tests.js b/addons/web/static/tests/views/kanban_view_tests.js
index 3da02ceb159..4e0d9d74194 100644
--- a/addons/web/static/tests/views/kanban_view_tests.js
+++ b/addons/web/static/tests/views/kanban_view_tests.js
@@ -10668,6 +10668,69 @@ QUnit.module("Views", (hooks) => {
assert.containsN(target, ".o_kanban_record", 2);
});
+ QUnit.test("filter groups are kept when leaving and coming back", async (assert) => {
+ serverData.models.partner.records[1].state = "abc";
+ 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: ["bar"],
+ },
+ });
+
+ // Filter on state "abc" => matches 2 records
+ await click(getProgressBars(1)[0]);
+
+ assert.deepEqual(getCardTexts(0), ["4"]);
+ assert.deepEqual(getCardTexts(1), ["1", "2"]);
+
+ // open a record
+ await click(target.querySelectorAll(".o_kanban_record")[1]);
+ assert.containsOnce(target, ".o_form_view");
+
+ // go back to kanban view
+ await click(target.querySelector(".breadcrumb-item a"));
+
+ assert.deepEqual(getCardTexts(0), ["4"]);
+ assert.deepEqual(getCardTexts(1), ["1", "2"]);
+
+ // open a record
+ await click(target.querySelectorAll(".o_kanban_record")[1]);
+ assert.containsOnce(target, ".o_form_view");
+
+ // select another state
+ await click(target.querySelectorAll("input.o_radio_input")[1]);
+ // go back to kanban view
+ await click(target.querySelector(".breadcrumb-item a"));
+
+ assert.deepEqual(getCardTexts(0), ["4"]);
+ assert.deepEqual(getCardTexts(1), ["2"]);
+ });
+
QUnit.test(
"folded groups are kept when leaving and coming back (grouped by date)",
async (assert) => {