summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js/views/basic/basic_controller.js
diff options
context:
space:
mode:
Diffstat (limited to 'addons/web/static/src/js/views/basic/basic_controller.js')
-rw-r--r--addons/web/static/src/js/views/basic/basic_controller.js19
1 files changed, 17 insertions, 2 deletions
diff --git a/addons/web/static/src/js/views/basic/basic_controller.js b/addons/web/static/src/js/views/basic/basic_controller.js
index 7beb15a9d70..97e0ca0f4be 100644
--- a/addons/web/static/src/js/views/basic/basic_controller.js
+++ b/addons/web/static/src/js/views/basic/basic_controller.js
@@ -8,9 +8,10 @@ odoo.define('web.BasicController', function (require) {
*/
var AbstractController = require('web.AbstractController');
-var FieldManagerMixin = require('web.FieldManagerMixin');
+var concurrency = require('web.concurrency');
var core = require('web.core');
var Dialog = require('web.Dialog');
+var FieldManagerMixin = require('web.FieldManagerMixin');
var Pager = require('web.Pager');
var _t = core._t;
@@ -34,6 +35,7 @@ return AbstractController.extend(FieldManagerMixin, {
FieldManagerMixin.init.call(this, this.model);
this.handle = params.initialState.id;
this.isDirty = false;
+ this.mutex = new concurrency.Mutex();
},
/**
* @override
@@ -88,6 +90,18 @@ return AbstractController.extend(FieldManagerMixin, {
//--------------------------------------------------------------------------
/**
+ * We override applyChanges (from the field manager mixin) to protect it
+ * with a mutex.
+ *
+ * @override
+ */
+ _applyChanges: function (dataPointID, changes, event) {
+ var _super = FieldManagerMixin._applyChanges.bind(this);
+ return this.mutex.exec(function () {
+ return _super(dataPointID, changes, event);
+ });
+ },
+ /**
* When the user clicks on a 'action button', this function determines what
* should happen.
*
@@ -132,10 +146,11 @@ return AbstractController.extend(FieldManagerMixin, {
* @param {string} id - the id of one of the view's records
* @param {string[]} fields - the changed fields
* @param {OdooEvent} e - the event that triggered the change
+ * @returns {Deferred}
*/
_confirmChange: function (id, fields, e) {
var state = this.model.get(this.handle);
- this.renderer.confirmChange(state, id, fields, e);
+ return this.renderer.confirmChange(state, id, fields, e);
},
/**
* Delete records (and ask for confirmation if necessary)