diff --git a/addons/web/static/src/views/kanban/kanban_model.js b/addons/web/static/src/views/kanban/kanban_model.js
index 545dccc4656..7c22139c828 100644
--- a/addons/web/static/src/views/kanban/kanban_model.js
+++ b/addons/web/static/src/views/kanban/kanban_model.js
@@ -327,8 +327,9 @@ class KanbanGroup extends Group {
}
export class KanbanDynamicGroupList extends DynamicGroupList {
- setup() {
+ setup(params, state) {
super.setup(...arguments);
+ this.previousParams = state.previousParams || "[]";
this.groupBy = this.groupBy.slice(0, 1);
@@ -352,6 +353,17 @@ export class KanbanDynamicGroupList extends DynamicGroupList {
return [...super.fieldNames, ...this.sumFields];
}
+ get currentParams() {
+ return JSON.stringify([this.domain, this.groupBy]);
+ }
+
+ exportState() {
+ return {
+ ...super.exportState(),
+ previousParams: this.currentParams,
+ };
+ }
+
/**
* After a reload, empty groups are expcted to disappear from the web_read_group.
* However, if the parameters are the same (domain + groupBy), we want to
@@ -360,7 +372,20 @@ export class KanbanDynamicGroupList extends DynamicGroupList {
* @override
*/
async load() {
- await this._loadWithProgressData(super.load());
+ const load = async () => {
+ const previousGroups = this.groups.map((g, i) => [g, i]);
+ await super.load();
+ if (this.previousParams === this.currentParams) {
+ for (const [group, index] of previousGroups) {
+ const newGroup = this.groups.find((g) => group.valueEquals(g.value));
+ if (!group.deleted && !newGroup) {
+ group.empty();
+ this.groups.splice(index, 0, group);
+ }
+ }
+ }
+ };
+ await this._loadWithProgressData(load());
}
/**
diff --git a/addons/web/static/src/views/relational_model.js b/addons/web/static/src/views/relational_model.js
index badacbf650a..60e3f90312a 100644
--- a/addons/web/static/src/views/relational_model.js
+++ b/addons/web/static/src/views/relational_model.js
@@ -1429,7 +1429,6 @@ class DynamicList extends DataPoint {
this.limit = params.limit || state.limit || this.constructor.DEFAULT_LIMIT;
this.isDomainSelected = false;
this.loadedCount = state.loadedCount || 0;
- this.previousParams = state.previousParams || "[]";
this.editedRecord = null;
this.onCreateRecord = params.onCreateRecord || (() => {});
@@ -1469,10 +1468,6 @@ class DynamicList extends DataPoint {
// Getters
// -------------------------------------------------------------------------
- get currentParams() {
- return JSON.stringify([this.domain, this.groupBy]);
- }
-
get firstGroupBy() {
return this.groupBy[0] || false;
}
@@ -1539,7 +1534,6 @@ class DynamicList extends DataPoint {
limit: this.limit,
loadedCount: this.records.length,
orderBy: this.orderBy,
- previousParams: this.currentParams,
};
}
@@ -2253,18 +2247,8 @@ export class DynamicGroupList extends DynamicList {
this.limit = params.limit === undefined ? this.limit : params.limit;
this.offset = params.offset === undefined ? this.offset : params.offset;
/** @type {[Group, number][]} */
- const previousGroups = this.groups.map((g, i) => [g, i]);
this.groups = await this._loadGroups();
await Promise.all(this.groups.map((group) => group.load()));
- if (this.previousParams === this.currentParams) {
- for (const [group, index] of previousGroups) {
- const newGroup = this.groups.find((g) => group.valueEquals(g.value));
- if (!group.deleted && !newGroup) {
- group.empty();
- this.groups.splice(index, 0, group);
- }
- }
- }
}
get nbTotalRecords() {
diff --git a/addons/web/static/tests/views/list_view_tests.js b/addons/web/static/tests/views/list_view_tests.js
index d3aeff61938..e5b9226ad18 100644
--- a/addons/web/static/tests/views/list_view_tests.js
+++ b/addons/web/static/tests/views/list_view_tests.js
@@ -15179,6 +15179,50 @@ QUnit.module("Views", (hooks) => {
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) => {
+ serverData.views = {
+ "foo,false,list": `