@visactor/vchart
Version:
charts lib based @visactor/VGrammar
64 lines (56 loc) • 2.56 kB
JavaScript
import { ChartEvent } from "../../../constant/event";
import { zeroAlign } from "./zero-align-transform";
import { isContinuous } from "@visactor/vscale";
import { registerDataSetInstanceTransform } from "../../../data/register";
import { tickAlign } from "./tick-align-transform";
import { BasePlugin } from "../../base/base-plugin";
export class AxisSyncPlugin extends BasePlugin {
constructor() {
super(AxisSyncPlugin.type), this.type = "AxisSyncPlugin";
}
_checkEnableSync(axis) {
if (!isContinuous(axis.getScale().type)) return !1;
const sync = axis.getSpec().sync;
return !!(null == sync ? void 0 : sync.axisId) && sync;
}
_getTargetAxis(axis, sync) {
const targetAxis = axis.getOption().getChart().getComponentByUserId(sync.axisId);
return (null == targetAxis ? void 0 : targetAxis.type.startsWith("cartesianAxis")) ? targetAxis : null;
}
onInit(service, axis) {
const sync = this._checkEnableSync(axis);
if (!sync) return;
if (!sync.zeroAlign) return;
const targetAxis = this._getTargetAxis(axis, sync);
targetAxis && axis.event.on(ChartEvent.scaleDomainUpdate, {
filter: ({model: model}) => model.id === axis.id || model.id === targetAxis.id
}, (() => {
zeroAlign(targetAxis, axis);
}));
}
onDidCompile(service, axis) {
var _a;
const sync = this._checkEnableSync(axis);
if (!sync) return;
const targetAxis = this._getTargetAxis(axis, sync);
if (targetAxis && sync.tickAlign) {
registerDataSetInstanceTransform(axis.getOption().dataSet, "tickAlign", tickAlign);
const opt = {
targetAxis: () => targetAxis,
currentAxis: () => axis
}, targetDataView = null === (_a = targetAxis.getTickData()) || void 0 === _a ? void 0 : _a.getDataView();
targetDataView && targetDataView.target.addListener("change", (() => {
var _a, _b;
null === (_b = null === (_a = axis.getTickData()) || void 0 === _a ? void 0 : _a.getDataView()) || void 0 === _b || _b.reRunAllTransform({
skipEqual: !0
});
})), axis.addTransformToTickData({
type: "tickAlign",
options: opt,
level: Number.MAX_SAFE_INTEGER
}, !1);
}
}
}
AxisSyncPlugin.pluginType = "component", AxisSyncPlugin.type = "AxisSyncPlugin";
//# sourceMappingURL=axis-sync.js.map