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();
+ });
});
});