Skip to content

Commit

Permalink
Correctly handle stacked groups when not adjacent (#4937)
Browse files Browse the repository at this point in the history
Only the dataset index was used for indexing the stack
  • Loading branch information
jcopperfield authored and simonbrunel committed Nov 14, 2017
1 parent 683e86e commit 447ca40
Showing 1 changed file with 27 additions and 6 deletions.
33 changes: 27 additions & 6 deletions src/controllers/controller.bar.js
Expand Up @@ -201,10 +201,12 @@ module.exports = function(Chart) {
},

/**
* Returns the effective number of stacks based on groups and bar visibility.
* Returns the stacks based on groups and bar visibility.
* @param {Number} [last] - The dataset index
* @returns {Array} The stack list
* @private
*/
getStackCount: function(last) {
_getStacks: function(last) {
var me = this;
var chart = me.chart;
var scale = me.getIndexScale();
Expand All @@ -223,15 +225,33 @@ module.exports = function(Chart) {
}
}

return stacks.length;
return stacks;
},

/**
* Returns the effective number of stacks based on groups and bar visibility.
* @private
*/
getStackCount: function() {
return this._getStacks().length;
},

/**
* Returns the stack index for the given dataset based on groups and bar visibility.
* @param {Number} [datasetIndex] - The dataset index
* @param {String} [name] - The stack name to find
* @returns {Number} The stack index
* @private
*/
getStackIndex: function(datasetIndex) {
return this.getStackCount(datasetIndex) - 1;
getStackIndex: function(datasetIndex, name) {
var stacks = this._getStacks(datasetIndex);
var index = (name !== undefined)
? stacks.indexOf(name)
: -1; // indexOf returns -1 if element is not present

return (index === -1)
? stacks.length - 1
: index;
},

/**
Expand Down Expand Up @@ -312,7 +332,8 @@ module.exports = function(Chart) {
calculateBarIndexPixels: function(datasetIndex, index, ruler) {
var me = this;
var options = ruler.scale.options;
var stackIndex = me.getStackIndex(datasetIndex);
var meta = me.getMeta();
var stackIndex = me.getStackIndex(datasetIndex, meta.stack);
var pixels = ruler.pixels;
var base = pixels[index];
var length = pixels.length;
Expand Down

0 comments on commit 447ca40

Please sign in to comment.