UNPKG

@mui/x-charts

Version:

The community edition of MUI X Charts components.

73 lines (72 loc) 2.05 kB
'use client'; import * as React from 'react'; import useEventCallback from '@mui/utils/useEventCallback'; import { useChartContext } from "../context/ChartProvider/index.js"; function onPointerDown(event) { if ('hasPointerCapture' in event.currentTarget && event.currentTarget.hasPointerCapture(event.pointerId)) { event.currentTarget.releasePointerCapture(event.pointerId); } } export const useInteractionItemProps = (data, skip) => { const { instance } = useChartContext(); const interactionActive = React.useRef(false); const onPointerEnter = useEventCallback(() => { interactionActive.current = true; instance.setLastUpdateSource('pointer'); instance.setTooltipItem(data); // TODO: uniformize sankey and other types to get a single plugin instance.setHighlight( // @ts-ignore data.type === 'sankey' ? data : { seriesId: data.seriesId, dataIndex: data.dataIndex }); }); const onPointerLeave = useEventCallback(() => { interactionActive.current = false; instance.removeTooltipItem(data); instance.clearHighlight(); }); React.useEffect(() => { return () => { /* Clean up state if this item is unmounted while active. */ if (interactionActive.current) { onPointerLeave(); } }; }, [onPointerLeave]); return React.useMemo(() => skip ? {} : { onPointerEnter, onPointerLeave, onPointerDown }, [skip, onPointerEnter, onPointerLeave]); }; export function getInteractionItemProps(instance, item) { function onPointerEnter() { if (!item) { return; } instance.setLastUpdateSource('pointer'); instance.setTooltipItem(item); instance.setHighlight( // @ts-ignore item.type === 'sankey' ? item : { seriesId: item.seriesId, dataIndex: item.dataIndex }); } function onPointerLeave() { if (!item) { return; } instance.removeTooltipItem(item); instance.clearHighlight(); } return { onPointerEnter, onPointerLeave, onPointerDown }; }