diff options
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.js | 32 |
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; |
