@mui/x-charts
Version:
The community edition of MUI X Charts components.
58 lines • 3.41 kB
JavaScript
import { createSelector, createSelectorMemoized } from '@mui/x-internals/store';
import { selectorChartSeriesConfig, selectorChartSeriesProcessed, selectorChartSeriesLayout } from "../../corePlugins/useChartSeries/index.js";
import { selectorChartXAxis, selectorChartYAxis } from "../useChartCartesianAxis/useChartCartesianAxisRendering.selectors.js";
import { selectorChartsKeyboardItem, selectorChartsHasFocusedItem } from "../useChartKeyboardNavigation/index.js";
import { selectorChartsLastInteraction } from "../useChartInteraction/useChartInteraction.selectors.js";
import { selectorChartDrawingArea } from "../../corePlugins/useChartDimensions/useChartDimensions.selectors.js";
import { isCartesianSeries } from "../../../isCartesian.js";
import { selectorChartRadiusAxis, selectorChartRotationAxis } from "../useChartPolarAxis/useChartPolarAxis.selectors.js";
const selectTooltip = state => state.tooltip;
export const selectorChartsTooltipPointerItem = createSelector(selectTooltip, tooltip => tooltip?.item ?? null);
export const selectorChartsTooltipPointerItemIsDefined = createSelector(selectorChartsTooltipPointerItem, item => item !== null);
export const selectorChartsTooltipItem = createSelector(selectorChartsLastInteraction, selectorChartsTooltipPointerItem, selectorChartsKeyboardItem, (lastInteraction, pointerItem, keyboardItem) => lastInteraction === 'keyboard' ? keyboardItem : pointerItem ?? null);
export const selectorChartsTooltipItemIsDefined = createSelector(selectorChartsLastInteraction, selectorChartsTooltipPointerItemIsDefined, selectorChartsHasFocusedItem, (lastInteraction, pointerItemIsDefined, keyboardItemIsDefined) => lastInteraction === 'keyboard' ? keyboardItemIsDefined : pointerItemIsDefined);
const selectorChartsTooltipAxisConfig = createSelectorMemoized(selectorChartsTooltipItem, selectorChartXAxis, selectorChartYAxis, selectorChartRotationAxis, selectorChartRadiusAxis, selectorChartSeriesProcessed, function selectorChartsTooltipAxisConfig(identifier, {
axis: xAxis,
axisIds: xAxisIds
}, {
axis: yAxis,
axisIds: yAxisIds
}, rotationAxes, radiusAxes, series) {
if (!identifier) {
return {};
}
const itemSeries = series[identifier.type]?.series[identifier.seriesId];
if (!itemSeries) {
return {};
}
const axesConfig = {
rotationAxes,
radiusAxes
};
const xAxisId = isCartesianSeries(itemSeries) ? itemSeries.xAxisId ?? xAxisIds[0] : undefined;
const yAxisId = isCartesianSeries(itemSeries) ? itemSeries.yAxisId ?? yAxisIds[0] : undefined;
if (xAxisId !== undefined) {
axesConfig.x = xAxis[xAxisId];
}
if (yAxisId !== undefined) {
axesConfig.y = yAxis[yAxisId];
}
return axesConfig;
});
export const selectorChartsTooltipItemPosition = createSelectorMemoized(selectorChartsTooltipItem, selectorChartDrawingArea, selectorChartSeriesConfig, selectorChartSeriesProcessed, selectorChartSeriesLayout, selectorChartsTooltipAxisConfig, function selectorChartsTooltipItemPosition(identifier, drawingArea, seriesConfig, series, seriesLayout, axesConfig, placement = 'top') {
if (!identifier) {
return null;
}
const itemSeries = series[identifier.type]?.series[identifier.seriesId];
if (!itemSeries) {
return null;
}
return seriesConfig[itemSeries.type].tooltipItemPositionGetter?.({
series,
seriesLayout,
drawingArea,
axesConfig,
identifier,
placement
}) ?? null;
});