UNPKG

@visactor/vgrammar-core

Version:

VGrammar is a visual grammar library

148 lines (141 loc) 7.85 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: !0 }), exports.registerDataZoom = exports.Datazoom = exports.generateDatazoomAttributes = void 0; const vrender_components_1 = require("@visactor/vrender-components"), vutils_1 = require("@visactor/vutils"), enums_1 = require("../graph/enums"), encode_1 = require("../graph/mark/encode"), component_1 = require("../view/component"), mark_1 = require("../parse/mark"), factory_1 = require("../core/factory"), datazoom_filter_1 = require("../interactions/datazoom-filter"), filter_1 = require("../interactions/filter"), generateDatazoomAttributes = (data, theme, addition) => { var _a; const datazoomTheme = null === (_a = null == theme ? void 0 : theme.components) || void 0 === _a ? void 0 : _a.datazoom; return data ? (0, vutils_1.merge)({}, datazoomTheme, { previewData: data }, null != addition ? addition : {}) : (0, vutils_1.merge)({}, datazoomTheme, null != addition ? addition : {}); }; exports.generateDatazoomAttributes = generateDatazoomAttributes; class Datazoom extends component_1.Component { constructor(view, group) { super(view, enums_1.ComponentEnum.datazoom, group), this.spec.componentType = enums_1.ComponentEnum.datazoom; } parseAddition(spec) { var _a; super.parseAddition(spec); const {data: data, x: x, y: y, x1: x1, y1: y1} = null !== (_a = spec.preview) && void 0 !== _a ? _a : {}; return this.preview(data, x, y, x1, y1), this._updateComponentEncoders(), this; } preview(data, x, y, x1, y1) { if (!(0, vutils_1.isNil)(this.spec.preview)) { const lastData = this.spec.preview.data, lastDataGrammar = (0, vutils_1.isString)(lastData) ? this.view.getDataById(lastData) : lastData; this.detach(lastDataGrammar), this.detach((0, mark_1.parseEncodeType)(this.spec.preview.x, this.view)), this.detach((0, mark_1.parseEncodeType)(this.spec.preview.y, this.view)), this.detach((0, mark_1.parseEncodeType)(this.spec.preview.x1, this.view)), this.detach((0, mark_1.parseEncodeType)(this.spec.preview.y1, this.view)); } if (this.spec.preview = void 0, data) { this.spec.preview = { data: data, x: x, y: y, x1: x1, y1: y1 }; const dataGrammar = (0, vutils_1.isString)(data) ? this.view.getDataById(data) : data; this.attach(dataGrammar), this.attach((0, mark_1.parseEncodeType)(x, this.view)), this.attach((0, mark_1.parseEncodeType)(y, this.view)), this.attach((0, mark_1.parseEncodeType)(x1, this.view)), this.attach((0, mark_1.parseEncodeType)(y1, this.view)); } return this._updateComponentEncoders(), this.commit(), this; } setStartEndValue(start, end) { const datazoom = this.getGroupGraphicItem(); return datazoom && datazoom.setStartAndEnd && datazoom.setStartAndEnd(start, end), this; } getStartEndValue() { const datazoom = this.getGroupGraphicItem(); if (datazoom) { const state = datazoom.state; return { start: state.start, end: state.end }; } return null; } addGraphicItem(attrs, groupKey) { var _a; const theme = this.spec.skipTheme ? null : this.view.getCurrentTheme(), initialAttributes = Object.assign({}, null === (_a = null == theme ? void 0 : theme.components) || void 0 === _a ? void 0 : _a.datazoom, attrs), graphicItem = factory_1.Factory.createGraphicComponent(this.componentType, initialAttributes, { skipDefault: this.spec.skipTheme }); return this.setDatazoomHandlers(graphicItem), super.addGraphicItem(initialAttributes, groupKey, graphicItem); } reuse(grammar) { return super.reuse(grammar), this.setDatazoomHandlers(), this; } _updateComponentEncoders() { var _a; const data = null === (_a = this.spec.preview) || void 0 === _a ? void 0 : _a.data, dataGrammar = (0, vutils_1.isString)(data) ? this.view.getDataById(data) : data, encoders = Object.assign({ update: {} }, this.spec.encode), componentEncoders = Object.keys(encoders).reduce(((res, state) => { const encoder = encoders[state]; return encoder && (res[state] = { callback: (datum, element, parameters) => { var _a; const theme = this.spec.skipTheme ? null : this.view.getCurrentTheme(), addition = (0, encode_1.invokeEncoder)(encoder, datum, element, parameters); return (0, exports.generateDatazoomAttributes)(null === (_a = null == dataGrammar ? void 0 : dataGrammar.getValue) || void 0 === _a ? void 0 : _a.call(dataGrammar), theme, addition); } }), res; }), {}); this._encoders = componentEncoders; } invertDatazoomRatio(ratio) { const scale = this.getDatazoomMainScale(); if (scale) { const range = scale.range(), scaledValue = (range[range.length - 1] - range[0]) * ratio + range[0]; return scale.invert(scaledValue); } return null; } getDatazoomMainScale() { var _a, _b; const datazoom = this.getGroupGraphicItem(); if (datazoom && this.spec.preview) { const scale = "top" === datazoom.attribute.orient || "bottom" === datazoom.attribute.orient ? null === (_a = this.spec.preview.x) || void 0 === _a ? void 0 : _a.scale : null === (_b = this.spec.preview.y) || void 0 === _b ? void 0 : _b.scale, scaleGrammar = (0, vutils_1.isString)(scale) ? this.view.getScaleById(scale) : scale; return null == scaleGrammar ? void 0 : scaleGrammar.getScale(); } return null; } setDatazoomHandlers(graphicItem) { var _a; const datazoom = null != graphicItem ? graphicItem : this.getGroupGraphicItem(); datazoom.setStatePointToData((state => { var _a; return this.spec.preview && null !== (_a = this.invertDatazoomRatio(state)) && void 0 !== _a ? _a : state; })); const {data: data, x: x, y: y, x1: x1, y1: y1} = null !== (_a = this.spec.preview) && void 0 !== _a ? _a : {}; datazoom.setPreviewPointsX((datum => { if (x && data) return (0, encode_1.invokeEncoder)({ x: x }, datum, this.elements[0], this.parameters()).x; })), datazoom.setPreviewPointsY((datum => { if (y && data) return (0, encode_1.invokeEncoder)({ y: y }, datum, this.elements[0], this.parameters()).y; })), datazoom.setPreviewPointsX1((datum => { if (x1 && data) return (0, encode_1.invokeEncoder)({ x1: x1 }, datum, this.elements[0], this.parameters()).x1; })), datazoom.setPreviewPointsY1((datum => { if (y1 && data) return (0, encode_1.invokeEncoder)({ y1: y1 }, datum, this.elements[0], this.parameters()).y1; })); } } exports.Datazoom = Datazoom, Datazoom.componentType = enums_1.ComponentEnum.datazoom; const registerDataZoom = () => { factory_1.Factory.registerGraphicComponent(enums_1.ComponentEnum.datazoom, (attrs => new vrender_components_1.DataZoom(attrs))), factory_1.Factory.registerComponent(enums_1.ComponentEnum.datazoom, Datazoom), (0, vutils_1.mixin)(filter_1.Filter, filter_1.FilterMixin), factory_1.Factory.registerInteraction(datazoom_filter_1.DatazoomFilter.type, datazoom_filter_1.DatazoomFilter); }; exports.registerDataZoom = registerDataZoom; //# sourceMappingURL=datazoom.js.map