UNPKG

@mui/x-charts

Version:

The community edition of MUI X Charts components.

43 lines 2 kB
import { fastArrayCompare } from '@mui/x-internals/fastArrayCompare'; import { warnOnce } from '@mui/x-internals/warning'; import { createSelector } from "./plugins/utils/selectors.js"; import { selectorChartSeriesProcessed } from "./plugins/corePlugins/useChartSeries/useChartSeries.selectors.js"; import { useStore } from "./store/useStore.js"; import { useSelector } from "./store/useSelector.js"; export function createSeriesSelectorsOfType(seriesType) { const selectorSeriesWithIds = createSelector([selectorChartSeriesProcessed, (_, ids) => ids], (processedSeries, ids) => { if (!ids || Array.isArray(ids) && ids.length === 0) { return processedSeries[seriesType]?.seriesOrder?.map(seriesId => processedSeries[seriesType]?.series[seriesId]) ?? []; } if (!Array.isArray(ids)) { return processedSeries[seriesType]?.series?.[ids]; } const result = []; const failedIds = []; for (const id of ids) { const series = processedSeries[seriesType]?.series?.[id]; if (series) { result.push(series); } else { failedIds.push(id); } } if (process.env.NODE_ENV !== 'production' && failedIds.length > 0) { const formattedIds = failedIds.map(v => JSON.stringify(v)).join(', '); const fnName = `use${seriesType.charAt(0).toUpperCase()}${seriesType.slice(1)}Series`; warnOnce([`MUI X Charts: The following ids provided to "${fnName}" could not be found: ${formattedIds}.`, `Make sure that they exist and their series are using the "${seriesType}" series type.`]); } return result; }); return ids => { const store = useStore(); return useSelector(store, selectorSeriesWithIds, [ids], fastArrayCompare); }; } export function createAllSeriesSelectorOfType(seriesType) { const selectorSeries = createSelector([selectorChartSeriesProcessed], processedSeries => processedSeries[seriesType]); return () => { const store = useStore(); return useSelector(store, selectorSeries); }; }