UNPKG

@mui/x-charts

Version:

The community edition of MUI X Charts components.

86 lines (84 loc) 2.58 kB
'use client'; import _extends from "@babel/runtime/helpers/esm/extends"; import * as React from 'react'; import { getColorScale, getOrdinalColorScale } from "../../../colorScale.js"; 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 (dataKey === undefined || axisConfig.data !== undefined) { zAxisLookup[defaultizedId] = processColorMap(addDefaultId(axisConfig, defaultizedId)); axisIds.push(defaultizedId); return; } if (dataset === undefined) { throw new Error('MUI X Charts: z-axis uses `dataKey` but no `dataset` is provided.'); } zAxisLookup[defaultizedId] = processColorMap(addDefaultId(_extends({}, axisConfig, { data: 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.update(prev => _extends({}, prev, { zAxis: getZAxisState(zAxis, dataset) })); }, [zAxis, dataset, store]); return {}; }; useChartZAxis.params = { zAxis: true, dataset: true }; useChartZAxis.getInitialState = params => ({ zAxis: getZAxisState(params.zAxis, params.dataset) });