[FIX] Fixed folding + state management

bzr revid: fme@openerp.com-20111104212036-yet6hw89633qm7kq
This commit is contained in:
Fabien Meghazi 2011-11-04 22:20:36 +01:00
parent ae080837bf
commit 5db3d4e095
2 changed files with 36 additions and 32 deletions

View File

@ -16,8 +16,10 @@ openerp.web_kanban.KanbanView = openerp.web.View.extend({
this.fields_view = {};
this.fields_keys = [];
this.group_by = null;
this.records_states = {};
this.groups_states = {};
this.state = {
groups : {},
records : {}
};
this.groups = [];
this.nr_columns = 3;
this.form_dialog = new openerp.web.FormDialog(this, {}, this.options.action_views_ids.form, dataset).start();
@ -143,7 +145,8 @@ openerp.web_kanban.KanbanView = openerp.web.View.extend({
remaining = groups.length - 1,
groups_array = [];
_.each(groups, function (group, index) {
var group_name = group_value = group.value,
var group_name = group.value,
group_value = group.value,
group_aggregates = {};
if (group.value instanceof Array) {
group_name = group.value[1];
@ -155,7 +158,7 @@ openerp.web_kanban.KanbanView = openerp.web.View.extend({
var dataset = new openerp.web.DataSetSearch(self, self.dataset.model, group.context, group.domain);
dataset.read_slice(self.fields_keys, {'domain': group.domain, 'context': group.context}, function(records) {
self.dataset.ids.push.apply(self.dataset.ids, dataset.ids);
groups_array[index] = new openerp.web_kanban.KanbanGroup(self, group_value, group_name, records, group_aggregates);
groups_array[index] = new openerp.web_kanban.KanbanGroup(self, records, group_value, group_name, group_aggregates);
if (!remaining--) {
self.dataset.index = self.dataset.ids.length ? 0 : null;
self.do_add_groups(groups_array);
@ -177,7 +180,7 @@ openerp.web_kanban.KanbanView = openerp.web.View.extend({
}
}
for (var i = 0; i < groups.length; i++) {
groups[i] = new openerp.web_kanban.KanbanGroup(self, false, false, _.compact(groups[i]));
groups[i] = new openerp.web_kanban.KanbanGroup(self, _.compact(groups[i]));
}
self.do_add_groups(groups);
});
@ -190,7 +193,7 @@ openerp.web_kanban.KanbanView = openerp.web.View.extend({
group.stop();
});
this.groups = [];
//this.$element.find('.oe_kanban_groups_headers, .oe_kanban_groups_records').empty();
this.$element.find('.oe_kanban_groups_headers, .oe_kanban_groups_records').empty();
},
do_add_groups: function(groups) {
var self = this;
@ -266,7 +269,7 @@ openerp.web_kanban.KanbanView = openerp.web.View.extend({
openerp.web_kanban.KanbanGroup = openerp.web.Widget.extend({
template: 'KanbanView.group_header',
init: function (parent, value, title, records, aggregates) {
init: function (parent, records, value, title, aggregates) {
var self = this;
this._super(parent);
this.view = parent;
@ -277,16 +280,13 @@ openerp.web_kanban.KanbanGroup = openerp.web.Widget.extend({
this.undefined_title = true;
}
this.aggregates = aggregates || {};
this.state = {};
if (title || value) {
var key = '' + this.view.group_by + '' + value;
if (!this.view.groups_states[key]) {
this.view.groups_states[key] = {
folded: false
}
var key = this.view.group_by + '-' + value;
if (!this.view.state.groups[key]) {
this.view.state.groups[key] = {
folded: false
}
this.state = this.view.groups_states[key];
}
this.state = this.view.state.groups[key];
this.$records = null;
this.records = _.map(records, function(record) {
return new openerp.web_kanban.KanbanRecord(self, record);
@ -314,7 +314,9 @@ openerp.web_kanban.KanbanGroup = openerp.web.Widget.extend({
},
stop: function() {
this._super();
this.$records.remove();
if (this.$records) {
this.$records.remove();
}
},
remove_record: function(id, remove_from_dataset) {
for (var i = 0, ii = this.records.length; i < ii; i++) {
@ -352,12 +354,12 @@ openerp.web_kanban.KanbanRecord = openerp.web.Widget.extend({
this.view = parent.view;
this.id = null;
this.set_record(record);
if (!this.view.records_states[this.id]) {
this.view.records_states[this.id] = {
if (!this.view.state.records[this.id]) {
this.view.state.records[this.id] = {
folded: false
};
}
this.state = this.view.records_states[this.id];
this.state = this.view.state.records[this.id];
},
set_record: function(record) {
this.id = record.id;
@ -396,7 +398,7 @@ openerp.web_kanban.KanbanRecord = openerp.web.Widget.extend({
bind_events: function() {
var self = this,
$show_on_click = self.$element.find('.oe_kanban_box_show_onclick');
$show_on_click.toggle(self.state.folded);
$show_on_click.toggle(this.state.folded);
this.$element.find('.oe_kanban_box_show_onclick_trigger').click(function() {
$show_on_click.toggle();
self.state.folded = !self.state.folded;

View File

@ -13,19 +13,21 @@
</div>
</t>
<t t-name="KanbanView.group_header">
<td class="oe_kanban_group_header" t-if="widget.view.group_by">
<div class="oe_kanban_fold_icon"></div>
<div class="oe_fold_column">
<div t-attf-class="oe_kanban_group_title #{widget.undefined_title ? 'oe_kanban_group_title_undefined' : ''}">
<t t-esc="widget.title"/>
<td class="oe_kanban_group_header">
<t t-if="widget.view.group_by">
<div class="oe_kanban_fold_icon"></div>
<div class="oe_fold_column">
<div t-attf-class="oe_kanban_group_title #{widget.undefined_title ? 'oe_kanban_group_title_undefined' : ''}">
<t t-esc="widget.title"/>
</div>
<ul class="oe_kanban_aggregates">
<li t-foreach="widget.aggregates" t-as="aggregate">
<span><t t-esc="aggregate"/>:</span> <t t-esc="aggregate_value"/>
</li>
</ul>
</div>
<ul class="oe_kanban_aggregates">
<li t-foreach="widget.aggregates" t-as="aggregate">
<span><t t-esc="aggregate"/>:</span> <t t-esc="aggregate_value"/>
</li>
</ul>
</div>
<p t-if="widget.title" class="oe_kanban_group_title_vertical"><t t-esc="widget.title"/></p>
<p t-if="widget.title" class="oe_kanban_group_title_vertical"><t t-esc="widget.title"/></p>
</t>
</td>
</t>
<t t-name="KanbanView.group_records_container">