@mui/x-charts
Version:
The community edition of MUI X Charts components.
123 lines • 5.11 kB
JavaScript
import { createSelectorMemoized } from '@mui/x-internals/store';
import { selectorChartRawXAxis, selectorChartRawYAxis } from "./useChartCartesianAxisLayout.selectors.mjs";
import { selectorChartSeriesProcessed } from "../../corePlugins/useChartSeries/index.mjs";
import { computeAxisValue } from "./computeAxisValue.mjs";
import { selectorChartXAxisWithDomains, selectorChartYAxisWithDomains, selectorChartZoomOptionsLookup } from "./useChartCartesianAxisRendering.selectors.mjs";
import { selectorChartDrawingArea } from "../../corePlugins/useChartDimensions/index.mjs";
import { ZOOM_SLIDER_PREVIEW_SIZE } from "../../../constants.mjs";
import { getNormalizedAxisScale, getRange } from "./getAxisScale.mjs";
import { zoomScaleRange } from "./zoom.mjs";
import { isOrdinalScale } from "../../../scaleGuards.mjs";
import { selectorChartSeriesConfig } from "../../corePlugins/useChartSeriesConfig/index.mjs";
function createPreviewDrawingArea(axisDirection, mainChartDrawingArea) {
return axisDirection === 'x' ? {
left: 0,
top: 0,
width: mainChartDrawingArea.width,
height: ZOOM_SLIDER_PREVIEW_SIZE,
right: mainChartDrawingArea.width,
bottom: ZOOM_SLIDER_PREVIEW_SIZE
} : {
left: 0,
top: 0,
width: ZOOM_SLIDER_PREVIEW_SIZE,
height: mainChartDrawingArea.height,
right: ZOOM_SLIDER_PREVIEW_SIZE,
bottom: mainChartDrawingArea.height
};
}
export const selectorChartPreviewXScales = createSelectorMemoized(selectorChartRawXAxis, selectorChartDrawingArea, selectorChartZoomOptionsLookup, selectorChartXAxisWithDomains, function selectorChartPreviewXScales(xAxes, chartDrawingArea, zoomOptions, {
domains: unfilteredDomains
}, axisId) {
const hasAxis = xAxes?.some(axis => axis.id === axisId);
const drawingArea = createPreviewDrawingArea(hasAxis ? 'x' : 'y', chartDrawingArea);
const options = zoomOptions[axisId];
const scales = {};
xAxes?.forEach(eachAxis => {
const axis = eachAxis;
const scale = getNormalizedAxisScale(axis, unfilteredDomains[axis.id].domain);
const range = getRange(drawingArea, 'x', axis);
const zoomedRange = zoomScaleRange(range, [options.minStart, options.maxEnd]);
scale.range(zoomedRange);
scales[axis.id] = scale;
});
return scales;
});
export const selectorChartPreviewComputedXAxis = createSelectorMemoized(selectorChartSeriesProcessed, selectorChartSeriesConfig, selectorChartZoomOptionsLookup, selectorChartDrawingArea, selectorChartPreviewXScales, selectorChartXAxisWithDomains, (formattedSeries, seriesConfig, zoomOptions, chartDrawingArea, scales, {
axes,
domains
}, axisId) => {
const hasAxis = axes?.some(axis => axis.id === axisId);
const drawingArea = createPreviewDrawingArea(hasAxis ? 'x' : 'y', chartDrawingArea);
const options = zoomOptions[axisId];
const zoomMap = new Map([[axisId, {
axisId,
start: options.minStart,
end: options.maxEnd
}]]);
const computedAxes = computeAxisValue({
scales,
drawingArea,
formattedSeries,
axis: axes,
seriesConfig,
axisDirection: 'x',
zoomMap,
domains
});
if (computedAxes.axis[axisId]) {
return {
[axisId]: computedAxes.axis[axisId]
};
}
return computedAxes.axis;
});
export const selectorChartPreviewYScales = createSelectorMemoized(selectorChartRawYAxis, selectorChartDrawingArea, selectorChartZoomOptionsLookup, selectorChartYAxisWithDomains, function selectorChartPreviewYScales(yAxes, chartDrawingArea, zoomOptions, {
domains: unfilteredDomains
}, axisId) {
const hasAxis = yAxes?.some(axis => axis.id === axisId);
const drawingArea = createPreviewDrawingArea(hasAxis ? 'y' : 'x', chartDrawingArea);
const options = zoomOptions[axisId];
const scales = {};
yAxes?.forEach(eachAxis => {
const axis = eachAxis;
const scale = getNormalizedAxisScale(axis, unfilteredDomains[axis.id].domain);
let range = getRange(drawingArea, 'y', axis);
if (isOrdinalScale(scale)) {
range = range.reverse();
}
const zoomedRange = zoomScaleRange(range, [options.minStart, options.maxEnd]);
scale.range(zoomedRange);
scales[axis.id] = scale;
});
return scales;
});
export const selectorChartPreviewComputedYAxis = createSelectorMemoized(selectorChartSeriesProcessed, selectorChartSeriesConfig, selectorChartZoomOptionsLookup, selectorChartDrawingArea, selectorChartPreviewYScales, selectorChartYAxisWithDomains, (formattedSeries, seriesConfig, zoomOptions, chartDrawingArea, scales, {
axes,
domains
}, axisId) => {
const hasAxis = axes?.some(axis => axis.id === axisId);
const drawingArea = createPreviewDrawingArea(hasAxis ? 'y' : 'x', chartDrawingArea);
const options = zoomOptions[axisId];
const zoomMap = new Map([[axisId, {
axisId,
start: options.minStart,
end: options.maxEnd
}]]);
const computedAxes = computeAxisValue({
scales,
drawingArea,
formattedSeries,
axis: axes,
seriesConfig,
axisDirection: 'y',
zoomMap,
domains
});
if (computedAxes.axis[axisId]) {
return {
[axisId]: computedAxes.axis[axisId]
};
}
return computedAxes.axis;
});