diff options
| author | Nicolas Lempereur <nle@odoo.com> | 2018-04-27 14:09:10 +0200 |
|---|---|---|
| committer | Nicolas Lempereur <nle@odoo.com> | 2018-05-03 09:11:44 +0200 |
| commit | f12daec1a1dba46ec4e26ce7c313bc132f9537f8 (patch) | |
| tree | b3e6981b40551a06fd9e5a8b967b9301e67c65d9 /addons/web/static/src/js | |
| parent | 532b11ce41583d0a124efb7ff5f81df7e0830be6 (diff) | |
[FIX] web: don't change page before saving
When we edit a list view and change page before the change has been
savec, the saving and page changing will be done concurrently thus
possibly causing an error if the page is changed before the saved is
finished: the save will try to modify the page that is no more
displayed.
In this change, the list view editable wait for the saving to be
finished before reloading its content.
note: for 9.0 up to saas-15
opw-1839149
closes #24471
Diffstat (limited to 'addons/web/static/src/js')
| -rw-r--r-- | addons/web/static/src/js/views/list_view.js | 10 | ||||
| -rw-r--r-- | addons/web/static/src/js/views/list_view_editable.js | 11 |
2 files changed, 19 insertions, 2 deletions
diff --git a/addons/web/static/src/js/views/list_view.js b/addons/web/static/src/js/views/list_view.js index 98462e68493..f742c9fb435 100644 --- a/addons/web/static/src/js/views/list_view.js +++ b/addons/web/static/src/js/views/list_view.js @@ -352,7 +352,7 @@ var ListView = View.extend( /** @lends instance.web.ListView# */ { } else if (self.page > max_page_index) { self.page = 0; } - self.reload_content(); + self.reload_content_when_ready(); }).find('.oe_list_pager_state') .click(function (e) { e.stopPropagation(); @@ -370,7 +370,7 @@ var ListView = View.extend( /** @lends instance.web.ListView# */ { var val = parseInt($select.val(), 10); self._limit = (isNaN(val) ? null : val); self.page = 0; - self.reload_content(); + self.reload_content_when_ready(); }).blur(function() { $(this).trigger('change'); }) @@ -542,6 +542,12 @@ var ListView = View.extend( /** @lends instance.web.ListView# */ { }); return reloaded.promise(); }), + /** + * Proxy allowing override when reload_content can't be called directly + */ + reload_content_when_ready: function() { + return this.reload_content.apply(this, arguments); + }, reload: function () { return this.reload_content(); }, diff --git a/addons/web/static/src/js/views/list_view_editable.js b/addons/web/static/src/js/views/list_view_editable.js index b522e1e37a0..d7f15bd89f2 100644 --- a/addons/web/static/src/js/views/list_view_editable.js +++ b/addons/web/static/src/js/views/list_view_editable.js @@ -402,6 +402,17 @@ ListView.include(/** @lends instance.web.ListView# */{ return cells; }, /** + * Prevent reloading content while an ongoing save + */ + reload_content_when_ready: function() { + var self = this; + var self_super = this._super; + var original_arguments = arguments; + return this.saving_mutex.exec(function() { + return self_super.apply(self, original_arguments); + }); + }, + /** * If currently editing a row, resizes all registered form fields based * on the corresponding row cell */ |
