diff --git a/addons/web/static/src/js/views/abstract_controller.js b/addons/web/static/src/js/views/abstract_controller.js index 07c4138c54d..8a48c201fa6 100644 --- a/addons/web/static/src/js/views/abstract_controller.js +++ b/addons/web/static/src/js/views/abstract_controller.js @@ -211,7 +211,6 @@ var AbstractController = mvc.Controller.extend(ActionMixin, { * @returns {Promise} */ reload: async function (params = {}) { - let searchPanelUpdateProm; const controllerState = params.controllerState || {}; const cpState = controllerState.cpState; if (this.withControlPanel && cpState) { @@ -226,19 +225,19 @@ var AbstractController = mvc.Controller.extend(ActionMixin, { } if (controllerState.spState) { this._searchPanel.importState(controllerState.spState); - this.searchPanelDomain = this._searchPanel.getDomain(); } else { const viewDomain = await this._getViewDomain(); - searchPanelUpdateProm = this._searchPanel.update({ + await this._searchPanel.update({ searchDomain: this.controlPanelDomain, viewDomain, }); postponeRendering = !params.noRender; params.noRender = true; // wait for searchpanel to be ready to render } + this.searchPanelDomain = this._searchPanel.getDomain(); params.domain = this.controlPanelDomain.concat(this.searchPanelDomain); } - await Promise.all([this.update(params, {}), searchPanelUpdateProm]); + await this.update(params, {}); if (postponeRendering) { return this._updateRendererState(false); } diff --git a/addons/web/static/tests/views/search_panel_tests.js b/addons/web/static/tests/views/search_panel_tests.js index 9a7310eacca..7211008f94f 100644 --- a/addons/web/static/tests/views/search_panel_tests.js +++ b/addons/web/static/tests/views/search_panel_tests.js @@ -491,10 +491,11 @@ QUnit.module('Views', { var Storage = RamStorage.extend({ getItem: function (key) { assert.step('getItem ' + key); - return 3; // 'asustek' + return this._super(...arguments) || 3; // default: 'asustek' }, setItem: function (key, value) { assert.step('setItem ' + key + ' to ' + value); + this._super(...arguments); }, }); var RamStorageService = AbstractStorageService.extend({ @@ -2673,8 +2674,8 @@ QUnit.module('Views', { assert.verifySteps([ 'search_panel_select_range', - '/web/dataset/search_read', - "search_panel_select_multi_range" + "search_panel_select_multi_range", + '/web/dataset/search_read' ]); kanban.destroy(); @@ -3993,5 +3994,77 @@ QUnit.module('Views', { kanban.destroy(); }); + + QUnit.test("a selected value becomming invalid should no more impact the view", async function (assert) { + assert.expect(16); + + const kanban = await createView({ + View: KanbanView, + model: 'partner', + data: this.data, + mockRPC: function (route, args) { + assert.step(args.method || route); + return this._super.apply(this, arguments); + }, + services: this.services, + arch: ` + + + +
+ +
+
+
+
`, + archs: { + 'partner,false,search': ` + + + + + + `, + }, + }); + + assert.verifySteps([ + 'search_panel_select_range', + '/web/dataset/search_read', + ]); + + await assert.containsN(kanban, '.o_kanban_record span', 4); + + // select 'ABC' in search panel + await testUtils.dom.click(kanban.$('.o_search_panel_category_value:nth(1) header')); + + assert.verifySteps([ + 'search_panel_select_range', + '/web/dataset/search_read', + ]); + + assert.containsOnce(kanban, '.o_kanban_record span'); + assert.strictEqual(kanban.el.querySelector('.o_kanban_record span').innerText, 'yop' ); + + // select DEF in filter menu + await testUtils.controlPanel.toggleFilterMenu(kanban); + await testUtils.controlPanel.toggleMenuItem(kanban, 'DEF'); + + assert.verifySteps([ + 'search_panel_select_range', + '/web/dataset/search_read', + ]); + + const firstCategoryValue = kanban.el.querySelector('.o_search_panel_category_value header'); + assert.strictEqual(firstCategoryValue.innerText, 'All'); + assert.hasClass( + firstCategoryValue, 'active', + "the value 'All' should be selected since ABC is no longer a valid value with respect to search domain" + ); + assert.containsOnce(kanban, '.o_kanban_record span'); + assert.strictEqual(kanban.el.querySelector('.o_kanban_record span').innerText, 'blip' ); + + kanban.destroy(); + }); }); });