[IMP]expand all and render all records with at one time.

bzr revid: vme@tinyerp.com-20120703121914-yf9hbri57grukuff
This commit is contained in:
Vidhin Mehta (OpenERP)
2012-07-03 17:49:14 +05:30
parent 9e952c3fba
commit f37d079da6
2 changed files with 48 additions and 37 deletions
+46 -35
View File
@@ -63,6 +63,13 @@ instance.web.TreeView = instance.web.View.extend(/** @lends instance.web.TreeVie
}
return fields;
},
store_record:function(records){
var self = this;
_(records).each(function (record) {
console.log(record.id);
self.records[record.id] = record;
});
},
on_loaded: function (fields_view) {
var self = this;
var has_toolbar = !!fields_view.arch.attrs.toolbar;
@@ -87,17 +94,19 @@ instance.web.TreeView = instance.web.View.extend(/** @lends instance.web.TreeVie
this.$element.addClass(this.fields_view.arch.attrs['class']);
this.dataset.read_slice(this.fields_list()).then(function(records) {
self.store_record(records);
if (!has_toolbar) {
// WARNING: will do a second read on the same ids, but only on
// first load so not very important
self.getdata(null, _(records).pluck('id'));
self.render_data({'null':records})
self.getdata(_.pluck(records,"id"));
return;
}
var $select = self.$element.find('select')
.change(function () {
var $option = $(this).find(':selected');
self.getdata($option.val(), $option.data('children'));
self.getdata($option.val());
});
_(records).each(function (record) {
self.records[record.id] = record;
@@ -134,6 +143,11 @@ instance.web.TreeView = instance.web.View.extend(/** @lends instance.web.TreeVie
}).value();
},
expand_all: function(){
var self = this;
var tr = this.$element.find(".oe-treeview-table tbody tr[id^='treerow_']");
_.each(tr,function(rec){
self.showcontent($(rec).attr('data-id'),true);
});
},
collpase_all: function(){
var self = this;
@@ -180,50 +194,45 @@ instance.web.TreeView = instance.web.View.extend(/** @lends instance.web.TreeVie
});
this.$element.delegate('.treeview-tr', 'click', function () {
var is_loaded = 0,
$this = $(this),
var $this = $(this),
record_id = $this.data('id'),
record = self.records[record_id],
children_ids = record[self.children_field];
_(children_ids).each(function(childid) {
if (self.$element.find('#treerow_' + childid).length) {
if (self.$element.find('#treerow_' + childid).is(':hidden')) {
is_loaded = -1;
} else {
is_loaded++;
}
}
});
if (is_loaded === 0) {
if (!$this.parent().hasClass('oe_open')) {
self.getdata(record_id, children_ids);
}
} else {
self.showcontent(record_id, is_loaded < 0);
}
bool = $this.parent().hasClass('oe_open');
self.showcontent(record_id, !bool);
});
},
// get child data of selected value
getdata: function (id, children_ids) {
getdata: function (id) {
var self = this;
self.dataset.read_ids(children_ids, this.fields_list()).then(function(records) {
_(records).each(function (record) {
self.records[record.id] = record;
});
var $curr_node = self.$element.find('#treerow_' + id);
var parent_child ={};
id = _.isArray(id)?id:parseInt(id);
var ir_model_data = new instance.web.Model(this.model,{},[['id','child_of',id]]).query();
ir_model_data._execute().then(function(records){
self.store_record(records);
_.each(records,function(rec){
if(rec[self.children_field].length === 0)return;
parent_child[rec.id] = [];
_.each(rec[self.children_field],function(key){
parent_child[rec.id].push(self.records[key]);
});
})
self.render_data(parent_child);
});
},
render_data: function(groupby){
var self = this;
console.log(groupby);
_.each(_.keys(groupby),function(key){
var $curr_node = self.$element.find('#treerow_' + key);
var record = groupby[key];
var children_rows = QWeb.render('TreeView.rows', {
'records': records,
'records': record,
'children_field': self.children_field,
'fields_view': self.fields_view.arch.children,
'fields': self.fields,
'level': $curr_node.data('level') || 0,
'level': ($curr_node.data('level') || 0) + 1,
'render': instance.web.format_value,
'color_for': self.color_for
});
if ($curr_node.length) {
$curr_node.addClass('oe_open');
$curr_node.after(children_rows);
@@ -231,8 +240,10 @@ instance.web.TreeView = instance.web.View.extend(/** @lends instance.web.TreeVie
self.$element.find('tbody').html(children_rows);
}
});
self.collpase_all();
},
// Get details in listview
activate: function(id) {
var self = this;
@@ -254,7 +265,7 @@ instance.web.TreeView = instance.web.View.extend(/** @lends instance.web.TreeVie
}
return self.rpc('/web/session/eval_domain_and_context', {
contexts: [c], domains: []
}).pipe(function (res) {
}).pipe(function (res) {records
action.context = res.context;
return self.do_action(action);
}, null);
+2 -2
View File
@@ -556,11 +556,11 @@
<tr t-name="TreeView.rows"
t-foreach="records" t-as="record"
t-att-id="'treerow_' + record.id"
t-att-data-id="record.id" t-att-data-level="level + 1">
t-att-data-id="record.id" t-att-data-level="level">
<t t-set="children" t-value="record[children_field]"/>
<t t-set="class" t-value="children and children.length ? 'treeview-tr' : 'treeview-td'"/>
<t t-set="rank" t-value="'oe-treeview-first'"/>
<t t-set="style" t-value="'background-position: ' + 19*level + 'px; padding-left: ' + 19*level + 'px;'"/>
<t t-set="style" t-value="'background-position: ' + 19*(level-1) + 'px; padding-left: ' + 19*(level-1) + 'px;'"/>
<td t-foreach="fields_view" t-as="field"
t-if="!field.attrs.modifiers.tree_invisible"