diff --git a/addons/web/static/src/js/views/control_panel/control_panel_controller.js b/addons/web/static/src/js/views/control_panel/control_panel_controller.js index 3d6e62f4bf9..10413e725ab 100644 --- a/addons/web/static/src/js/views/control_panel/control_panel_controller.js +++ b/addons/web/static/src/js/views/control_panel/control_panel_controller.js @@ -16,6 +16,7 @@ var ControlPanelController = mvc.Controller.extend({ new_groupBy: '_onNewGroupBy', activate_time_range: '_onActivateTimeRange', autocompletion_filter: '_onAutoCompletionFilter', + reload: '_onReload', }, /** @@ -229,6 +230,14 @@ var ControlPanelController = mvc.Controller.extend({ this.model.createNewGroupBy(ev.data); this._reportNewQueryAndRender(); }, + /** + * @private + * @param {OdooEvent} ev + */ + _onReload: function (ev) { + ev.stopPropagation(); + this.trigger_up('search', this.model.getQuery()); + }, }); return ControlPanelController; diff --git a/addons/web/static/src/js/views/control_panel/search/search_bar.js b/addons/web/static/src/js/views/control_panel/search/search_bar.js index f9fa15fe67d..7f0feda4516 100644 --- a/addons/web/static/src/js/views/control_panel/search/search_bar.js +++ b/addons/web/static/src/js/views/control_panel/search/search_bar.js @@ -216,6 +216,11 @@ var SearchBar = Widget.extend({ this.trigger_up('facet_removed'); } break; + case $.ui.keyCode.ENTER: + if (this.$input.val() === '') { + this.trigger_up('reload'); + } + break; } }, }); diff --git a/addons/web/static/src/js/widgets/auto_complete.js b/addons/web/static/src/js/widgets/auto_complete.js index a25dc0150f5..33405aa4196 100644 --- a/addons/web/static/src/js/widgets/auto_complete.js +++ b/addons/web/static/src/js/widgets/auto_complete.js @@ -55,7 +55,10 @@ return Widget.extend({ } }); this.$input.on('keypress', function (ev) { - self.search_string = self.search_string + String.fromCharCode(ev.which); + if (ev.which > 31 && ev.which !== 127) { + // we filter control character out of the search string + self.search_string = self.search_string + String.fromCharCode(ev.which); + } if (self.search_string.length) { self.searching = true; var search_string = self.search_string; diff --git a/addons/web/static/tests/chrome/action_manager_tests.js b/addons/web/static/tests/chrome/action_manager_tests.js index 990c166a419..291084402a9 100644 --- a/addons/web/static/tests/chrome/action_manager_tests.js +++ b/addons/web/static/tests/chrome/action_manager_tests.js @@ -3807,6 +3807,7 @@ QUnit.module('ActionManager', { actionManager.doAction(3); var $searchInput = $('.o_searchview input'); + $searchInput.val('m'); $searchInput.trigger($.Event('keypress', {key: 'm', which: 109, keyCode: 109})); $searchInput.trigger($.Event('keydown', {key: 'Enter', which: 13, keyCode: 13})); @@ -3815,6 +3816,7 @@ QUnit.module('ActionManager', { // Triggering the do_search above will kill the current searchview Input $searchInput = $('.o_searchview input'); + $searchInput.val('o'); $searchInput.trigger($.Event('keypress', {key: 'o', which: 111, keyCode: 111})); // We have something in the input of the search view. Making the search_read diff --git a/addons/web/static/tests/views/search_view_tests.js b/addons/web/static/tests/views/search_view_tests.js index 0714a5157e5..53f02f9e6cc 100644 --- a/addons/web/static/tests/views/search_view_tests.js +++ b/addons/web/static/tests/views/search_view_tests.js @@ -2,7 +2,6 @@ odoo.define('web.search_view_tests', function (require) { "use strict"; var FormView = require('web.FormView'); -var ListView = require('web.ListView'); var testUtils = require('web.test_utils'); var createActionManager = testUtils.createActionManager; @@ -1027,6 +1026,7 @@ QUnit.module('Search View', { assert.strictEqual(searchRead, 1, "there should be 1 search_read"); // 'r' key to filter on bar "First Record" + $('.o_searchview_input').val('r'); $('.o_searchview_input').trigger($.Event('keypress', { which: 82, keyCode: 82 })); $('.o_searchview_input').trigger($.Event('keydown', { which: $.ui.keyCode.DOWN, keyCode: $.ui.keyCode.DOWN })); $('.o_searchview_input').trigger($.Event('keydown', { which: $.ui.keyCode.RIGHT, keyCode: $.ui.keyCode.RIGHT })); @@ -1038,6 +1038,7 @@ QUnit.module('Search View', { assert.strictEqual(searchRead, 2, "there should be 2 search_read"); // 'r' key to filter on bar "Second Record" + $('.o_searchview_input').val('r'); $('.o_searchview_input').trigger($.Event('keypress', { which: 82, keyCode: 82 })); $('.o_searchview_input').trigger($.Event('keydown', { which: $.ui.keyCode.DOWN, keyCode: $.ui.keyCode.DOWN })); $('.o_searchview_input').trigger($.Event('keydown', { which: $.ui.keyCode.RIGHT, keyCode: $.ui.keyCode.RIGHT })); @@ -1052,6 +1053,36 @@ QUnit.module('Search View', { actionManager.destroy(); }); + QUnit.test('no search text triggers a reload', function (assert) { + assert.expect(2); + var rpcs = 0; + var actionManager = createActionManager({ + actions: this.actions, + archs: this.archs, + data: this.data, + mockRPC: function () { + rpcs++; + return this._super.apply(this, arguments); + }, + }); + + actionManager.doAction(10); + rpcs = 0; + $('.o_searchview_input').trigger($.Event('keydown', { + which: $.ui.keyCode.ENTER, + keyCode: $.ui.keyCode.ENTER, + })); + $('.o_searchview_input').trigger($.Event('keyup', { + which: $.ui.keyCode.ENTER, + keyCode: $.ui.keyCode.ENTER, + })); + + assert.containsNone(actionManager, '.o_searchview_facet_label'); + assert.strictEqual(rpcs, 2, "should have reloaded"); + + actionManager.destroy(); + }); + QUnit.module('TimeRangeMenu'); QUnit.test('time range menu stays hidden', function (assert) {