56 lines
1.8 KiB
JavaScript
56 lines
1.8 KiB
JavaScript
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]);
|
|
}; |