summaryrefslogtreecommitdiff
path: root/addons/web/static/src
diff options
context:
space:
mode:
authorNicolas Lempereur <nle@odoo.com>2018-04-27 14:09:10 +0200
committerNicolas Lempereur <nle@odoo.com>2018-05-03 09:11:44 +0200
commitf12daec1a1dba46ec4e26ce7c313bc132f9537f8 (patch)
treeb3e6981b40551a06fd9e5a8b967b9301e67c65d9 /addons/web/static/src
parent532b11ce41583d0a124efb7ff5f81df7e0830be6 (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')
-rw-r--r--addons/web/static/src/js/views/list_view.js10
-rw-r--r--addons/web/static/src/js/views/list_view_editable.js11
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
*/