@mui/x-charts
Version:
The community edition of MUI X Charts components.
61 lines (60 loc) • 2.24 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.getBarDimensions = getBarDimensions;
var _findMinMax = require("./findMinMax");
var _getBandSize = require("./getBandSize");
function shouldInvertStartCoordinate(verticalLayout, baseValue, reverse) {
const isVerticalAndPositive = verticalLayout && baseValue > 0;
const isHorizontalAndNegative = !verticalLayout && baseValue < 0;
const invertStartCoordinate = isVerticalAndPositive || isHorizontalAndNegative;
return reverse ? !invertStartCoordinate : invertStartCoordinate;
}
function getBarDimensions(params) {
const {
verticalLayout,
xAxisConfig,
yAxisConfig,
series,
dataIndex,
numberOfGroups,
groupIndex
} = params;
const baseScaleConfig = verticalLayout ? xAxisConfig : yAxisConfig;
const reverse = (verticalLayout ? yAxisConfig.reverse : xAxisConfig.reverse) ?? false;
const {
barWidth,
offset
} = (0, _getBandSize.getBandSize)(baseScaleConfig.scale.bandwidth(), numberOfGroups, baseScaleConfig.barGapRatio);
const barOffset = groupIndex * (barWidth + offset);
const xScale = xAxisConfig.scale;
const yScale = yAxisConfig.scale;
const baseValue = baseScaleConfig.data[dataIndex];
const seriesValue = series.data[dataIndex];
if (seriesValue == null) {
return null;
}
const values = series.visibleStackedData[dataIndex];
const valueCoordinates = values.map(v => verticalLayout ? yScale(v) : xScale(v));
const [minValueCoord, maxValueCoord] = (0, _findMinMax.findMinMax)(valueCoordinates).map(v => Math.round(v));
let barSize = 0;
if (seriesValue !== 0) {
if (!series.hidden) {
barSize = Math.max(series.minBarSize, maxValueCoord - minValueCoord);
}
}
const shouldInvert = shouldInvertStartCoordinate(verticalLayout, seriesValue, reverse);
let startCoordinate = 0;
if (shouldInvert) {
startCoordinate = maxValueCoord - barSize;
} else {
startCoordinate = minValueCoord;
}
return {
x: verticalLayout ? xScale(baseValue) + barOffset : startCoordinate,
y: verticalLayout ? startCoordinate : yScale(baseValue) + barOffset,
height: verticalLayout ? barSize : barWidth,
width: verticalLayout ? barWidth : barSize
};
}