summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js
diff options
context:
space:
mode:
authorAaron Bohy <aab@odoo.com>2020-11-26 11:16:53 +0000
committerAaron Bohy <aab@odoo.com>2020-11-27 08:06:28 +0000
commit2b7670e6d709cd311c630c99cb9da7d3d6ae90f4 (patch)
tree6d657851c3af84e11dceb18f6477ee4568a9403d /addons/web/static/src/js
parent648635deca67df09417ae55c6eb181c98524b74d (diff)
[FIX] web: BasicModel: nested x2many and unknown fields
Consider the following situation: - have a form view with an x2many field displayed as a list - the x2many field has a form view that contains an x2many field, which isn't in the list - for that x2many field, we can also open a form view to see/edit the related records. As the x2many field isn't in the list, when we open a subrecord, we modify the fieldsInfo to add the information about the x2many field we didn't know before. Doing so automatically applies raw changes that we might have stored earlier (from onchanges) for that field, because we couldn't apply them before knowing the type of that field. Before this commit, the function that applies the raw changes was called recursively on the dataPoint and all its children (thus on the x2many list datapoint), which produced a crash as this function is designed to work on dataPoints of type record. Actually, calling it on sub datapoints is useless, as it properly works recursively, and applies raw changes on x2many fields itself when necessary. This commit ensures that we don't call this function on list datapoints anymore. Closes #62334 OPW 2389991 closes odoo/odoo#62399 Signed-off-by: Géry Debongnie (ged) <ged@openerp.com>
Diffstat (limited to 'addons/web/static/src/js')
-rw-r--r--addons/web/static/src/js/views/basic/basic_model.js8
1 files changed, 4 insertions, 4 deletions
diff --git a/addons/web/static/src/js/views/basic/basic_model.js b/addons/web/static/src/js/views/basic/basic_model.js
index 649dd3bb1c6..4a3a1930cb1 100644
--- a/addons/web/static/src/js/views/basic/basic_model.js
+++ b/addons/web/static/src/js/views/basic/basic_model.js
@@ -231,7 +231,7 @@ var BasicModel = AbstractModel.extend({
* @returns {Promise} resolved when the fieldInfo have been set on the given
* datapoint and all its children, and all rawChanges have been applied
*/
- addFieldsInfo: function (dataPointID, viewInfo) {
+ addFieldsInfo: async function (dataPointID, viewInfo) {
var dataPoint = this.localData[dataPointID];
dataPoint.fields = _.extend({}, dataPoint.fields, viewInfo.fields);
// complete the given fieldInfo with the fields of the main view, so
@@ -245,7 +245,9 @@ var BasicModel = AbstractModel.extend({
// so we might have stored changes for them (e.g. coming from onchange
// RPCs), that we haven't been able to process earlier (because those
// fields were unknown at that time). So we now try to process them.
- return this.applyRawChanges(dataPointID, viewInfo.viewType).then(() => {
+ if (dataPoint.type === 'record') {
+ await this.applyRawChanges(dataPointID, viewInfo.viewType);
+ }
const proms = [];
const fieldInfo = dataPoint.fieldsInfo[viewInfo.viewType];
// recursively apply the new field info on sub datapoints
@@ -278,8 +280,6 @@ var BasicModel = AbstractModel.extend({
});
}
return Promise.all(proms);
- });
-
},
/**
* Onchange RPCs may return values for fields that are not in the current