[MERGE] web_graph: multiple fixes to search facet sync + performance optimizations and cleanup
bzr revid: odo@openerp.com-20140226155711-fx9pgaa72buyu7gi
This commit is contained in:
commit
d3bbda62bc
|
@ -1,3 +1,11 @@
|
|||
.graph_pivot_mode {
|
||||
position:initial;
|
||||
}
|
||||
|
||||
.graph_chart_mode {
|
||||
position:relative;
|
||||
}
|
||||
|
||||
.graph_main_content td {
|
||||
font-size: 12px;
|
||||
margin: 45px;
|
||||
|
|
|
@ -81,9 +81,9 @@ instance.web_graph.GraphView = instance.web.View.extend({
|
|||
this.ignore_do_search = false;
|
||||
return;
|
||||
}
|
||||
|
||||
var self = this,
|
||||
col_group_by = self.get_groupbys_from_searchview('ColGroupBy', 'col_group_by');
|
||||
groupbys = this.get_groupbys_from_searchview(),
|
||||
col_group_by = groupbys.col_group_by;
|
||||
|
||||
if (!this.graph_widget) {
|
||||
if (group_by.length) {
|
||||
|
@ -95,10 +95,10 @@ instance.web_graph.GraphView = instance.web.View.extend({
|
|||
this.graph_widget = new openerp.web_graph.Graph(this, this.model, domain, this.widget_config);
|
||||
this.graph_widget.appendTo(this.$el);
|
||||
this.ViewManager.on('switch_mode', this, function (e) {
|
||||
var col_gb = self.get_groupbys_from_searchview('ColGroupBy', 'col_group_by'),
|
||||
row_gb = self.get_groupbys_from_searchview('GroupBy', 'group_by');
|
||||
|
||||
if (e === 'graph') this.graph_widget.set(domain, row_gb, col_gb);
|
||||
if (e === 'graph') {
|
||||
var group_bys = self.get_groupbys_from_searchview();
|
||||
this.graph_widget.set(domain, group_bys.group_by, group_bys.col_group_by);
|
||||
}
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
@ -106,19 +106,27 @@ instance.web_graph.GraphView = instance.web.View.extend({
|
|||
this.graph_widget.set(domain, group_by, col_group_by);
|
||||
},
|
||||
|
||||
extract_groupby: function (cat_field, context) {
|
||||
context = (_.isString(context)) ? py.eval(context) : context;
|
||||
return context[cat_field];
|
||||
},
|
||||
get_groupbys_from_searchview: function () {
|
||||
var result = { group_by: [], col_group_by: []},
|
||||
searchdata = this.search_view.build_search_data();
|
||||
|
||||
get_groupbys_from_searchview: function (cat_name, cat_field) {
|
||||
var self=this,
|
||||
facet = this.search_view.query.findWhere({category:cat_name}),
|
||||
groupby_list = facet ? facet.values.models : [];
|
||||
return _.map(groupby_list, function (g) {
|
||||
var context = g.attributes.value.attrs.context;
|
||||
return self.extract_groupby(cat_field, context);
|
||||
_.each(searchdata.groupbys, function (data) {
|
||||
data = (_.isString(data)) ? py.eval(data) : data;
|
||||
result.group_by = result.group_by.concat(data.group_by);
|
||||
if (data.col_group_by) {
|
||||
result.col_group_by = result.col_group_by.concat(data.col_group_by);
|
||||
}
|
||||
});
|
||||
|
||||
if (result.col_group_by.length) {
|
||||
return result;
|
||||
}
|
||||
_.each(searchdata.contexts, function (context) {
|
||||
if (context.col_group_by) {
|
||||
result.col_group_by = result.col_group_by.concat(context.col_group_by);
|
||||
}
|
||||
});
|
||||
return result;
|
||||
},
|
||||
|
||||
do_show: function () {
|
||||
|
@ -132,11 +140,20 @@ instance.web_graph.GraphView = instance.web.View.extend({
|
|||
|
||||
// add groupby to the search view
|
||||
register_groupby: function(row_groupby, col_groupby) {
|
||||
var query = this.search_view.query;
|
||||
var query = this.search_view.query,
|
||||
groupbys = this.get_groupbys_from_searchview(),
|
||||
search_row_groupby = groupbys.group_by,
|
||||
search_col_groupby = groupbys.col_group_by,
|
||||
row_gb_changed = !_.isEqual(_.pluck(row_groupby, 'field'), search_row_groupby),
|
||||
col_gb_changed = !_.isEqual(_.pluck(col_groupby, 'field'), search_col_groupby);
|
||||
|
||||
if (!_.has(this.search_view, '_s_groupby')) { return; }
|
||||
|
||||
if (row_groupby.length && col_groupby.length) {
|
||||
if (!row_gb_changed && !col_gb_changed) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (row_gb_changed && col_gb_changed) {
|
||||
// when two changes to the search view will be done, the method do_search
|
||||
// will be called twice, once with the correct groupby and incorrect col_groupby,
|
||||
// and once with correct informations. This flag is necessary to prevent the
|
||||
|
@ -144,6 +161,7 @@ instance.web_graph.GraphView = instance.web.View.extend({
|
|||
this.ignore_do_search = true;
|
||||
}
|
||||
|
||||
if (row_gb_changed) {
|
||||
// add row groupbys
|
||||
var row_facet = this.make_row_groupby_facets(row_groupby),
|
||||
row_search_facet = query.findWhere({category:'GroupBy'});
|
||||
|
@ -155,6 +173,9 @@ instance.web_graph.GraphView = instance.web.View.extend({
|
|||
query.add(row_facet);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (col_gb_changed) {
|
||||
// add col groupbys
|
||||
var col_facet = this.make_col_groupby_facets(col_groupby),
|
||||
col_search_facet = query.findWhere({category:'ColGroupBy'});
|
||||
|
@ -166,6 +187,7 @@ instance.web_graph.GraphView = instance.web.View.extend({
|
|||
query.add(col_facet);
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
make_row_groupby_facets: function(groupbys) {
|
||||
|
|
|
@ -37,6 +37,9 @@ openerp.web_graph.Graph = openerp.web.Widget.extend({
|
|||
|
||||
if (this.mode !== 'pivot') {
|
||||
this.$('.graph_heatmap label').addClass('disabled');
|
||||
this.$('.graph_main_content').addClass('graph_chart_mode');
|
||||
} else {
|
||||
this.$('.graph_main_content').addClass('graph_pivot_mode');
|
||||
}
|
||||
|
||||
return this.model.call('fields_get', []).then(function (f) {
|
||||
|
@ -149,6 +152,13 @@ openerp.web_graph.Graph = openerp.web.Widget.extend({
|
|||
return;
|
||||
}
|
||||
|
||||
if (!dom_changed && col_reduced && row_reduced) {
|
||||
this.pivot.fold_with_depth(this.pivot.rows, row_gbs.length);
|
||||
this.pivot.fold_with_depth(this.pivot.cols, col_gbs.length);
|
||||
this.display_data();
|
||||
return;
|
||||
}
|
||||
|
||||
if (dom_changed || row_gb_changed || col_gb_changed) {
|
||||
this.pivot.set(domain, row_gbs, col_gbs).then(this.proxy('display_data'));
|
||||
}
|
||||
|
@ -159,8 +169,10 @@ openerp.web_graph.Graph = openerp.web.Widget.extend({
|
|||
|
||||
if (mode === 'pivot') {
|
||||
this.$('.graph_heatmap label').removeClass('disabled');
|
||||
this.$('.graph_main_content').removeClass('graph_chart_mode').addClass('graph_pivot_mode');
|
||||
} else {
|
||||
this.$('.graph_heatmap label').addClass('disabled');
|
||||
this.$('.graph_main_content').removeClass('graph_pivot_mode').addClass('graph_chart_mode');
|
||||
}
|
||||
this.display_data();
|
||||
},
|
||||
|
@ -364,7 +376,7 @@ openerp.web_graph.Graph = openerp.web.Widget.extend({
|
|||
this.$('.graph_main_content svg').remove();
|
||||
this.$('.graph_main_content div').remove();
|
||||
this.table.empty();
|
||||
this.table.toggleClass('heatmap', this.heatmap_mode !== 'none')
|
||||
this.table.toggleClass('heatmap', this.heatmap_mode !== 'none');
|
||||
this.width = this.$el.width();
|
||||
this.height = Math.min(Math.max(document.documentElement.clientHeight - 116 - 60, 250), Math.round(0.8*this.$el.width()));
|
||||
|
||||
|
|
Loading…
Reference in New Issue