@mui/x-charts
Version:
The community edition of MUI X Charts components.
73 lines • 2.08 kB
JavaScript
import _extends from "@babel/runtime/helpers/esm/extends";
import useEventCallback from '@mui/utils/useEventCallback';
import { fastObjectShallowCompare } from '@mui/x-internals/fastObjectShallowCompare';
export const useChartInteraction = ({
store
}) => {
const cleanInteraction = useEventCallback(() => {
store.update(prev => {
return _extends({}, prev, {
interaction: {
pointer: null,
item: null
}
});
});
});
const removeItemInteraction = useEventCallback(itemToRemove => {
store.update(prev => {
const prevItem = prev.interaction.item;
if (!itemToRemove) {
// Remove without taking care of the current item
return prevItem === null ? prev : _extends({}, prev, {
interaction: _extends({}, prev.interaction, {
item: null
})
});
}
if (prevItem === null || Object.keys(itemToRemove).some(key => itemToRemove[key] !== prevItem[key])) {
// The current item is already different from the one to remove. No need to clean it.
return prev;
}
return _extends({}, prev, {
interaction: _extends({}, prev.interaction, {
item: null
})
});
});
});
const setItemInteraction = useEventCallback(newItem => {
store.update(prev => {
if (fastObjectShallowCompare(prev.interaction.item, newItem)) {
return prev;
}
return _extends({}, prev, {
interaction: _extends({}, prev.interaction, {
item: newItem
})
});
});
});
const setPointerCoordinate = useEventCallback(coordinate => {
store.update(prev => _extends({}, prev, {
interaction: _extends({}, prev.interaction, {
pointer: coordinate
})
}));
});
return {
instance: {
cleanInteraction,
setItemInteraction,
removeItemInteraction,
setPointerCoordinate
}
};
};
useChartInteraction.getInitialState = () => ({
interaction: {
item: null,
pointer: null
}
});
useChartInteraction.params = {};