@mui/x-charts
Version:
The community edition of MUI X Charts components.
94 lines (92 loc) • 3.05 kB
JavaScript
'use client';
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useChartZAxis = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var React = _interopRequireWildcard(require("react"));
var _colorScale = require("../../../colorScale");
function addDefaultId(axisConfig, defaultId) {
if (axisConfig.id !== undefined) {
return axisConfig;
}
return (0, _extends2.default)({
id: defaultId
}, axisConfig);
}
function processColorMap(axisConfig) {
if (!axisConfig.colorMap) {
return axisConfig;
}
return (0, _extends2.default)({}, axisConfig, {
colorScale: axisConfig.colorMap.type === 'ordinal' && axisConfig.data ? (0, _colorScale.getOrdinalColorScale)((0, _extends2.default)({
values: axisConfig.data
}, axisConfig.colorMap)) : (0, _colorScale.getColorScale)(axisConfig.colorMap.type === 'continuous' ? (0, _extends2.default)({
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((0, _extends2.default)({}, axisConfig, {
data: dataset.map(d => d[dataKey])
}), defaultizedId));
axisIds.push(defaultizedId);
});
return {
axis: zAxisLookup,
axisIds
};
}
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 => (0, _extends2.default)({}, prev, {
zAxis: getZAxisState(zAxis, dataset)
}));
}, [zAxis, dataset, store]);
return {};
};
exports.useChartZAxis = useChartZAxis;
useChartZAxis.params = {
zAxis: true,
dataset: true
};
useChartZAxis.getInitialState = params => ({
zAxis: getZAxisState(params.zAxis, params.dataset)
});
;