From 12fa4e565a734bd4e0be7cb83ff320f32cb4f33e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A9ry=20Debongnie?= Date: Fri, 5 Jan 2018 11:06:55 +0100 Subject: [REF] web: move _loadSubviews() from FormView ... as this function is only used by the FormView. --- addons/web/static/src/js/views/form/form_view.js | 64 ++++++++++++++++++++++++ 1 file changed, 64 insertions(+) (limited to 'addons/web/static/src/js/views/form') diff --git a/addons/web/static/src/js/views/form/form_view.js b/addons/web/static/src/js/views/form/form_view.js index 2851d3ac72a..548dfdc9624 100644 --- a/addons/web/static/src/js/views/form/form_view.js +++ b/addons/web/static/src/js/views/form/form_view.js @@ -2,6 +2,7 @@ odoo.define('web.FormView', function (require) { "use strict"; var BasicView = require('web.BasicView'); +var Context = require('web.Context'); var core = require('web.core'); var FormController = require('web.FormController'); var FormRenderer = require('web.FormRenderer'); @@ -52,6 +53,69 @@ var FormView = BasicView.extend({ getController: function (parent) { return this._loadSubviews(parent).then(this._super.bind(this, parent)); }, + + //-------------------------------------------------------------------------- + // Private + //-------------------------------------------------------------------------- + + /** + * Loads the subviews for x2many fields when they are not inline + * + * @private + * @param {Widget} parent the parent of the model, if it has to be created + * @returns {Deferred} + */ + _loadSubviews: function (parent) { + var self = this; + var defs = []; + if (this.loadParams && this.loadParams.fieldsInfo) { + var fields = this.loadParams.fields; + + _.each(this.loadParams.fieldsInfo.form, function (attrs, fieldName) { + var field = fields[fieldName]; + if (field.type !== 'one2many' && field.type !== 'many2many') { + return; + } + + if (attrs.Widget.prototype.useSubview && !attrs.__no_fetch && !attrs.views[attrs.mode]) { + var context = {}; + var regex = /'([a-z]*_view_ref)' *: *'(.*?)'/g; + var matches; + while (matches = regex.exec(attrs.context)) { + context[matches[1]] = matches[2]; + } + defs.push(parent.loadViews( + field.relation, + new Context(context, self.userContext, self.loadParams.context).eval(), + [[null, attrs.mode === 'tree' ? 'list' : attrs.mode]]) + .then(function (views) { + for (var viewName in views) { + attrs.views[viewName] = views[viewName]; + } + self._setSubViewLimit(attrs); + })); + } else { + self._setSubViewLimit(attrs); + } + }); + } + return $.when.apply($, defs); + }, + /** + * We set here the limit for the number of records fetched (in one page). + * This method is only called for subviews, not for main views. + * + * @private + * @param {Object} attrs + */ + _setSubViewLimit: function (attrs) { + var view = attrs.views && attrs.views[attrs.mode]; + var limit = view && view.arch.attrs.limit && parseInt(view.arch.attrs.limit); + if (!limit && attrs.widget === 'many2many_tags') { + limit = 1000; + } + attrs.limit = limit || 40; + }, }); return FormView; -- cgit v1.2.3