Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 40 additions & 3 deletions src/charts/BarStacked.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import CoreUtils from '../modules/CoreUtils'
import Bar from './Bar'
import Graphics from '../modules/Graphics'
import Utils from '../utils/Utils'
import DateTime from '../utils/DateTime'

/**
* ApexCharts BarStacked Class responsible for drawing both Stacked Columns and Bars.
Expand Down Expand Up @@ -261,11 +262,47 @@ class BarStacked extends Bar {
barWidth = xDivision

let userColumnWidth = w.config.plotOptions.bar.columnWidth
if (w.globals.isXNumeric && w.globals.dataPoints > 1) {
if (String(userColumnWidth).indexOf('%') === -1) {
barWidth = parseInt(userColumnWidth, 10)
} else if (w.globals.isXNumeric && w.globals.dataPoints > 1) {
xDivision = w.globals.minXDiff / this.xRatio
barWidth = (xDivision * parseInt(this.barOptions.columnWidth, 10)) / 100
} else if (String(userColumnWidth).indexOf('%') === -1) {
barWidth = parseInt(userColumnWidth, 10)
} else if (w.config.xaxis.type === 'datetime') {
const dateTimeUtil = new DateTime(this.ctx)
const timescaleTimestamps = w.globals.timescaleLabels.map((label) =>
dateTimeUtil.getTimeStamp(label.dateString)
)

const seriesTimestamps = w.globals.initialSeries.reduce(
(timestamps, series) => {
if (series.data && series.data.length > 0) {
series.data.forEach((dataPoint) => {
timestamps.push(dateTimeUtil.getTimeStamp(dataPoint.x))
})
}
return timestamps
},
[]
)

const allTimestamps = [...timescaleTimestamps, ...seriesTimestamps]

allTimestamps.sort((a, b) => a - b)

let minimumInterval = Infinity
for (let i = 1; i < allTimestamps.length; i++) {
const interval = allTimestamps[i] - allTimestamps[i - 1]
if (interval < minimumInterval && interval !== 0) {
minimumInterval = interval
}
}

const intervalRatio =
minimumInterval / (w.globals.maxX - w.globals.minX)
barWidth =
(xDivision * intervalRatio * parseInt(userColumnWidth, 10)) / 100

barWidth = Math.max(barWidth, 1)
} else {
barWidth *= parseInt(userColumnWidth, 10) / 100
}
Expand Down