UNPKG

@mui/x-charts

Version:

The community edition of the charts components (MUI X).

59 lines 2.41 kB
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; }