summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js/views/graph/graph_renderer.js
diff options
context:
space:
mode:
Diffstat (limited to 'addons/web/static/src/js/views/graph/graph_renderer.js')
-rw-r--r--addons/web/static/src/js/views/graph/graph_renderer.js32
1 files changed, 29 insertions, 3 deletions
diff --git a/addons/web/static/src/js/views/graph/graph_renderer.js b/addons/web/static/src/js/views/graph/graph_renderer.js
index f594a7fb131..017d0046998 100644
--- a/addons/web/static/src/js/views/graph/graph_renderer.js
+++ b/addons/web/static/src/js/views/graph/graph_renderer.js
@@ -45,7 +45,6 @@ var FORMAT_OPTIONS = {
},
};
-
var NO_DATA = [_t('No data')];
NO_DATA.isNoData = true;
@@ -71,6 +70,8 @@ return AbstractRenderer.extend({
this.chart = null;
this.chartId = _.uniqueId('chart');
+ // the bar charts are considered stackable a priori
+ this.isStackable = true;
this.$tooltip = null;
},
/**
@@ -460,7 +461,6 @@ return AbstractRenderer.extend({
display: !this.isEmbedded,
labelString: this.fields[this.state.measure].string,
},
- stacked: this.state.mode === 'bar' && this.state.stacked,
ticks: {
callback: this._formatValue.bind(this),
suggestedMin: 0,
@@ -761,9 +761,35 @@ return AbstractRenderer.extend({
// prepare data
var data = this._prepareData(dataPoints);
+
+ // The datapoints (with non zero value) can be grouped by
+ // their originIndex and associated labels.
+ // If at least one group formed in that way has two elements
+ // this.isStackable will be true.
+ var groupMemberCounts = data.labels.map(function () {
+ return {};
+ });
+ this.isStackable = false;
+ for (var i = 0; i < data.datasets.length; i++) {
+ var dataset = data.datasets[i];
+ var originIndex = dataset.originIndex;
+ if (this.isStackable) {
+ break;
+ }
+ for (var j = 0; j < dataset.data.length; j++) {
+ if (dataset.data[j]) {
+ if (originIndex in groupMemberCounts[j]) {
+ this.isStackable = true;
+ break;
+ } else {
+ groupMemberCounts[j][originIndex] = 1;
+ }
+ }
+ }
+ }
data.datasets.forEach(function (dataset, index) {
// used when stacked
- dataset.stack = self.state.stacked ? self.state.origins[dataset.originIndex] : undefined;
+ dataset.stack = self.isStackable && self.state.stacked ? self.state.origins[dataset.originIndex] : undefined;
// set dataset color
var color = self._getColor(index);
dataset.backgroundColor = color;