From 810620fcdbdfcd8e83c93cdd296442ba94814cd0 Mon Sep 17 00:00:00 2001 From: julien malcouronne Date: Wed, 21 Jun 2023 14:17:32 +0200 Subject: [PATCH] feat: allow stack bar only --- src/charts/Line.js | 11 ++++++++++- src/charts/common/line/Helpers.js | 6 ++++-- src/modules/Range.js | 16 +++++++++++----- src/modules/settings/Options.js | 2 ++ src/modules/tooltip/Labels.js | 11 +++++++++++ 5 files changed, 38 insertions(+), 8 deletions(-) diff --git a/src/charts/Line.js b/src/charts/Line.js index 1a3f4818d..02ddb16e4 100644 --- a/src/charts/Line.js +++ b/src/charts/Line.js @@ -490,6 +490,15 @@ class Line { } let y2 = y + + let stackSeries = + w.config.chart.stacked && + (!this.w.config.chart.stackOnlyBar || + (this.w.config.series[realIndex] && + this.w.config.series[realIndex].type && + (this.w.config.series[realIndex].type === 'bar' || + this.w.config.series[realIndex].type === ''))) + for (let j = 0; j < iterations; j++) { const isNull = typeof series[i][j + 1] === 'undefined' || series[i][j + 1] === null @@ -505,7 +514,7 @@ class Line { x = x + this.xDivision } - if (w.config.chart.stacked) { + if (stackSeries) { if ( i > 0 && w.globals.collapsedSeries.length < w.config.series.length - 1 diff --git a/src/charts/common/line/Helpers.js b/src/charts/common/line/Helpers.js index 9016918f7..527b46157 100644 --- a/src/charts/common/line/Helpers.js +++ b/src/charts/common/line/Helpers.js @@ -104,8 +104,10 @@ export default class Helpers { determineFirstPrevY({ i, series, prevY, lineYPosition }) { let w = this.w + let stackSeries = w.config.chart.stacked && (!w.config.chart.stackOnlyBar || (series[i] && series[i].type && series[i].type === 'bar')); + if (typeof series[i]?.[0] !== 'undefined') { - if (w.config.chart.stacked) { + if (stackSeries) { if (i > 0) { // 1st y value of previous series lineYPosition = this.lineCtx.prevSeriesY[i - 1][0] @@ -126,7 +128,7 @@ export default class Helpers { } else { // the first value in the current series is null if ( - w.config.chart.stacked && + stackSeries && i > 0 && typeof series[i][0] === 'undefined' ) { diff --git a/src/modules/Range.js b/src/modules/Range.js index 3a7aea269..f0b343f5e 100644 --- a/src/modules/Range.js +++ b/src/modules/Range.js @@ -549,12 +549,18 @@ class Range { stackedPoss[group][j] = 0 stackedNegs[group][j] = 0 } - - if (gl.series[i][j] !== null && Utils.isNumber(gl.series[i][j])) { - gl.series[i][j] > 0 - ? (stackedPoss[group][j] += parseFloat(gl.series[i][j]) + 0.0001) - : (stackedNegs[group][j] += parseFloat(gl.series[i][j])) + let stackSeries = + !this.w.config.chart.stackOnlyBar || + (gl.series[i] && gl.series[i].type && gl.series[i].type === 'bar') + + if (stackSeries) { + if (gl.series[i][j] !== null && Utils.isNumber(gl.series[i][j])) { + gl.series[i][j] > 0 + ? (stackedPoss[group][j] += parseFloat(gl.series[i][j]) + 0.0001) + : (stackedNegs[group][j] += parseFloat(gl.series[i][j])) + } } + } }) }) diff --git a/src/modules/settings/Options.js b/src/modules/settings/Options.js index dfd92875f..efb97acfb 100644 --- a/src/modules/settings/Options.js +++ b/src/modules/settings/Options.js @@ -344,6 +344,7 @@ export default class Options { target: undefined, }, stacked: false, + stackOnlyBar: true, // mixed chart with stacked bars and line series - incorrect line draw #907 stackType: 'normal', toolbar: { show: true, @@ -921,6 +922,7 @@ export default class Options { enabled: true, enabledOnSeries: undefined, shared: true, + hideEmptyShared: true, followCursor: false, // when disabled, the tooltip will show on top of the series instead of mouse position intersect: false, // when enabled, tooltip will only show when user directly hovers over point inverseOrder: false, diff --git a/src/modules/tooltip/Labels.js b/src/modules/tooltip/Labels.js index 0f564fe77..d6cc8f1a9 100644 --- a/src/modules/tooltip/Labels.js +++ b/src/modules/tooltip/Labels.js @@ -359,6 +359,17 @@ export default class Labels { if (shared && ttItemsChildren[0]) { // hide when no Val or series collapsed + if (w.config.tooltip.hideEmptyShared) { + let ttItemMarker = ttItems[t].querySelector('.apexcharts-tooltip-marker'); + let ttItemText = ttItems[t].querySelector('.apexcharts-tooltip-text'); + if (parseFloat(val) == 0) { + ttItemMarker.style.display = 'none'; + ttItemText.style.display = 'none'; + } else { + ttItemMarker.style.display = 'block'; + ttItemText.style.display = 'block'; + } + } if ( typeof val === 'undefined' || val === null ||