[FIX] web: graph: don't lose initial groupby at reload

Before this rev., when a graph view was reloaded (e.g. by clicking
on the graph view switcher), the inital groupby was lost if it
didn't come from the searchview (i.e. if it came from the context
or from the arch). For instance, go to Sales > Reporting > Sales
(the view is grouped by 'date', and there are two groups), reload
by clicking on the graph view switcher: there is only one group
left.

The reload RPC was actually fine. What was wrong is the 'state'
object given to the renderer after the reload, as it didn't contain
the correct groupby, so the view wasn't correctly re-rendered.
This commit is contained in:
Aaron Bohy
2017-12-22 15:43:04 +01:00
parent c0769c753c
commit 4f4e686fb2
2 changed files with 39 additions and 6 deletions
@@ -67,7 +67,6 @@ return AbstractModel.extend({
domain: params.domain,
context: params.context,
};
this.defaultGroupedBy = params.groupedBy;
return this._loadGraph();
},
/**
@@ -96,7 +95,7 @@ return AbstractModel.extend({
this.chart.domain = params.domain;
}
if ('groupBy' in params) {
this.chart.groupedBy = params.groupBy.length ? params.groupBy : this.defaultGroupedBy;
this.chart.groupedBy = params.groupBy.length ? params.groupBy : this.initialGroupBys;
}
if ('measure' in params) {
this.chart.measure = params.measure;
@@ -121,7 +120,7 @@ return AbstractModel.extend({
* @returns {Deferred}
*/
_loadGraph: function () {
var groupedBy = this.chart.groupedBy.length ? this.chart.groupedBy : this.initialGroupBys;
var groupedBy = this.chart.groupedBy;
var fields = _.map(groupedBy, function (groupBy) {
return groupBy.split(':')[0];
});
+37 -3
View File
@@ -90,7 +90,6 @@ QUnit.module('Views', {
});
});
QUnit.test('default type attribute', function (assert) {
assert.expect(1);
@@ -106,7 +105,6 @@ QUnit.module('Views', {
graph.destroy();
});
QUnit.test('switching mode', function (assert) {
assert.expect(6);
@@ -191,7 +189,6 @@ QUnit.module('Views', {
});
});
QUnit.test('no content helper', function (assert) {
var done = assert.async();
assert.expect(4);
@@ -442,6 +439,43 @@ QUnit.module('Views', {
graph.destroy();
});
QUnit.test('initial groupby is kept when reloading', function (assert) {
var done = assert.async();
assert.expect(4);
var graph = createView({
View: GraphView,
model: 'foo',
data: this.data,
arch: '<graph>' +
'<field name="product_id" type="row"/>' +
'<field name="foo" type="measure"/>' +
'</graph>',
mockRPC: function (route, args) {
if (args.method === 'read_group') {
assert.deepEqual(args.kwargs.groupby, ['product_id'],
"should group by the correct field");
}
return this._super.apply(this, arguments);
},
});
return concurrency.delay(0).then(function () {
assert.strictEqual(graph.$('.nv-groups rect').length, 2,
"should display two groups");
graph.reload({groupBy: []});
return concurrency.delay(0).then(function () {
assert.strictEqual(graph.$('.nv-groups rect').length, 2,
"should still display two groups");
graph.destroy();
done();
});
});
});
});
});