UNPKG

@mui/x-charts

Version:

The community edition of MUI X Charts components.

101 lines (96 loc) 4.17 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default; Object.defineProperty(exports, "__esModule", { value: true }); exports.defaultizeSeries = exports.applySeriesProcessors = exports.applySeriesLayout = void 0; var _formatErrorMessage2 = _interopRequireDefault(require("@mui/x-internals/formatErrorMessage")); /** * This method groups series by type and adds defaultized values such as the ids and colors. * It does NOT apply the series processors - that happens in a selector. * @param series The array of series provided by the developer * @param colors The color palette used to defaultize series colors * @returns An object structuring all the series by type with default values. */ const defaultizeSeries = ({ series, colors, theme, seriesConfig }) => { // Group series by type const seriesGroups = {}; const idToType = new Map(); series.forEach((seriesData, seriesIndex) => { const seriesWithDefaultValues = seriesConfig[seriesData.type].getSeriesWithDefaultValues(seriesData, seriesIndex, colors, theme); const id = seriesWithDefaultValues.id; if (seriesGroups[seriesData.type] === undefined) { seriesGroups[seriesData.type] = { series: {}, seriesOrder: [] }; } if (seriesGroups[seriesData.type]?.series[id] !== undefined) { throw new Error(process.env.NODE_ENV !== "production" ? `MUI X Charts: Series id "${id}" is not unique. ` + 'Each series must have a unique id to be properly identified and rendered. ' + 'Provide a unique id for each series in your chart configuration.' : (0, _formatErrorMessage2.default)(34, id)); } seriesGroups[seriesData.type].series[id] = seriesWithDefaultValues; seriesGroups[seriesData.type].seriesOrder.push(id); if (idToType.has(id)) { throw new Error(process.env.NODE_ENV !== "production" ? `MUI X Charts: Series id "${id}" is not unique across series types. ` + 'Each series must have a unique id even across different series types. ' + 'Provide a unique id for each series in your chart configuration.' : (0, _formatErrorMessage2.default)(35, id)); } idToType.set(id, seriesData.type); }); return { defaultizedSeries: seriesGroups, idToType }; }; /** * Applies series processors to the defaultized series groups. * This should be called in a selector to compute processed series on-demand. * @param defaultizedSeries The defaultized series groups * @param seriesConfig The series configuration * @param dataset The optional dataset * @returns Processed series with all transformations applied */ exports.defaultizeSeries = defaultizeSeries; const applySeriesProcessors = (defaultizedSeries, seriesConfig, dataset, isItemVisible) => { const processedSeries = {}; // Apply formatter on a type group Object.keys(seriesConfig).forEach(type => { const group = defaultizedSeries[type]; if (group !== undefined) { processedSeries[type] = seriesConfig[type]?.seriesProcessor?.(group, dataset, isItemVisible) ?? group; } }); return processedSeries; }; /** * Applies series processors with drawing area to series if defined. * @param processedSeries The processed series groups * @param seriesConfig The series configuration * @param drawingArea The drawing area * @returns Processed series with all transformations applied */ exports.applySeriesProcessors = applySeriesProcessors; const applySeriesLayout = (processedSeries, seriesConfig, drawingArea) => { let processingDetected = false; const seriesLayout = {}; // Apply processors on series type per group Object.keys(processedSeries).forEach(type => { const processor = seriesConfig[type]?.seriesLayout; const thisSeries = processedSeries[type]; if (processor !== undefined && thisSeries !== undefined) { const newValue = processor(thisSeries, drawingArea); if (newValue && newValue !== processedSeries[type]) { processingDetected = true; seriesLayout[type] = newValue; } } }); if (!processingDetected) { return {}; } return seriesLayout; }; exports.applySeriesLayout = applySeriesLayout;