@@ -114,6 +114,14 @@ function computeFlexCategoryTraits(index, ruler, options) {
114114 } ;
115115}
116116
117+ function getMatchingVisibleMetas ( scale ) {
118+ var isHorizontal = scale . isHorizontal ( ) ;
119+ return scale . chart . _getSortedVisibleDatasetMetas ( )
120+ . filter ( function ( meta ) {
121+ return meta . bar && isHorizontal ? meta . xAxisID === scale . id : meta . yAxisID === scale . id ;
122+ } ) ;
123+ }
124+
117125module . exports = DatasetController . extend ( {
118126
119127 dataElementType : elements . Rectangle ,
@@ -210,19 +218,23 @@ module.exports = DatasetController.extend({
210218 var me = this ;
211219 var chart = me . chart ;
212220 var scale = me . _getIndexScale ( ) ;
221+ var metasets = chart . _getSortedVisibleDatasetMetas ( ) ;
213222 var stacked = scale . options . stacked ;
214- var ilen = last === undefined ? chart . data . datasets . length : last + 1 ;
223+ var ilen = metasets . length ;
215224 var stacks = [ ] ;
216225 var i , meta ;
217226
218227 for ( i = 0 ; i < ilen ; ++ i ) {
219- meta = chart . getDatasetMeta ( i ) ;
220- if ( meta . bar && chart . isDatasetVisible ( i ) &&
228+ meta = metasets [ i ] ;
229+ if ( meta . bar &&
221230 ( stacked === false ||
222231 ( stacked === true && stacks . indexOf ( meta . stack ) === - 1 ) ||
223232 ( stacked === undefined && ( meta . stack === undefined || stacks . indexOf ( meta . stack ) === - 1 ) ) ) ) {
224233 stacks . push ( meta . stack ) ;
225234 }
235+ if ( meta . index === last ) {
236+ break ;
237+ }
226238 }
227239
228240 return stacks ;
@@ -297,24 +309,26 @@ module.exports = DatasetController.extend({
297309 var scale = me . _getValueScale ( ) ;
298310 var isHorizontal = scale . isHorizontal ( ) ;
299311 var datasets = chart . data . datasets ;
312+ var metasets = getMatchingVisibleMetas ( scale ) ;
300313 var value = scale . _parseValue ( datasets [ datasetIndex ] . data [ index ] ) ;
301314 var minBarLength = scale . options . minBarLength ;
302315 var stacked = scale . options . stacked ;
303316 var stack = meta . stack ;
304317 var start = value . start === undefined ? 0 : value . max >= 0 && value . min >= 0 ? value . min : value . max ;
305318 var length = value . start === undefined ? value . end : value . max >= 0 && value . min >= 0 ? value . max - value . min : value . min - value . max ;
319+ var ilen = metasets . length ;
306320 var i , imeta , ivalue , base , head , size , stackLength ;
307321
308322 if ( stacked || ( stacked === undefined && stack !== undefined ) ) {
309- for ( i = 0 ; i < datasetIndex ; ++ i ) {
310- imeta = chart . getDatasetMeta ( i ) ;
323+ for ( i = 0 ; i < ilen ; ++ i ) {
324+ imeta = metasets [ i ] ;
311325
312- if ( imeta . bar &&
313- imeta . stack === stack &&
314- imeta . controller . _getValueScaleId ( ) === scale . id &&
315- chart . isDatasetVisible ( i ) ) {
326+ if ( imeta . index === datasetIndex ) {
327+ break ;
328+ }
316329
317- stackLength = scale . _parseValue ( datasets [ i ] . data [ index ] ) ;
330+ if ( imeta . stack === stack ) {
331+ stackLength = scale . _parseValue ( datasets [ imeta . index ] . data [ index ] ) ;
318332 ivalue = stackLength . start === undefined ? stackLength . end : stackLength . min >= 0 && stackLength . max >= 0 ? stackLength . max : stackLength . min ;
319333
320334 if ( ( value . min < 0 && ivalue < 0 ) || ( value . max >= 0 && ivalue > 0 ) ) {
0 commit comments