UNPKG

@mui/x-charts

Version:

The community edition of MUI X Charts components.

69 lines (68 loc) 2.2 kB
import _extends from "@babel/runtime/helpers/esm/extends"; import { useAssertModelConsistency } from '@mui/x-internals/useAssertModelConsistency'; import useEventCallback from '@mui/utils/useEventCallback'; import useEnhancedEffect from '@mui/utils/useEnhancedEffect'; import { fastObjectShallowCompare } from '@mui/x-internals/fastObjectShallowCompare'; export const useChartTooltip = ({ store, params }) => { useAssertModelConsistency({ warningPrefix: 'MUI X Charts', componentName: 'Chart', propName: 'tooltipItem', controlled: params.tooltipItem, defaultValue: null }); useEnhancedEffect(() => { if (store.state.tooltip.item !== params.tooltipItem) { store.set('tooltip', _extends({}, store.state.tooltip, { item: params.tooltipItem })); } }, [store, params.tooltipItem]); const removeTooltipItem = useEventCallback(function removeTooltipItem(itemToRemove) { const prevItem = store.state.tooltip.item; if (prevItem === null) { return; // Already null, nothing to do } if (!itemToRemove || fastObjectShallowCompare(prevItem, itemToRemove)) { // Remove the item is either // - no item provided, so we unconditionally remove it // - the provided item matches the current one params.onTooltipItemChange?.(null); if (!store.state.tooltip.itemIsControlled) { store.set('tooltip', _extends({}, store.state.tooltip, { item: null })); } return; } }); const setTooltipItem = useEventCallback(function setTooltipItem(newItem) { if (!fastObjectShallowCompare(store.state.tooltip.item, newItem)) { params.onTooltipItemChange?.(newItem); if (!store.state.tooltip.itemIsControlled) { store.set('tooltip', _extends({}, store.state.tooltip, { item: newItem })); } } }); return { instance: { setTooltipItem, removeTooltipItem } }; }; useChartTooltip.getInitialState = params => ({ tooltip: { itemIsControlled: params.tooltipItem !== undefined, item: params.tooltipItem ?? null } }); useChartTooltip.params = { tooltipItem: true, onTooltipItemChange: true };