@visactor/vgrammar-core
Version:
VGrammar is a visual grammar library
148 lines (141 loc) • 7.85 kB
JavaScript
"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