UNPKG

@mui/x-charts

Version:

The community edition of MUI X Charts components.

46 lines (44 loc) 2.47 kB
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; });