UNPKG

@mui/x-charts

Version:

The community edition of MUI X Charts components.

61 lines (60 loc) 2.24 kB
"use strict"; 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 }; }