UNPKG

@mui/x-charts

Version:

The community edition of MUI X Charts components.

123 lines 5.11 kB
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; });