@mui/x-charts
Version:
The community edition of MUI X Charts components.
84 lines (80 loc) • 3.41 kB
JavaScript
;
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];
}