valueOrDefault, resolveObjectKey, sign, defined
} from '../helpers';
-function getAllScaleValues(scale) {
+function getAllScaleValues(scale, type) {
if (!scale._cache.$bar) {
- const metas = scale.getMatchingVisibleMetas('bar');
+ const visibleMetas = scale.getMatchingVisibleMetas(type);
let values = [];
- for (let i = 0, ilen = metas.length; i < ilen; i++) {
- values = values.concat(metas[i].controller.getAllParsedValues(scale));
+ for (let i = 0, ilen = visibleMetas.length; i < ilen; i++) {
+ values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));
}
scale._cache.$bar = _arrayUnique(values.sort((a, b) => a - b));
}
* Computes the "optimal" sample size to maintain bars equally sized while preventing overlap.
* @private
*/
-function computeMinSampleSize(scale) {
- const values = getAllScaleValues(scale);
+function computeMinSampleSize(meta) {
+ const scale = meta.iScale;
+ const values = getAllScaleValues(scale, meta.type);
let min = scale._length;
let i, ilen, curr, prev;
const updateMinAndPrev = () => {
}
const barThickness = opts.barThickness;
- const min = barThickness || computeMinSampleSize(iScale);
+ const min = barThickness || computeMinSampleSize(meta);
return {
min,
return subStack[indexValue] || (subStack[indexValue] = {});
}
-function getLastIndexInStack(stack, vScale, positive) {
- for (const meta of vScale.getMatchingVisibleMetas('bar').reverse()) {
+function getLastIndexInStack(stack, vScale, positive, type) {
+ for (const meta of vScale.getMatchingVisibleMetas(type).reverse()) {
const value = stack[meta.index];
if ((positive && value > 0) || (!positive && value < 0)) {
return meta.index;
stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);
stack[datasetIndex] = value;
- stack._top = getLastIndexInStack(stack, vScale, true);
- stack._bottom = getLastIndexInStack(stack, vScale, false);
+ stack._top = getLastIndexInStack(stack, vScale, true, meta.type);
+ stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);
}
}
});
var meta = chart.getDatasetMeta(0);
- expect(meta._parsed[0]._stacks).toEqual(jasmine.objectContaining({y: {0: 10, 1: 20, _top: null, _bottom: null}}));
+ expect(meta._parsed[0]._stacks).toEqual(jasmine.objectContaining({y: {0: 10, 1: 20, _top: 1, _bottom: null}}));
});
describe('resolveDataElementOptions', function() {