diff --git a/addons/web/static/src/legacy/js/core/ajax.js b/addons/web/static/src/legacy/js/core/ajax.js index bc0c40b9522..71484e5c9d8 100644 --- a/addons/web/static/src/legacy/js/core/ajax.js +++ b/addons/web/static/src/legacy/js/core/ajax.js @@ -97,11 +97,22 @@ function _genericJsonRpc (fct_name, params, settings, fct) { }); // FIXME: jsonp? - promise.abort = function () { - rejection({ - message: "XmlHttpRequestError abort", - event: $.Event('abort') - }); + /** + * @param {Boolean} rejectError Returns an error if true. Allows you to cancel + * ignored rpc's in order to unblock the ui and not display an error. + */ + promise.abort = function (rejectError = true) { + if (rejectError) { + rejection({ + message: "XmlHttpRequestError abort", + event: $.Event('abort') + }); + } + + if (!shadow) { + core.bus.trigger('rpc_response'); + } + if (xhr.abort) { xhr.abort(); } diff --git a/addons/web/static/src/legacy/js/fields/relational_fields.js b/addons/web/static/src/legacy/js/fields/relational_fields.js index faf94e7b057..d5de3734b5f 100644 --- a/addons/web/static/src/legacy/js/fields/relational_fields.js +++ b/addons/web/static/src/legacy/js/fields/relational_fields.js @@ -640,7 +640,10 @@ var FieldMany2One = AbstractField.extend({ domain.push(['id', 'not in', blackListedIds]); } - const nameSearch = this._rpc({ + if (this.lastNameSearch) { + this.lastNameSearch.abort(false) + } + this.lastNameSearch = this._rpc({ model: this.field.relation, method: "name_search", kwargs: { @@ -651,7 +654,7 @@ var FieldMany2One = AbstractField.extend({ context, } }); - const results = await this.orderer.add(nameSearch); + const results = await this.orderer.add(this.lastNameSearch); // Format results to fit the options dropdown let values = results.map((result) => { diff --git a/addons/web/static/tests/legacy/helpers/mock_server.js b/addons/web/static/tests/legacy/helpers/mock_server.js index b3737fe7e8d..b1989eb4c6f 100644 --- a/addons/web/static/tests/legacy/helpers/mock_server.js +++ b/addons/web/static/tests/legacy/helpers/mock_server.js @@ -163,9 +163,11 @@ var MockServer = Class.extend({ if (abort) { abort = abort.bind(def); } else { - abort = function () { - throw new Error("Can't abort this request"); - }; + abort = function (rejectError = true) { + if (rejectError) { + throw new Error("XmlHttpRequestError abort"); + } + } } def = def.then(function (result) {