@mui/x-charts
Version:
The community edition of MUI X Charts components.
64 lines • 1.84 kB
JavaScript
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 useChartHighlight = ({
store,
params
}) => {
useAssertModelConsistency({
warningPrefix: 'MUI X Charts',
componentName: 'Chart',
propName: 'highlightedItem',
controlled: params.highlightedItem,
defaultValue: null
});
useEnhancedEffect(() => {
store.update(prevState => prevState.highlight.item === params.highlightedItem ? prevState : _extends({}, prevState, {
highlight: _extends({}, prevState.highlight, {
item: params.highlightedItem
})
}));
}, [store, params.highlightedItem]);
const clearHighlight = useEventCallback(() => {
params.onHighlightChange?.(null);
store.update(prev => _extends({}, prev, {
highlight: {
item: null
}
}));
});
const setHighlight = useEventCallback(newItem => {
const prevItem = store.getSnapshot().highlight.item;
if (fastObjectShallowCompare(prevItem, newItem)) {
return;
}
params.onHighlightChange?.(newItem);
store.update(prev => _extends({}, prev, {
highlight: {
item: newItem
}
}));
});
return {
instance: {
clearHighlight,
setHighlight
}
};
};
useChartHighlight.getDefaultizedParams = ({
params
}) => _extends({}, params, {
highlightedItem: params.highlightedItem ?? null
});
useChartHighlight.getInitialState = params => ({
highlight: {
item: params.highlightedItem
}
});
useChartHighlight.params = {
highlightedItem: true,
onHighlightChange: true
};