@mui/x-charts
Version:
The community edition of the Charts components (MUI X).
61 lines • 2.3 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,
arcLabelRadius: baseArcLabelRadius,
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) => {
const {
isHighlighted,
isFaded
} = getHighlightStatus(itemIndex);
const attributesOverride = _extends({
additionalRadius: 0
}, isFaded && faded || isHighlighted && highlighted || {});
const paddingAngle = Math.max(0, Math.PI * (attributesOverride.paddingAngle ?? basePaddingAngle) / 180);
const innerRadius = Math.max(0, attributesOverride.innerRadius ?? baseInnerRadius);
const outerRadius = Math.max(0, attributesOverride.outerRadius ?? baseOuterRadius + attributesOverride.additionalRadius);
const cornerRadius = attributesOverride.cornerRadius ?? baseCornerRadius;
const arcLabelRadius = attributesOverride.arcLabelRadius ?? baseArcLabelRadius ?? (innerRadius + outerRadius) / 2;
return _extends({}, item, attributesOverride, {
isFaded,
isHighlighted,
paddingAngle,
innerRadius,
outerRadius,
cornerRadius,
arcLabelRadius
});
}), [baseCornerRadius, baseInnerRadius, baseOuterRadius, basePaddingAngle, baseArcLabelRadius, data, faded, getHighlightStatus, highlighted]);
return dataWithHighlight;
}