UNPKG

@mui/x-charts

Version:

The community edition of MUI X Charts components.

83 lines (82 loc) 2.51 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getExtremumY = exports.getExtremumX = void 0; const createResult = (data, direction) => { if (direction === 'x') { return { x: data, y: null }; } return { x: null, y: data }; }; const getBaseExtremum = params => { const { axis, getFilters, isDefaultAxis } = params; const filter = getFilters?.({ currentAxisId: axis.id, isDefaultAxis }); const data = filter ? axis.data?.filter((_, i) => filter({ x: null, y: null }, i)) : axis.data; const minX = Math.min(...(data ?? [])); const maxX = Math.max(...(data ?? [])); return [minX, maxX]; }; const getValueExtremum = direction => params => { const { series, axis, getFilters, isDefaultAxis } = params; return Object.keys(series).filter(seriesId => { const axisId = direction === 'x' ? series[seriesId].xAxisId : series[seriesId].yAxisId; return axisId === axis.id || isDefaultAxis && axisId === undefined; }).reduce((acc, seriesId) => { const { stackedData } = series[seriesId]; const filter = getFilters?.({ currentAxisId: axis.id, isDefaultAxis, seriesXAxisId: series[seriesId].xAxisId, seriesYAxisId: series[seriesId].yAxisId }); const [seriesMin, seriesMax] = stackedData?.reduce((seriesAcc, values, index) => { if (filter && (!filter(createResult(values[0], direction), index) || !filter(createResult(values[1], direction), index))) { return seriesAcc; } return [Math.min(...values, seriesAcc[0]), Math.max(...values, seriesAcc[1])]; }, [Infinity, -Infinity]) ?? [Infinity, -Infinity]; return [Math.min(seriesMin, acc[0]), Math.max(seriesMax, acc[1])]; }, [Infinity, -Infinity]); }; const getExtremumX = params => { // Notice that bar should be all horizontal or all vertical. // Don't think it's a problem for now const isHorizontal = Object.keys(params.series).some(seriesId => params.series[seriesId].layout === 'horizontal'); if (isHorizontal) { return getValueExtremum('x')(params); } return getBaseExtremum(params); }; exports.getExtremumX = getExtremumX; const getExtremumY = params => { const isHorizontal = Object.keys(params.series).some(seriesId => params.series[seriesId].layout === 'horizontal'); if (isHorizontal) { return getBaseExtremum(params); } return getValueExtremum('y')(params); }; exports.getExtremumY = getExtremumY;