@mui/x-charts
Version:
The community edition of MUI X Charts components.
84 lines (82 loc) • 3.38 kB
JavaScript
;
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
};