diff --git a/addons/web/static/src/search/search_model.js b/addons/web/static/src/search/search_model.js index 91776524071..1b05a5a0ccf 100644 --- a/addons/web/static/src/search/search_model.js +++ b/addons/web/static/src/search/search_model.js @@ -266,6 +266,9 @@ export class SearchModel extends EventBus { this.searchViewId = searchViewDescription.viewId; } + const { searchDefaults, searchPanelDefaults } = + this._extractSearchDefaultsFromGlobalContext(); + if (config.state) { this._importState(config.state); this.__legacyParseSearchPanelArchAnyway(searchViewDescription, searchViewFields); @@ -285,26 +288,6 @@ export class SearchModel extends EventBus { this.nextGroupId = 1; this.nextGroupNumber = 1; - const searchDefaults = {}; - const searchPanelDefaults = {}; - - for (const key in this.globalContext) { - const defaultValue = this.globalContext[key]; - const searchDefaultMatch = /^search_default_(.*)$/.exec(key); - if (searchDefaultMatch) { - if (defaultValue) { - searchDefaults[searchDefaultMatch[1]] = defaultValue; - } - delete this.globalContext[key]; - continue; - } - const searchPanelDefaultMatch = /^searchpanel_default_(.*)$/.exec(key); - if (searchPanelDefaultMatch) { - searchPanelDefaults[searchPanelDefaultMatch[1]] = defaultValue; - delete this.globalContext[key]; - } - } - const parser = new SearchArchParser( searchViewDescription, searchViewFields, @@ -389,6 +372,8 @@ export class SearchModel extends EventBus { this.globalGroupBy = groupBy || []; this.globalOrderBy = orderBy || []; + this._extractSearchDefaultsFromGlobalContext(); + await this._reloadSections(); } @@ -1455,6 +1440,28 @@ export class SearchModel extends EventBus { } } + _extractSearchDefaultsFromGlobalContext() { + const searchDefaults = {}; + const searchPanelDefaults = {}; + for (const key in this.globalContext) { + const defaultValue = this.globalContext[key]; + const searchDefaultMatch = /^search_default_(.*)$/.exec(key); + if (searchDefaultMatch) { + if (defaultValue) { + searchDefaults[searchDefaultMatch[1]] = defaultValue; + } + delete this.globalContext[key]; + continue; + } + const searchPanelDefaultMatch = /^searchpanel_default_(.*)$/.exec(key); + if (searchPanelDefaultMatch) { + searchPanelDefaults[searchPanelDefaultMatch[1]] = defaultValue; + delete this.globalContext[key]; + } + } + return { searchDefaults, searchPanelDefaults }; + } + /** * Fetches values for each category at startup. At reload a category is * only fetched if needed. diff --git a/addons/web/static/tests/search/with_search_tests.js b/addons/web/static/tests/search/with_search_tests.js index 35fb9b5dc92..59087e237e4 100644 --- a/addons/web/static/tests/search/with_search_tests.js +++ b/addons/web/static/tests/search/with_search_tests.js @@ -333,4 +333,56 @@ QUnit.module("Search", (hooks) => { await nextTick(); }); + + QUnit.test("search defaults are removed from context at reload", async function (assert) { + assert.expect(4); + + const context = { + search_default_x: true, + searchpanel_default_y: true, + }; + + class TestComponent extends Component { + setup() { + onWillStart(() => { + assert.deepEqual(this.props.context, { lang: "en", tz: "taht", uid: 7 }); + }); + onWillUpdateProps((nextProps) => { + assert.deepEqual(nextProps.context, { lang: "en", tz: "taht", uid: 7 }); + }); + } + } + TestComponent.template = xml`