UNPKG

@visactor/vchart

Version:

charts lib based @visactor/VGrammar

64 lines (56 loc) 2.56 kB
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