@mui/x-charts
Version:
The community edition of MUI X Charts components.
51 lines (47 loc) • 2.55 kB
JavaScript
import { createSelector } from '@mui/x-internals/store';
import { selectorChartsInteractionPointerX, selectorChartsInteractionPointerY } from "../useChartInteraction/useChartInteraction.selectors.mjs";
import { getAxisIndex, getAxisValue } from "./getAxisValue.mjs";
import { selectorChartXAxis, selectorChartYAxis } from "./useChartCartesianAxisRendering.selectors.mjs";
/**
* Get interaction indexes
*/
function indexGetter(value, axes, ids = axes.axisIds[0]) {
return Array.isArray(ids) ? ids.map(id => getAxisIndex(axes.axis[id], value)) : getAxisIndex(axes.axis[ids], value);
}
export const selectChartsInteractionAxisIndex = (value, axes, id) => {
if (value === null) {
return null;
}
const index = indexGetter(value, axes, id);
return index === -1 ? null : index;
};
export const selectorChartsInteractionXAxisIndex = createSelector(selectorChartsInteractionPointerX, selectorChartXAxis, selectChartsInteractionAxisIndex);
export const selectorChartsInteractionYAxisIndex = createSelector(selectorChartsInteractionPointerY, selectorChartYAxis, selectChartsInteractionAxisIndex);
export const selectorChartAxisInteraction = createSelector(selectorChartsInteractionPointerX, selectorChartsInteractionPointerY, selectorChartXAxis, selectorChartYAxis, (x, y, xAxis, yAxis) => [...(x === null ? [] : xAxis.axisIds.map(axisId => ({
axisId,
dataIndex: indexGetter(x, xAxis, axisId)
}))), ...(y === null ? [] : yAxis.axisIds.map(axisId => ({
axisId,
dataIndex: indexGetter(y, yAxis, axisId)
})))].filter(item => item.dataIndex !== null && item.dataIndex >= 0));
/**
* Get interaction values
*/
function valueGetter(value, axes, indexes, ids = axes.axisIds[0]) {
return Array.isArray(ids) ? ids.map((id, axisIndex) => {
const axis = axes.axis[id];
return getAxisValue(axis.scale, axis.data, value, indexes[axisIndex]);
}) : getAxisValue(axes.axis[ids].scale, axes.axis[ids].data, value, indexes);
}
export const selectorChartsInteractionXAxisValue = createSelector(selectorChartsInteractionPointerX, selectorChartXAxis, selectorChartsInteractionXAxisIndex, (x, xAxes, xIndex, id) => {
if (x === null || xAxes.axisIds.length === 0) {
return null;
}
return valueGetter(x, xAxes, xIndex, id);
});
export const selectorChartsInteractionYAxisValue = createSelector(selectorChartsInteractionPointerY, selectorChartYAxis, selectorChartsInteractionYAxisIndex, (y, yAxes, yIndex, id) => {
if (y === null || yAxes.axisIds.length === 0) {
return null;
}
return valueGetter(y, yAxes, yIndex, id);
});