summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js/services
diff options
context:
space:
mode:
authorAdrien Dieudonne <adr@odoo.com>2017-08-28 09:15:15 +0200
committerAaron Bohy <aab@odoo.com>2017-09-01 14:30:06 +0200
commitc2563dbb0d84f28e76bd5b17e5d842383e3434ca (patch)
tree2b257f018b4a44e8f0e705b749908ad0a7a6b4ae /addons/web/static/src/js/services
parent0694caabfbb81df7c4956bd2b49e747271714305 (diff)
[FIX] web: BasicModel: correctly sort editable lists
This rev. fixes several issues with the sorting of dataPoints of type list in the BasicModel. First, only 'static' lists (i.e. x2many lists) must be sorted client-side, and results of search_read RPCs must remain unsorted as they are already retrieved sorted from the server. Second, editable and non-editable x2many lists don't behave the same with respect to sorting (we reproduced in this commit the behavior of saas-15). With editable lists, the edited rows are unsorted, except if the user explicitely ask for a sort (by clicking on a column header), until the form view is saved. With non-editable lists (as for x2many kanban), the sort is performed directly when a record is created or updated (as the edition is done from a dialog).
Diffstat (limited to 'addons/web/static/src/js/services')
-rw-r--r--addons/web/static/src/js/services/data_manager.js29
1 files changed, 17 insertions, 12 deletions
diff --git a/addons/web/static/src/js/services/data_manager.js b/addons/web/static/src/js/services/data_manager.js
index 77857ef2d31..105d7f30d69 100644
--- a/addons/web/static/src/js/services/data_manager.js
+++ b/addons/web/static/src/js/services/data_manager.js
@@ -305,18 +305,6 @@ return core.Class.extend({
viewType = viewType === 'tree' ? 'list' : viewType;
innerFieldsView.type = viewType;
attrs.views[viewType] = self._processFieldsView(_.extend({}, innerFieldsView));
-
- // default_order is like:
- // 'name,id desc'
- // but we need it like:
- // [{name: 'id', asc: false}, {name: 'name', asc: true}]
- var defaultOrder = innerFieldsView.arch.attrs.default_order;
- if (defaultOrder) {
- attrs.orderedBy = _.map(defaultOrder.split(','), function (order) {
- order = order.trim().split(' ');
- return {name: order[0], asc: order[1] !== 'desc'};
- });
- }
});
delete field.views;
}
@@ -346,6 +334,23 @@ return core.Class.extend({
}
}
attrs.mode = mode;
+ if (mode in attrs.views) {
+ var view = attrs.views[mode];
+ // process the default_order, which is like 'name,id desc'
+ // but we need it like [{name: 'name', asc: true}, {name: 'id', asc: false}]
+ var defaultOrder = view.arch.attrs.default_order;
+ if (defaultOrder) {
+ attrs.orderedBy = _.map(defaultOrder.split(','), function (order) {
+ order = order.trim().split(' ');
+ return {name: order[0], asc: order[1] !== 'desc'};
+ });
+ }
+ // detect editables list has they behave differently with respect
+ // to the sorting (changes are not sorted directly)
+ if (mode === 'list' && view.arch.attrs.editable) {
+ attrs.keepChangesUnsorted = true;
+ }
+ }
}
if (attrs.Widget.prototype.fieldsToFetch) {
attrs.viewType = 'default';