@mui/x-charts
Version:
The community edition of MUI X Charts components.
76 lines • 3.04 kB
JavaScript
import { createSelector } from "../../utils/selectors.js";
import { selectorChartRawXAxis, selectorChartRawYAxis } from "./useChartCartesianAxisLayout.selectors.js";
import { selectorChartSeriesConfig, selectorChartSeriesProcessed } from "../../corePlugins/useChartSeries/index.js";
import { computeAxisValue } from "./computeAxisValue.js";
import { selectorChartZoomAxisFilters, selectorChartZoomOptionsLookup } from "./useChartCartesianAxisRendering.selectors.js";
import { selectorChartDrawingArea } from "../../corePlugins/useChartDimensions/index.js";
import { ZOOM_SLIDER_PREVIEW_SIZE } from "../../../constants.js";
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 selectorChartPreviewComputedXAxis = createSelector([selectorChartRawXAxis, selectorChartSeriesProcessed, selectorChartSeriesConfig, selectorChartZoomOptionsLookup, selectorChartZoomAxisFilters, selectorChartDrawingArea, (_, axisId) => axisId], (xAxes, formattedSeries, seriesConfig, zoomOptions, getFilters, chartDrawingArea, axisId) => {
const hasAxis = xAxes?.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({
drawingArea,
formattedSeries,
axis: xAxes,
seriesConfig,
axisDirection: 'x',
zoomMap,
zoomOptions,
getFilters
});
if (computedAxes.axis[axisId]) {
return {
[axisId]: computedAxes.axis[axisId]
};
}
return computedAxes.axis;
});
export const selectorChartPreviewComputedYAxis = createSelector([selectorChartRawYAxis, selectorChartSeriesProcessed, selectorChartSeriesConfig, selectorChartZoomOptionsLookup, selectorChartZoomAxisFilters, selectorChartDrawingArea, (_, axisId) => axisId], (yAxes, formattedSeries, seriesConfig, zoomOptions, getFilters, chartDrawingArea, axisId) => {
const hasAxis = yAxes?.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({
drawingArea,
formattedSeries,
axis: yAxes,
seriesConfig,
axisDirection: 'y',
zoomMap,
zoomOptions,
getFilters
});
if (computedAxes.axis[axisId]) {
return {
[axisId]: computedAxes.axis[axisId]
};
}
return computedAxes.axis;
});