@mui/x-charts
Version:
The community edition of the Charts components (MUI X).
67 lines • 1.87 kB
JavaScript
import _extends from "@babel/runtime/helpers/esm/extends";
import useEventCallback from '@mui/utils/useEventCallback';
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 => _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 = {};