diff --git a/addons/web/static/src/js/views/abstract_controller.js b/addons/web/static/src/js/views/abstract_controller.js
index a0152e5ccc4..aa612cbea01 100644
--- a/addons/web/static/src/js/views/abstract_controller.js
+++ b/addons/web/static/src/js/views/abstract_controller.js
@@ -618,7 +618,7 @@ var AbstractController = mvc.Controller.extend(ActionMixin, WidgetAdapterMixin,
*/
_onSearch: function (ev) {
ev.stopPropagation();
- this.reload(_.extend({offset: 0}, ev.data));
+ this.reload(_.extend({offset: 0, groupsOffset: 0}, ev.data));
},
/**
* @private
diff --git a/addons/web/static/tests/views/list_tests.js b/addons/web/static/tests/views/list_tests.js
index 6e2297be1c2..1ff480fb0e1 100644
--- a/addons/web/static/tests/views/list_tests.js
+++ b/addons/web/static/tests/views/list_tests.js
@@ -6960,6 +6960,64 @@ QUnit.module('Views', {
list.destroy();
});
+ QUnit.test('add filter in a grouped list with a pager', async function (assert) {
+ assert.expect(11);
+
+ const actionManager = await createActionManager({
+ data: this.data,
+ actions: [{
+ id: 11,
+ name: 'Action 11',
+ res_model: 'foo',
+ type: 'ir.actions.act_window',
+ views: [[3, 'list']],
+ search_view_id: [9, 'search'],
+ flags: {
+ context: { group_by: ['int_field'] },
+ },
+ }],
+ archs: {
+ 'foo,3,list': '',
+ 'foo,9,search': `
+
+
+ `,
+ },
+ mockRPC: function (route, args) {
+ if (args.method === 'web_read_group') {
+ assert.step(JSON.stringify(args.kwargs.domain) + ', ' + args.kwargs.offset);
+ }
+ return this._super.apply(this, arguments);
+ },
+ });
+
+ await actionManager.doAction(11);
+
+ assert.containsOnce(actionManager, '.o_list_view');
+ assert.strictEqual(actionManager.$('.o_pager_counter').text().trim(), '1-3 / 4');
+ assert.containsN(actionManager, '.o_group_header', 3); // page 1
+
+ await testUtils.dom.click(actionManager.$('.o_pager_next')); // switch to page 2
+
+ assert.strictEqual(actionManager.$('.o_pager_counter').text().trim(), '4-4 / 4');
+ assert.containsN(actionManager, '.o_group_header', 1); // page 2
+
+ // toggle a filter -> there should be only one group left (on page 1)
+ await testUtils.dom.click(actionManager.$('.o_control_panel .o_search_options .o_filters_menu_button'));
+ await testUtils.dom.click(actionManager.$('.o_control_panel .o_search_options .o_filters_menu .o_menu_item:first'));
+
+ assert.strictEqual(actionManager.$('.o_pager_counter').text().trim(), '1-1 / 1');
+ assert.containsN(actionManager, '.o_group_header', 1); // page 1
+
+ assert.verifySteps([
+ '[], undefined',
+ '[], 3',
+ '[["bar","=",false]], undefined',
+ ]);
+
+ actionManager.destroy();
+ });
+
QUnit.test('editable grouped lists', async function (assert) {
assert.expect(4);