diff options
| author | Martin Geubelle <mge@odoo.com> | 2018-05-28 18:26:22 +0200 |
|---|---|---|
| committer | Martin Geubelle <mge@odoo.com> | 2018-05-29 15:55:05 +0200 |
| commit | 66ccc6503d3b02653f4631d08bc55d875a35501d (patch) | |
| tree | 1d55855ece869ffcfb6a77b52b163438c007779a /addons/web/static/src/js/views/basic | |
| parent | ecbafe92d22a2615f4ffa0a397a41548c0d59be4 (diff) | |
[IMP] web: correctly handle attributes on non inline view
Before this rev. the `column_invisible` and `default_order` attribute, set in a
x2m list view were only taken into account for inline views.
The technical reason behind is because non inline views are fetched after the
main view processing.
Non inline x2m list views now correctly handle these two attributes.
Diffstat (limited to 'addons/web/static/src/js/views/basic')
| -rw-r--r-- | addons/web/static/src/js/views/basic/basic_view.js | 65 |
1 files changed, 38 insertions, 27 deletions
diff --git a/addons/web/static/src/js/views/basic/basic_view.js b/addons/web/static/src/js/views/basic/basic_view.js index ad15931c6c6..22900e12d6b 100644 --- a/addons/web/static/src/js/views/basic/basic_view.js +++ b/addons/web/static/src/js/views/basic/basic_view.js @@ -276,33 +276,7 @@ var BasicView = AbstractView.extend({ attrs.mode = mode; if (mode in attrs.views) { var view = attrs.views[mode]; - var defaultOrder = view.arch.attrs.default_order; - if (defaultOrder) { - // process the default_order, which is like 'name,id desc' - // but we need it like [{name: 'name', asc: true}, {name: 'id', asc: false}] - attrs.orderedBy = _.map(defaultOrder.split(','), function (order) { - order = order.trim().split(' '); - return {name: order[0], asc: order[1] !== 'desc'}; - }); - } else { - // if there is a field with widget `handle`, the x2many - // needs to be ordered by this field to correctly display - // the records - var handleField = _.find(view.arch.children, function (child) { - return child.attrs && child.attrs.widget === 'handle'; - }); - if (handleField) { - attrs.orderedBy = [{name: handleField.attrs.name, asc: true}]; - } - } - - attrs.columnInvisibleFields = {}; - _.each(view.arch.children, function (child) { - if (child.attrs && child.attrs.modifiers) { - attrs.columnInvisibleFields[child.attrs.name] = - child.attrs.modifiers.column_invisible || false; - } - }); + this._processSubViewAttrs(view, attrs); } } if (attrs.Widget.prototype.fieldsToFetch) { @@ -398,6 +372,43 @@ var BasicView = AbstractView.extend({ } return node.tag !== 'arch'; }, + /** + * Processes in place the subview attributes (in particular, + * `default_order``and `column_invisible`). + * + * @private + * @param {Object} view - the field subview + * @param {Object} attrs - the field attributes (from the xml) + */ + _processSubViewAttrs: function (view, attrs) { + var defaultOrder = view.arch.attrs.default_order; + if (defaultOrder) { + // process the default_order, which is like 'name,id desc' + // but we need it like [{name: 'name', asc: true}, {name: 'id', asc: false}] + attrs.orderedBy = _.map(defaultOrder.split(','), function (order) { + order = order.trim().split(' '); + return {name: order[0], asc: order[1] !== 'desc'}; + }); + } else { + // if there is a field with widget `handle`, the x2many + // needs to be ordered by this field to correctly display + // the records + var handleField = _.find(view.arch.children, function (child) { + return child.attrs && child.attrs.widget === 'handle'; + }); + if (handleField) { + attrs.orderedBy = [{name: handleField.attrs.name, asc: true}]; + } + } + + attrs.columnInvisibleFields = {}; + _.each(view.arch.children, function (child) { + if (child.attrs && child.attrs.modifiers) { + attrs.columnInvisibleFields[child.attrs.name] = + child.attrs.modifiers.column_invisible || false; + } + }); + }, }); return BasicView; |
