diff --git a/addons/web/static/src/core/pager/pager.js b/addons/web/static/src/core/pager/pager.js
index 3502201c437..a2dbf4e3621 100644
--- a/addons/web/static/src/core/pager/pager.js
+++ b/addons/web/static/src/core/pager/pager.js
@@ -113,6 +113,14 @@ export class Pager extends Component {
this.state.isEditing = false;
}
+ async updateTotal() {
+ if (!this.state.isDisabled) {
+ this.state.isDisabled = true;
+ await this.props.updateTotal();
+ this.state.isDisabled = false;
+ }
+ }
+
/**
* @param {MouseEvent} ev
*/
diff --git a/addons/web/static/src/core/pager/pager.xml b/addons/web/static/src/core/pager/pager.xml
index 15bf0dff42d..c93c719a2f1 100644
--- a/addons/web/static/src/core/pager/pager.xml
+++ b/addons/web/static/src/core/pager/pager.xml
@@ -12,7 +12,7 @@
/
-
+
diff --git a/addons/web/static/src/search/control_panel/control_panel.scss b/addons/web/static/src/search/control_panel/control_panel.scss
index ee351727c60..543c76e9630 100644
--- a/addons/web/static/src/search/control_panel/control_panel.scss
+++ b/addons/web/static/src/search/control_panel/control_panel.scss
@@ -208,7 +208,7 @@
padding-left: 5px;
text-align: center;
user-select: none;
- .o_pager_limit_fetch, .o_pager_value {
+ .o_pager_limit_fetch:not(.disabled), .o_pager_value {
cursor: pointer;
}
}
diff --git a/addons/web/static/tests/views/list_view_tests.js b/addons/web/static/tests/views/list_view_tests.js
index 79cb61e63b1..0baebd5412e 100644
--- a/addons/web/static/tests/views/list_view_tests.js
+++ b/addons/web/static/tests/views/list_view_tests.js
@@ -5734,6 +5734,44 @@ QUnit.module("Views", (hooks) => {
assert.verifySteps([]);
});
+ QUnit.test("pager, ungrouped, next and fetch count simultaneously", async function (assert) {
+ patchWithCleanup(DynamicRecordList, { WEB_SEARCH_READ_COUNT_LIMIT: 5 });
+ serverData.models.foo.records.push({ id: 11, foo: "r11", bar: true });
+ serverData.models.foo.records.push({ id: 12, foo: "r12", bar: true });
+ serverData.models.foo.records.push({ id: 13, foo: "r13", bar: true });
+
+ let def;
+ await makeView({
+ type: "list",
+ resModel: "foo",
+ serverData,
+ arch: '',
+ async mockRPC(route, args) {
+ assert.step(args.method);
+ if (args.method === "web_search_read") {
+ await def;
+ }
+ },
+ });
+
+ assert.containsN(target, ".o_data_row", 2);
+ assert.strictEqual(target.querySelector(".o_pager_value").innerText, "1-2");
+ assert.strictEqual(target.querySelector(".o_pager_limit").innerText, "5+");
+ assert.verifySteps(["get_views", "web_search_read"]);
+
+ def = makeDeferred();
+ await click(target.querySelector(".o_pager_next")); // this request will be pending
+ assert.strictEqual(target.querySelector(".o_pager_value").innerText, "1-2");
+ assert.strictEqual(target.querySelector(".o_pager_limit").innerText, "5+");
+ // can't fetch count simultaneously as it is temporarily disabled while updating
+ assert.hasClass(target.querySelector(".o_pager_limit"), "disabled");
+ assert.verifySteps(["web_search_read"]);
+
+ def.resolve();
+ await nextTick();
+ assert.doesNotHaveClass(target.querySelector(".o_pager_limit"), "disabled");
+ });
+
QUnit.test("pager, grouped, with groups count limit reached", async function (assert) {
patchWithCleanup(DynamicRecordList, { WEB_SEARCH_READ_COUNT_LIMIT: 3 });
serverData.models.foo.records.push({ id: 398, foo: "ozfijz" }); // to have 4 groups