UNPKG

@mui/x-charts

Version:

The community edition of MUI X Charts components.

85 lines (83 loc) 2.97 kB
'use client'; import _formatErrorMessage from "@mui/x-internals/formatErrorMessage"; import _extends from "@babel/runtime/helpers/esm/extends"; import * as React from 'react'; import { getColorScale, getOrdinalColorScale } from "../../../colorScale.mjs"; function addDefaultId(axisConfig, defaultId) { if (axisConfig.id !== undefined) { return axisConfig; } return _extends({ id: defaultId }, axisConfig); } function processColorMap(axisConfig) { if (!axisConfig.colorMap) { return axisConfig; } return _extends({}, axisConfig, { colorScale: axisConfig.colorMap.type === 'ordinal' && axisConfig.data ? getOrdinalColorScale(_extends({ values: axisConfig.data }, axisConfig.colorMap)) : getColorScale(axisConfig.colorMap.type === 'continuous' ? _extends({ min: axisConfig.min, max: axisConfig.max }, axisConfig.colorMap) : axisConfig.colorMap) }); } function getZAxisState(zAxis, dataset) { if (!zAxis || zAxis.length === 0) { return { axis: {}, axisIds: [] }; } const zAxisLookup = {}; const axisIds = []; zAxis.forEach((axisConfig, index) => { const dataKey = axisConfig.dataKey; const defaultizedId = axisConfig.id ?? `defaultized-z-axis-${index}`; if (axisConfig.data !== undefined || dataKey === undefined && !axisConfig.valueGetter) { zAxisLookup[defaultizedId] = processColorMap(addDefaultId(axisConfig, defaultizedId)); axisIds.push(defaultizedId); return; } if (dataset === undefined) { throw new Error(process.env.NODE_ENV !== "production" ? 'MUI X Charts: The z-axis uses `dataKey` or `valueGetter` but no `dataset` is provided. ' + 'When using dataKey or valueGetter, a dataset must be provided to retrieve the axis data. ' + 'Either provide a dataset prop or use the data property directly on the z-axis.' : _formatErrorMessage(41)); } zAxisLookup[defaultizedId] = processColorMap(addDefaultId(_extends({}, axisConfig, { data: axisConfig.valueGetter ? dataset.map(d => axisConfig.valueGetter(d)) : dataset.map(d => d[dataKey]) }), defaultizedId)); axisIds.push(defaultizedId); }); return { axis: zAxisLookup, axisIds }; } export const useChartZAxis = ({ params, store }) => { const { zAxis, dataset } = params; // The effect do not track any value defined synchronously during the 1st render by hooks called after `useChartZAxis` // As a consequence, the state generated by the 1st run of this useEffect will always be equal to the initialization one const isFirstRender = React.useRef(true); React.useEffect(() => { if (isFirstRender.current) { isFirstRender.current = false; return; } store.set('zAxis', getZAxisState(zAxis, dataset)); }, [zAxis, dataset, store]); return {}; }; useChartZAxis.params = { zAxis: true, dataset: true }; useChartZAxis.getInitialState = params => ({ zAxis: getZAxisState(params.zAxis, params.dataset) });