UNPKG

@mui/x-charts

Version:

The community edition of MUI X Charts components.

84 lines (82 loc) 3.38 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default; Object.defineProperty(exports, "__esModule", { value: true }); exports.useChartTooltip = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _useAssertModelConsistency = require("@mui/x-internals/useAssertModelConsistency"); var _useEventCallback = _interopRequireDefault(require("@mui/utils/useEventCallback")); var _useEnhancedEffect = _interopRequireDefault(require("@mui/utils/useEnhancedEffect")); var _fastObjectShallowCompare = require("@mui/x-internals/fastObjectShallowCompare"); var _useChartSeries = require("../../corePlugins/useChartSeries/useChartSeries"); const useChartTooltip = ({ store, params, instance }) => { (0, _useAssertModelConsistency.useAssertModelConsistency)({ warningPrefix: 'MUI X Charts', componentName: 'Chart', propName: 'tooltipItem', controlled: params.tooltipItem, defaultValue: null }); (0, _useEnhancedEffect.default)(() => { 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', (0, _extends2.default)({}, store.state.tooltip, { item: newItem })); } } }, [store, instance, params.tooltipItem]); const removeTooltipItem = (0, _useEventCallback.default)(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', (0, _extends2.default)({}, store.state.tooltip, { item: null })); } return; } }); const setTooltipItem = (0, _useEventCallback.default)(function setTooltipItem(newItem) { if (!(0, _fastObjectShallowCompare.fastObjectShallowCompare)(store.state.tooltip.item, newItem)) { params.onTooltipItemChange?.(newItem); if (!store.state.tooltip.itemIsControlled) { store.set('tooltip', (0, _extends2.default)({}, store.state.tooltip, { item: newItem })); } } }); return { instance: { setTooltipItem, removeTooltipItem } }; }; exports.useChartTooltip = useChartTooltip; useChartTooltip.getInitialState = (params, currentState) => ({ tooltip: { itemIsControlled: params.tooltipItem !== undefined, item: params.tooltipItem == null ? null : (0, _useChartSeries.createIdentifierWithType)(currentState)( // Need some as because the generic SeriesType can't be propagated to plugins methods. params.tooltipItem) } }); useChartTooltip.params = { tooltipItem: true, onTooltipItemChange: true };