@mui/x-charts
Version:
The community edition of the charts components (MUI X).
59 lines • 2.41 kB
JavaScript
import _extends from "@babel/runtime/helpers/esm/extends";
import * as React from 'react';
import { InteractionContext } from '../../context/InteractionProvider';
import { getIsHighlighted, getIsFaded } from '../../hooks/useInteractionItemProps';
export function useTransformData(series) {
const {
id: seriesId,
highlightScope,
data,
faded,
highlighted,
paddingAngle: basePaddingAngle = 0,
innerRadius: baseInnerRadius = 0,
outerRadius: baseOuterRadius,
cornerRadius: baseCornerRadius = 0
} = series;
const {
item: highlightedItem
} = React.useContext(InteractionContext);
const getHighlightStatus = React.useCallback(dataIndex => {
const isHighlighted = getIsHighlighted(highlightedItem, {
type: 'pie',
seriesId,
dataIndex
}, highlightScope);
const isFaded = !isHighlighted && getIsFaded(highlightedItem, {
type: 'pie',
seriesId,
dataIndex
}, highlightScope);
return {
isHighlighted,
isFaded
};
}, [highlightScope, highlightedItem, seriesId]);
const dataWithHighlight = React.useMemo(() => data.map((item, itemIndex) => {
var _attibuesOverride$pad, _attibuesOverride$inn, _attibuesOverride$out, _attibuesOverride$cor;
const {
isHighlighted,
isFaded
} = getHighlightStatus(itemIndex);
const attibuesOverride = _extends({
additionalRadius: 0
}, isFaded && faded || isHighlighted && highlighted || {});
const paddingAngle = Math.max(0, Math.PI * ((_attibuesOverride$pad = attibuesOverride.paddingAngle) != null ? _attibuesOverride$pad : basePaddingAngle) / 180);
const innerRadius = Math.max(0, (_attibuesOverride$inn = attibuesOverride.innerRadius) != null ? _attibuesOverride$inn : baseInnerRadius);
const outerRadius = Math.max(0, (_attibuesOverride$out = attibuesOverride.outerRadius) != null ? _attibuesOverride$out : baseOuterRadius + attibuesOverride.additionalRadius);
const cornerRadius = (_attibuesOverride$cor = attibuesOverride.cornerRadius) != null ? _attibuesOverride$cor : baseCornerRadius;
return _extends({}, item, attibuesOverride, {
isFaded,
isHighlighted,
paddingAngle,
innerRadius,
outerRadius,
cornerRadius
});
}), [baseCornerRadius, baseInnerRadius, baseOuterRadius, basePaddingAngle, data, faded, getHighlightStatus, highlighted]);
return dataWithHighlight;
}