diff --git a/addons/web/static/src/legacy/js/views/search_panel_model_extension.js b/addons/web/static/src/legacy/js/views/search_panel_model_extension.js index 6db2d562723..4df49bebec5 100644 --- a/addons/web/static/src/legacy/js/views/search_panel_model_extension.js +++ b/addons/web/static/src/legacy/js/views/search_panel_model_extension.js @@ -157,12 +157,15 @@ * @override */ importState(importedState) { - this.initialStateImport = Boolean(importedState && !this.state.sections); + this.initialStateImport = false; super.importState(...arguments); if (importedState) { this.state.sections = new Map(this.state.sections); for (const section of this.state.sections.values()) { section.values = new Map(section.values); + if ([...section.values.keys()].some(e => e !== false)) { + this.initialStateImport = true; + } if (section.groups) { section.groups = new Map(section.groups); for (const group of section.groups.values()) { diff --git a/addons/web/static/tests/search/search_panel_tests.js b/addons/web/static/tests/search/search_panel_tests.js index a946e7b0b8f..b949921fa30 100644 --- a/addons/web/static/tests/search/search_panel_tests.js +++ b/addons/web/static/tests/search/search_panel_tests.js @@ -2237,6 +2237,40 @@ QUnit.module("Search", (hooks) => { } ); + QUnit.test( + "categories and filters are loaded when switching from a view without the search panel", + async (assert) => { + assert.expect(5); + + // set the pivot view as the default view + serverData.actions[1].views = [ + [false, "pivot"], + [false, "kanban"], + [false, "list"], + ]; + + const webclient = await createWebClient({ + serverData, + async mockRPC(route, {method}) { + if (/search_panel_/.test(method || route)) { + assert.step(method || route); + } + }, + }); + + await doAction(webclient, 1); + assert.verifySteps([]); + + await switchView(target, "list"); + await legacyExtraNextTick(); + assert.verifySteps(["search_panel_select_range", "search_panel_select_multi_range"]); + + await switchView(target, "kanban"); + await legacyExtraNextTick(); + assert.verifySteps([]); + } + ); + QUnit.test("scroll position is kept when switching between controllers", async (assert) => { assert.expect(6);