@mui/x-charts
Version:
The community edition of MUI X Charts components.
46 lines (44 loc) • 2.47 kB
JavaScript
import { createSelector } from '@mui/x-internals/store';
import { fastObjectShallowCompare } from '@mui/x-internals/fastObjectShallowCompare';
import { selectorChartSeriesProcessed } from "../../corePlugins/useChartSeries/index.js";
import { selectorChartXAxis, selectorChartYAxis } from "../useChartCartesianAxis/useChartCartesianAxisRendering.selectors.js";
const selectKeyboardNavigation = state => state.keyboardNavigation;
export const selectorChartsItemIsFocused = createSelector(selectKeyboardNavigation, (keyboardNavigationState, item) => keyboardNavigationState?.item != null && fastObjectShallowCompare(keyboardNavigationState.item, item));
export const selectorChartsHasFocusedItem = createSelector(selectKeyboardNavigation, keyboardNavigationState => keyboardNavigationState?.item != null);
export const selectorChartsFocusedItem = createSelector(selectKeyboardNavigation, keyboardNavigationState => keyboardNavigationState?.item ?? null);
export const selectorChartsIsKeyboardNavigationEnabled = createSelector(selectKeyboardNavigation, keyboardNavigationState => !!keyboardNavigationState?.enableKeyboardNavigation);
/**
* Selectors to override highlight behavior.
*/
const createSelectAxisHighlight = direction => (item, axis, series) => {
if (item == null || !('dataIndex' in item) || item.dataIndex === undefined) {
return undefined;
}
const seriesConfig = series[item.type]?.series[item.seriesId];
if (!seriesConfig) {
return undefined;
}
let axisId = direction === 'x' ? 'xAxisId' in seriesConfig && seriesConfig.xAxisId : 'yAxisId' in seriesConfig && seriesConfig.yAxisId;
if (axisId === undefined || axisId === false) {
axisId = axis.axisIds[0];
}
return {
axisId,
dataIndex: item.dataIndex
};
};
export const selectorChartsKeyboardXAxisIndex = createSelector(selectorChartsFocusedItem, selectorChartXAxis, selectorChartSeriesProcessed, createSelectAxisHighlight('x'));
export const selectorChartsKeyboardYAxisIndex = createSelector(selectorChartsFocusedItem, selectorChartYAxis, selectorChartSeriesProcessed, createSelectAxisHighlight('y'));
export const selectorChartsKeyboardItem = createSelector(selectKeyboardNavigation, function selectorChartsKeyboardItem(keyboardState) {
if (keyboardState?.item == null) {
return null;
}
const {
type,
seriesId
} = keyboardState.item;
if (type === undefined || seriesId === undefined) {
return null;
}
return keyboardState.item;
});