UNPKG

@mui/x-charts

Version:

The community edition of MUI X Charts components.

55 lines 2.09 kB
import { findMinMax } from "./findMinMax.js"; import { getBandSize } from "./getBandSize.js"; function shouldInvertStartCoordinate(verticalLayout, baseValue, reverse) { const isVerticalAndPositive = verticalLayout && baseValue > 0; const isHorizontalAndNegative = !verticalLayout && baseValue < 0; const invertStartCoordinate = isVerticalAndPositive || isHorizontalAndNegative; return reverse ? !invertStartCoordinate : invertStartCoordinate; } export 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 } = 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] = 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 }; }