From 0ad0d35c09069e2787345ebab04a7e1e31745559 Mon Sep 17 00:00:00 2001 From: Jukka Kurkela Date: Sat, 24 Apr 2021 22:20:52 +0300 Subject: [PATCH] Fix skipNull for subsequent datasets (#8972) --- src/controllers/controller.bar.js | 10 +++-- .../bar-skip-null-object-data.js | 0 .../bar-skip-null-object-data.png | Bin .../{ => skipNull}/bar-skip-null.js | 0 .../{ => skipNull}/bar-skip-null.png | Bin .../controller.bar/skipNull/combinations.js | 38 ++++++++++++++++++ .../controller.bar/skipNull/combinations.png | Bin 0 -> 5000 bytes 7 files changed, 44 insertions(+), 4 deletions(-) rename test/fixtures/controller.bar/{ => skipNull}/bar-skip-null-object-data.js (100%) rename test/fixtures/controller.bar/{ => skipNull}/bar-skip-null-object-data.png (100%) rename test/fixtures/controller.bar/{ => skipNull}/bar-skip-null.js (100%) rename test/fixtures/controller.bar/{ => skipNull}/bar-skip-null.png (100%) create mode 100644 test/fixtures/controller.bar/skipNull/combinations.js create mode 100644 test/fixtures/controller.bar/skipNull/combinations.png diff --git a/src/controllers/controller.bar.js b/src/controllers/controller.bar.js index 0ed99b7ec8b..fa107586718 100644 --- a/src/controllers/controller.bar.js +++ b/src/controllers/controller.bar.js @@ -354,11 +354,12 @@ export default class BarController extends DatasetController { * 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 + * @param {number} [dataIndex] * @returns {number} The stack index * @private */ - _getStackIndex(datasetIndex, name) { - const stacks = this._getStacks(datasetIndex); + _getStackIndex(datasetIndex, name, dataIndex) { + const stacks = this._getStacks(datasetIndex, dataIndex); const index = (name !== undefined) ? stacks.indexOf(name) : -1; // indexOf returns -1 if element is not present @@ -477,15 +478,16 @@ export default class BarController extends DatasetController { const me = this; const scale = ruler.scale; const options = me.options; + const skipNull = options.skipNull; const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity); let center, size; if (ruler.grouped) { - const stackCount = options.skipNull ? me._getStackCount(index) : ruler.stackCount; + const stackCount = skipNull ? me._getStackCount(index) : ruler.stackCount; const range = options.barThickness === 'flex' ? computeFlexCategoryTraits(index, ruler, options, stackCount) : computeFitCategoryTraits(index, ruler, options, stackCount); - const stackIndex = me._getStackIndex(me.index, me._cachedMeta.stack); + const stackIndex = me._getStackIndex(me.index, me._cachedMeta.stack, skipNull ? index : undefined); center = range.start + (range.chunk * stackIndex) + (range.chunk / 2); size = Math.min(maxBarThickness, range.chunk * range.ratio); } else { diff --git a/test/fixtures/controller.bar/bar-skip-null-object-data.js b/test/fixtures/controller.bar/skipNull/bar-skip-null-object-data.js similarity index 100% rename from test/fixtures/controller.bar/bar-skip-null-object-data.js rename to test/fixtures/controller.bar/skipNull/bar-skip-null-object-data.js diff --git a/test/fixtures/controller.bar/bar-skip-null-object-data.png b/test/fixtures/controller.bar/skipNull/bar-skip-null-object-data.png similarity index 100% rename from test/fixtures/controller.bar/bar-skip-null-object-data.png rename to test/fixtures/controller.bar/skipNull/bar-skip-null-object-data.png diff --git a/test/fixtures/controller.bar/bar-skip-null.js b/test/fixtures/controller.bar/skipNull/bar-skip-null.js similarity index 100% rename from test/fixtures/controller.bar/bar-skip-null.js rename to test/fixtures/controller.bar/skipNull/bar-skip-null.js diff --git a/test/fixtures/controller.bar/bar-skip-null.png b/test/fixtures/controller.bar/skipNull/bar-skip-null.png similarity index 100% rename from test/fixtures/controller.bar/bar-skip-null.png rename to test/fixtures/controller.bar/skipNull/bar-skip-null.png diff --git a/test/fixtures/controller.bar/skipNull/combinations.js b/test/fixtures/controller.bar/skipNull/combinations.js new file mode 100644 index 00000000000..8dd38761a42 --- /dev/null +++ b/test/fixtures/controller.bar/skipNull/combinations.js @@ -0,0 +1,38 @@ +module.exports = { + config: { + type: 'bar', + data: { + labels: ['0', '1', '2', '3', '4', '5', '6', '7'], + datasets: [ + { + data: [null, 1000, null, 1000, null, 1000, null, 1000], + backgroundColor: '#00ff00', + borderColor: '#ff0000' + }, + { + data: [null, null, 1000, 1000, null, null, 1000, 1000], + backgroundColor: '#ff0000', + borderColor: '#ff0000' + }, + { + data: [null, null, null, null, 1000, 1000, 1000, 1000], + backgroundColor: '#0000ff', + borderColor: '#0000ff' + } + ] + }, + options: { + skipNull: true, + scales: { + x: {display: false}, + y: {display: false} + } + } + }, + options: { + canvas: { + height: 256, + width: 512 + } + } +}; diff --git a/test/fixtures/controller.bar/skipNull/combinations.png b/test/fixtures/controller.bar/skipNull/combinations.png new file mode 100644 index 0000000000000000000000000000000000000000..6d26ea3d4c3c66ac571a9d6d3491da732f6b4461 GIT binary patch literal 5000 zcmeHL`%6<%9RJ?yrkmtz<)c6ymKAAgCBhix3bkh7N;JWI5u}DS12vV@T@({hru3kc zsh1)M%vmTcP39;=4EHd9Smq)b!j*+isc^dMZf8b+L~!me_Z+^@&*9$h_wzmNm$J?W z_#f~GfB^Z0v}^zpEeR0#qSwc6QyIWsg*@$SPF>Ne?SxWuec!#gO20&gMPp$PTDf9S;xly&~Rw=EUT@;vQeBALM+|+Q?9bSZfD#cdLE5Ee|X+nv@tS2L0% zSIE&>hyX1GhLv#v5J~y5q-D>2ukrdaj}_BxCNmV$7k*=t0(V@LRm@OOlN5mXo=hHx3d6%uz5 z)DUok#3TaqBg`Q&J;oyh9<%TS`S;QQ)8qe$9&?wW$!|5zCvr-ezz6im)3egF=SrIY E0E)p-VE_OC literal 0 HcmV?d00001