@visactor/vchart
Version:
charts lib based @visactor/VGrammar
34 lines (30 loc) • 2.02 kB
JavaScript
import { convertDomainToTickData } from "@visactor/vrender-components";
import { last, precisionSub, getDecimalPlaces } from "@visactor/vutils";
function saveTick(value, minInput, inputRange, minOutput, outputRange) {
const sub = precisionSub(value, minInput), decimalPlaces = Math.max(getDecimalPlaces(inputRange), getDecimalPlaces(sub));
return outputRange * (Math.round(sub * 10 ** decimalPlaces) / Math.round(inputRange * 10 ** decimalPlaces)) + minOutput;
}
export const tickAlign = (data, op) => {
var _a, _b, _c, _d, _e;
if (!data) return data;
const targetAxis = null === (_a = null == op ? void 0 : op.targetAxis) || void 0 === _a ? void 0 : _a.call(op);
if (!targetAxis) return data;
const currentAxis = null === (_b = null == op ? void 0 : op.currentAxis) || void 0 === _b ? void 0 : _b.call(op);
if (!currentAxis) return data;
const currentData = null === (_c = currentAxis.getTickData()) || void 0 === _c ? void 0 : _c.getDataView();
if (!currentData) return data;
if (!currentData.transformsArr.find((t => t.type.includes("ticks")))) return data;
const currentScale = currentAxis.getScale();
if (!currentScale) return data;
const targetData = null === (_e = null === (_d = targetAxis.getTickData()) || void 0 === _d ? void 0 : _d.getDataView()) || void 0 === _e ? void 0 : _e.latestData;
if (!(null == targetData ? void 0 : targetData.length)) return data;
const targetScale = targetAxis.getScale();
if (!targetScale) return data;
const targetDomain = targetScale.domain(), targetRange = last(targetDomain) - targetDomain[0];
if (0 === targetRange) return data;
const currentDomain = currentScale.domain(), currentRange = last(currentDomain) - currentDomain[0];
if (0 === targetRange) return data;
const newTicks = targetData.map((d => saveTick(d.value, targetDomain[0], targetRange, currentDomain[0], currentRange)));
return convertDomainToTickData(newTicks);
};
//# sourceMappingURL=tick-align-transform.js.map