UNPKG

@mui/x-charts

Version:

The community edition of MUI X Charts components.

84 lines (80 loc) 3.41 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.calculateFinalDomain = calculateFinalDomain; exports.calculateInitialDomainAndTickNumber = calculateInitialDomainAndTickNumber; var _getScale = require("../../../getScale"); var _getAxisDomainLimit = require("./getAxisDomainLimit"); var _ticks = require("../../../ticks"); function niceDomain(scaleType, domain, tickNumber) { return (0, _getScale.getScale)(scaleType ?? 'linear', domain, [0, 1]).nice(tickNumber).domain(); } /** * Calculates the initial domain and tick number for a given axis. * The domain should still run through the zoom filterMode after this step. */ function calculateInitialDomainAndTickNumber(axis, axisDirection, axisIndex, formattedSeries, [minData, maxData], defaultTickNumber, preferStrictDomainInLineCharts) { const domainLimit = getDomainLimit(axis, axisDirection, axisIndex, formattedSeries, preferStrictDomainInLineCharts); let axisExtrema = getActualAxisExtrema(axis, minData, maxData); if (typeof domainLimit === 'function') { const { min, max } = domainLimit(minData.valueOf(), maxData.valueOf()); axisExtrema[0] = min; axisExtrema[1] = max; } const tickNumber = (0, _ticks.getTickNumber)(axis, axisExtrema, defaultTickNumber); if (domainLimit === 'nice') { axisExtrema = niceDomain(axis.scaleType, axisExtrema, tickNumber); } axisExtrema = ['min' in axis ? axis.min ?? axisExtrema[0] : axisExtrema[0], 'max' in axis ? axis.max ?? axisExtrema[1] : axisExtrema[1]]; return { domain: axisExtrema, tickNumber }; } /** * Calculates the final domain for an axis. * After this step, the domain can be used to create the axis scale. */ function calculateFinalDomain(axis, axisDirection, axisIndex, formattedSeries, [minData, maxData], tickNumber, preferStrictDomainInLineCharts) { const domainLimit = getDomainLimit(axis, axisDirection, axisIndex, formattedSeries, preferStrictDomainInLineCharts); let axisExtrema = getActualAxisExtrema(axis, minData, maxData); if (typeof domainLimit === 'function') { const { min, max } = domainLimit(minData.valueOf(), maxData.valueOf()); axisExtrema[0] = min; axisExtrema[1] = max; } if (domainLimit === 'nice') { axisExtrema = niceDomain(axis.scaleType, axisExtrema, tickNumber); } return [axis.min ?? axisExtrema[0], axis.max ?? axisExtrema[1]]; } function getDomainLimit(axis, axisDirection, axisIndex, formattedSeries, preferStrictDomainInLineCharts) { return preferStrictDomainInLineCharts ? (0, _getAxisDomainLimit.getAxisDomainLimit)(axis, axisDirection, axisIndex, formattedSeries) : axis.domainLimit ?? 'nice'; } /** * Get the actual axis extrema considering the user defined min and max values. * @param axisExtrema User defined axis extrema. * @param minData Minimum value from the data. * @param maxData Maximum value from the data. */ function getActualAxisExtrema(axisExtrema, minData, maxData) { let min = minData; let max = maxData; if ('max' in axisExtrema && axisExtrema.max != null && axisExtrema.max < minData) { min = axisExtrema.max; } if ('min' in axisExtrema && axisExtrema.min != null && axisExtrema.min > minData) { max = axisExtrema.min; } if (!('min' in axisExtrema) && !('max' in axisExtrema)) { return [min, max]; } return [axisExtrema.min ?? min, axisExtrema.max ?? max]; }