@mui/x-charts
Version:
The community edition of MUI X Charts components.
82 lines (81 loc) • 2.89 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useChartHighlight = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _warning = require("@mui/x-internals/warning");
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");
const useChartHighlight = ({
store,
params
}) => {
(0, _useAssertModelConsistency.useAssertModelConsistency)({
warningPrefix: 'MUI X Charts',
componentName: 'Chart',
propName: 'highlightedItem',
controlled: params.highlightedItem,
defaultValue: null
});
(0, _useEnhancedEffect.default)(() => {
if (store.state.highlight.item !== params.highlightedItem) {
store.set('highlight', (0, _extends2.default)({}, store.state.highlight, {
item: params.highlightedItem
}));
}
if (process.env.NODE_ENV !== 'production') {
if (params.highlightedItem !== undefined && !store.state.highlight.isControlled) {
(0, _warning.warnOnce)(['MUI X Charts: The `highlightedItem` switched between controlled and uncontrolled state.', 'To remove the highlight when using controlled state, you must provide `null` to the `highlightedItem` prop instead of `undefined`.'].join('\n'));
}
}
}, [store, params.highlightedItem]);
const clearHighlight = (0, _useEventCallback.default)(() => {
params.onHighlightChange?.(null);
const prevHighlight = store.state.highlight;
if (prevHighlight.item === null || prevHighlight.isControlled) {
return;
}
store.set('highlight', {
item: null,
lastUpdate: 'pointer',
isControlled: false
});
});
const setHighlight = (0, _useEventCallback.default)(newItem => {
const prevHighlight = store.state.highlight;
if ((0, _fastObjectShallowCompare.fastObjectShallowCompare)(prevHighlight.item, newItem)) {
return;
}
params.onHighlightChange?.(newItem);
if (prevHighlight.isControlled) {
return;
}
store.set('highlight', {
item: newItem,
lastUpdate: 'pointer',
isControlled: false
});
});
return {
instance: {
clearHighlight,
setHighlight
}
};
};
exports.useChartHighlight = useChartHighlight;
useChartHighlight.getInitialState = params => ({
highlight: {
item: params.highlightedItem,
lastUpdate: 'pointer',
isControlled: params.highlightedItem !== undefined
}
});
useChartHighlight.params = {
highlightedItem: true,
onHighlightChange: true
};