diff options
| author | Géry Debongnie <ged@odoo.com> | 2014-06-16 10:44:23 +0200 |
|---|---|---|
| committer | Géry Debongnie <ged@odoo.com> | 2014-06-16 10:44:23 +0200 |
| commit | 5f09c7dedc6f4a60a1b42858324990aa35084f10 (patch) | |
| tree | 855f14ffd5d7ee07ad449c17c1a179693f1dc90f /addons/web/static/src/js/data.js | |
| parent | abf4ca3120a28279f5860adf6321fa832d84fc7a (diff) | |
[IMP] improves sorting mechanisms in datasets
Create a deserialize_sort method and add a set_sort method to
datasets. The set_sort method is useful to avoid duplicating code
in lists and kanban views (to set the initial default order)
Diffstat (limited to 'addons/web/static/src/js/data.js')
| -rw-r--r-- | addons/web/static/src/js/data.js | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/addons/web/static/src/js/data.js b/addons/web/static/src/js/data.js index 6819634655d..f580d282516 100644 --- a/addons/web/static/src/js/data.js +++ b/addons/web/static/src/js/data.js @@ -21,6 +21,17 @@ instance.web.serialize_sort = function (criterion) { }).join(', '); }; +/** + * Reverse of the serialize_sort function: convert an array of SQL-like sort + * descriptors into a list of fields prefixed with '-' if necessary. + */ + instance.web.deserialize_sort = function (criterion) { + return _.map(criterion, function (criteria) { + var split = _.without(criteria.split(' '), ''); + return (split[1] && split[1].toLowerCase() === 'desc' ? '-' : '') + split[0]; + }); +}; + instance.web.Query = instance.web.Class.extend({ init: function (model, fields) { this._model = model; @@ -685,6 +696,15 @@ instance.web.DataSet = instance.web.Class.extend(instance.web.PropertiesMixin, this._sort.unshift((reverse ? '-' : '') + field); return undefined; }, + /** + * Set the sort criteria on the dataset. + * + * @param {Array} fields_list: list of fields order descriptors, as used by + * Odoo's ORM (such as 'name desc', 'product_id', 'order_date asc') + */ + set_sort: function (fields_list) { + this._sort = instance.web.deserialize_sort(fields_list); + }, size: function () { return this.ids.length; }, |
