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