@mui/x-charts
Version:
The community edition of MUI X Charts components.
41 lines • 1.28 kB
JavaScript
import { getValueToPositionMapper, useScatterSeriesContext, useXAxes, useYAxes } from "../hooks/index.mjs";
/**
* Resolves a scatter item identifier to its on-screen position and the owning
* series. Shared by `FocusedScatterMark`, `HighlightedScatterMark`, and other
* overlay components that need to draw an SVG element at a specific scatter point.
*
* Returns `null` if the identifier is missing, the identifier doesn't point to
* a scatter series, or the referenced point can't be resolved.
*/
export function useScatterItemPosition(item) {
const scatterSeries = useScatterSeriesContext();
const {
xAxis,
xAxisIds
} = useXAxes();
const {
yAxis,
yAxisIds
} = useYAxes();
if (!item || !scatterSeries) {
return null;
}
const series = scatterSeries.series[item.seriesId];
if (!series || series.hidden) {
return null;
}
const scatterPoint = series.data[item.dataIndex];
if (!scatterPoint) {
return null;
}
const xAxisId = series.xAxisId ?? xAxisIds[0];
const yAxisId = series.yAxisId ?? yAxisIds[0];
const cx = getValueToPositionMapper(xAxis[xAxisId].scale)(scatterPoint.x);
const cy = getValueToPositionMapper(yAxis[yAxisId].scale)(scatterPoint.y);
return {
cx,
cy,
series,
scatterPoint
};
}