UNPKG

@mui/x-charts

Version:

The community edition of MUI X Charts components.

76 lines (75 loc) 2.9 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'; import { createIdentifierWithType } from "../../corePlugins/useChartSeries/useChartSeries.mjs"; export const useChartTooltip = ({ store, params, instance }) => { useAssertModelConsistency({ warningPrefix: 'MUI X Charts', componentName: 'Chart', propName: 'tooltipItem', controlled: params.tooltipItem, defaultValue: null }); useEnhancedEffect(() => { if (store.state.tooltip.item !== params.tooltipItem) { const newItem = params.tooltipItem ? instance.identifierWithType(params.tooltipItem, 'seriesItem') : null; if (store.state.tooltip.item === null || newItem === null ? newItem !== store.state.tooltip.item : instance.serializeIdentifier(store.state.tooltip.item) !== instance.serializeIdentifier(newItem)) { store.set('tooltip', _extends({}, store.state.tooltip, { item: newItem })); } } }, [store, instance, 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 || instance.serializeIdentifier(prevItem) === instance.serializeIdentifier(instance.identifierWithType(itemToRemove, 'seriesItem'))) { // 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, currentState) => ({ tooltip: { itemIsControlled: params.tooltipItem !== undefined, item: params.tooltipItem == null ? null : createIdentifierWithType(currentState)( // Need some as because the generic SeriesType can't be propagated to plugins methods. params.tooltipItem) } }); useChartTooltip.params = { tooltipItem: true, onTooltipItemChange: true };