in packages/charts/src/chart_types/xy_chart/state/selectors/merge_y_custom_domains.ts [15:56]
export function mergeYCustomDomainsByGroupId(
axesSpecs: AxisSpec[],
chartRotation: Rotation,
): Map<GroupId, YDomainRange> {
const domainsByGroupId = new Map<GroupId, YDomainRange>();
axesSpecs.forEach((spec: AxisSpec) => {
const { id, groupId, domain } = spec;
if (!domain) return;
if (isXDomain(spec.position, chartRotation)) {
throw new Error(`[Axis ${id}]: custom domain for xDomain should be defined in Settings`);
}
if (domain.min > domain.max) {
throw new Error(`[Axis ${id}]: custom domain is invalid, min is greater than max`);
}
const prevGroupDomain = domainsByGroupId.get(groupId);
if (prevGroupDomain) {
const mergedDomain = {
min: Math.min(
Number.isFinite(domain.min) ? domain.min : Infinity,
prevGroupDomain && Number.isFinite(prevGroupDomain.min) ? prevGroupDomain.min : Infinity,
),
max: Math.max(
Number.isFinite(domain.max) ? domain.max : -Infinity,
prevGroupDomain && Number.isFinite(prevGroupDomain.max) ? prevGroupDomain.max : -Infinity,
),
};
if (Number.isFinite(mergedDomain.min) || Number.isFinite(mergedDomain.max)) {
domainsByGroupId.set(groupId, mergedDomain);
}
} else {
domainsByGroupId.set(groupId, domain);
}
});
return domainsByGroupId;
}