UNPKG

@mui/x-charts

Version:

The community edition of MUI X Charts components.

56 lines (55 loc) 1.8 kB
import { findMinMax } from "../../internals/findMinMax.js"; export const getExtremumX = params => { const { axis } = params; return findMinMax(axis.data ?? []); }; function getSeriesExtremums(getValues, data, stackedData, filter) { return stackedData.reduce((seriesAcc, stackedValue, index) => { if (data[index] === null) { return seriesAcc; } const [base, value] = getValues(stackedValue); if (filter && (!filter({ y: base, x: null }, index) || !filter({ y: value, x: null }, index))) { return seriesAcc; } return [Math.min(base, value, seriesAcc[0]), Math.max(base, value, seriesAcc[1])]; }, [Infinity, -Infinity]); } export const getExtremumY = params => { const { series, axis, isDefaultAxis, getFilters } = params; return Object.keys(series).filter(seriesId => { const yAxisId = series[seriesId].yAxisId; return yAxisId === axis.id || isDefaultAxis && yAxisId === undefined; }).reduce((acc, seriesId) => { const { area, stackedData, data } = series[seriesId]; const isArea = area !== undefined; const filter = getFilters?.({ currentAxisId: axis.id, isDefaultAxis, seriesXAxisId: series[seriesId].xAxisId, seriesYAxisId: series[seriesId].yAxisId }); // Since this series is not used to display an area, we do not consider the base (the d[0]). const getValues = isArea && axis.scaleType !== 'log' && typeof series[seriesId].baseline !== 'string' ? d => d : d => [d[1], d[1]]; const seriesExtremums = getSeriesExtremums(getValues, data, stackedData, filter); const [seriesMin, seriesMax] = seriesExtremums; return [Math.min(seriesMin, acc[0]), Math.max(seriesMax, acc[1])]; }, [Infinity, -Infinity]); };