@mui/x-charts
Version:
The community edition of MUI X Charts components.
62 lines (61 loc) • 1.72 kB
JavaScript
'use client';
import * as React from 'react';
import useEventCallback from '@mui/utils/useEventCallback';
import { useChartsContext } from "../context/ChartsProvider/index.mjs";
function onPointerDown(event) {
if ('hasPointerCapture' in event.currentTarget && event.currentTarget.hasPointerCapture(event.pointerId)) {
event.currentTarget.releasePointerCapture(event.pointerId);
}
}
export const useInteractionItemProps = data => {
const {
instance
} = useChartsContext();
const interactionActive = React.useRef(false);
const onPointerEnter = useEventCallback(() => {
interactionActive.current = true;
instance.setLastUpdateSource('pointer');
instance.setTooltipItem(data);
instance.setHighlight(data);
});
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(() => ({
onPointerEnter,
onPointerLeave,
onPointerDown
}), [onPointerEnter, onPointerLeave]);
};
export function getInteractionItemProps(instance, item) {
function onPointerEnter() {
if (!item) {
return;
}
instance.setLastUpdateSource('pointer');
instance.setTooltipItem(item);
instance.setHighlight(item);
}
function onPointerLeave() {
if (!item) {
return;
}
instance.removeTooltipItem(item);
instance.clearHighlight();
}
return {
onPointerEnter,
onPointerLeave,
onPointerDown
};
}