summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js/views/basic/basic_model.js
diff options
context:
space:
mode:
authorqsm-odoo <qsm@odoo.com>2017-09-14 23:51:48 +0200
committerqsm-odoo <qsm@odoo.com>2017-09-14 23:51:48 +0200
commit814304a227a43a4b19552298b343575c77c6b398 (patch)
tree18f7ec62c340b1e6e63e5520565b0bd4b7d8a10c /addons/web/static/src/js/views/basic/basic_model.js
parent8496a314219f8013db025bd960632c9dfe27d24f (diff)
parent33f9e90bd5a9ad3e9239f1b414ea012bb94fa1c0 (diff)
[MERGE] web, *: add kanban column progressbar feature
* crm, project See last merge commit for detail. Work started by @pat-odoo and @stefanorigano
Diffstat (limited to 'addons/web/static/src/js/views/basic/basic_model.js')
-rw-r--r--addons/web/static/src/js/views/basic/basic_model.js38
1 files changed, 25 insertions, 13 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 d3a60ac3044..bcccefbb984 100644
--- a/addons/web/static/src/js/views/basic/basic_model.js
+++ b/addons/web/static/src/js/views/basic/basic_model.js
@@ -1576,7 +1576,7 @@ var BasicModel = AbstractModel.extend({
if (change.id) {
relRecord = self.localData[change.id];
}
- switch(change.operation) {
+ switch (change.operation) {
case 'ADD':
list.count++;
var resID = relRecord ? relRecord.res_id : change.resID;
@@ -1666,7 +1666,7 @@ var BasicModel = AbstractModel.extend({
var result = {};
var self = this;
var evalContext;
- function evalModifier (mod) {
+ function evalModifier(mod) {
if (mod === undefined || mod === false || mod === true) {
return !!mod;
}
@@ -2775,7 +2775,7 @@ var BasicModel = AbstractModel.extend({
var context = _.extend({}, record.data, record._changes);
// calls _generateX2ManyCommands for a given field, and returns the array of commands
- function _generateX2ManyCommands (fieldName) {
+ function _generateX2ManyCommands(fieldName) {
var commands = self._generateX2ManyCommands(record, {fieldNames: [fieldName]});
return commands[fieldName];
}
@@ -2903,14 +2903,20 @@ var BasicModel = AbstractModel.extend({
* @param {Object} dataPoint some local resource
* @param {Object} [options]
* @param {string[]} [options.fieldNames] the fields to fetch for a record
+ * @param {boolean} [options.onlyGroups=false]
* @returns {Deferred}
*/
_load: function (dataPoint, options) {
+ if (options && options.onlyGroups &&
+ !(dataPoint.type === 'list' && dataPoint.groupedBy.length)) {
+ return $.when(dataPoint);
+ }
+
if (dataPoint.type === 'record') {
return this._fetchRecord(dataPoint, options);
}
if (dataPoint.type === 'list' && dataPoint.groupedBy.length) {
- return this._readGroup(dataPoint);
+ return this._readGroup(dataPoint, options);
}
if (dataPoint.type === 'list' && !dataPoint.groupedBy.length) {
return this._fetchUngroupedList(dataPoint);
@@ -3349,9 +3355,10 @@ var BasicModel = AbstractModel.extend({
* were open before.
*
* @param {Object} list valid resource object
+ * @param {Object} [options] @see _load
* @returns {Deferred<Object>} resolves to the fetched group object
*/
- _readGroup: function (list) {
+ _readGroup: function (list, options) {
var self = this;
var groupByField = list.groupedBy[0];
var rawGroupBy = groupByField.split(':')[0];
@@ -3406,26 +3413,31 @@ var BasicModel = AbstractModel.extend({
type: 'list',
viewType: list.viewType,
});
- list.data.push(newGroup.id);
- list.count += newGroup.count;
var oldGroup = _.find(previousGroups, function (g) {
return g.res_id === newGroup.res_id && g.value === newGroup.value;
});
if (oldGroup) {
// restore the internal state of the group
- _.extend(newGroup, _.pick(oldGroup, 'limit', 'isOpen', 'offset'));
- // if the group is open and contains subgroups, also
- // restore its data to keep internal state of sub-groups
- if (newGroup.isOpen && newGroup.groupedBy.length) {
- newGroup.data = oldGroup.data;
+ delete self.localData[newGroup.id];
+ var updatedProps = _.omit(newGroup, 'limit', 'isOpen', 'offset', 'id');
+ if (options && options.onlyGroups || oldGroup.isOpen && newGroup.groupedBy.length) {
+ // If the group is opened and contains subgroups,
+ // also keep its data to keep internal state of
+ // sub-groups
+ // Also keep data if we only reload groups' own data
+ delete updatedProps.data;
}
+ _.extend(oldGroup, updatedProps);
+ newGroup = oldGroup;
} else if (!newGroup.openGroupByDefault) {
newGroup.isOpen = false;
} else {
newGroup.isOpen = '__fold' in group ? !group.__fold : true;
}
+ list.data.push(newGroup.id);
+ list.count += newGroup.count;
if (newGroup.isOpen && newGroup.count > 0) {
- defs.push(self._load(newGroup));
+ defs.push(self._load(newGroup, options));
}
});
return $.when.apply($, defs).then(function () {