UNPKG

@visactor/vchart

Version:

charts lib based @visactor/VGrammar

173 lines (166 loc) 9.97 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: !0 }), exports.registerScatterSeries = exports.ScatterSeries = void 0; const base_1 = require("../../constant/base"), cartesian_1 = require("../cartesian/cartesian"), vutils_1 = require("@visactor/vutils"), attribute_1 = require("../../constant/attribute"), type_1 = require("../interface/type"), interface_1 = require("../../compile/mark/interface"), scatter_1 = require("../../constant/scatter"), utils_1 = require("../../animation/utils"), animation_1 = require("./animation"), symbol_1 = require("../../mark/symbol"), constant_1 = require("./constant"), factory_1 = require("../../core/factory"), scatter_transformer_1 = require("./scatter-transformer"), utils_2 = require("../util/utils"), cartesian_2 = require("../../component/axis/cartesian"), scatter_2 = require("../../theme/builtin/common/series/scatter"); class ScatterSeries extends cartesian_1.CartesianSeries { constructor() { super(...arguments), this.type = type_1.SeriesTypeEnum.scatter, this.transformerConstructor = scatter_transformer_1.ScatterSeriesSpecTransformer, this._invalidType = "zero"; } setAttrFromSpec() { super.setAttrFromSpec(), this._size = this._spec.size, this._sizeField = this._spec.sizeField, this._shape = this._spec.shape, this._shapeField = this._spec.shapeField; } _getSeriesAttribute(field, spec, {defaultScaleType: defaultScaleType, defaultRange: defaultRange}, key) { var _a, _b, _c, _d; if ((0, vutils_1.isFunction)(spec)) return spec; if ((0, vutils_1.isArray)(spec)) { if ((0, vutils_1.isNil)(field)) return null === (_a = this._option) || void 0 === _a || _a.onError(`${key}Field is required.`), spec; if ("ordinal" !== defaultScaleType && spec.length > 2) return null === (_b = this._option) || void 0 === _b || _b.onError(`${key} length is invalid, specify up to 2 ${key}s.`), spec; const scaleName = `${base_1.PREFIX}_series_scatter_${this.id}_scale_${key}`; return this._option.globalScale.registerModelScale({ id: scaleName, type: defaultScaleType, domain: [ { dataId: this._rawData.name, fields: [ field ] } ], range: spec }), { scale: scaleName, field: field }; } if ((0, vutils_1.isObject)(spec)) { if ((0, vutils_1.isNil)(field)) return null === (_c = this._option) || void 0 === _c || _c.onError(`${key}Field is required.`), spec; const scaleName = `${base_1.PREFIX}_series_scatter_${this.id}_scale_${key}`, visualSpec = Object.assign({ id: scaleName, type: defaultScaleType, domain: [ { dataId: this._rawData.name, fields: [ field ] } ], range: defaultRange }, spec); return this._option.globalScale.registerModelScale(visualSpec), { scale: visualSpec.id, field: field }; } return null === (_d = this._option) || void 0 === _d || _d.onError(`${key} attribute is invalid.`), spec; } getSizeAttribute(field, sizeSpec) { return (0, vutils_1.isNil)(sizeSpec) ? scatter_1.SCATTER_DEFAULT_SIZE : (0, vutils_1.isNumber)(sizeSpec) ? sizeSpec : (0, vutils_1.isString)(sizeSpec) && (0, vutils_1.isNumeric)(sizeSpec) ? parseFloat(sizeSpec) : this._getSeriesAttribute(field, sizeSpec, { defaultScaleType: scatter_1.SCATTER_DEFAULT_SIZE_SCALE_TYPE, defaultRange: scatter_1.SCATTER_DEFAULT_RANGE_SIZE }, "size"); } getShapeAttribute(field, shapeSpec) { return (0, vutils_1.isNil)(shapeSpec) ? scatter_1.SCATTER_DEFAULT_SHAPE : (0, vutils_1.isString)(shapeSpec) ? shapeSpec : this._getSeriesAttribute(field, shapeSpec, { defaultScaleType: scatter_1.SCATTER_DEFAULT_SHAPE_SCALE_TYPE, defaultRange: scatter_1.SCATTER_DEFAULT_RANGE_SHAPE }, "shape"); } initMark() { this._symbolMark = this._createMark(ScatterSeries.mark.point, { groupKey: this._seriesField, isSeriesMark: !0 }, { morph: (0, utils_1.shouldMarkDoMorph)(this._spec, ScatterSeries.mark.point.name), morphElementKey: this.getDimensionField()[0] }); } initMarkStyle() { this.initSymbolMarkStyle(); } initAnimation() { var _a, _b, _c; const animationParams = (0, utils_2.getGroupAnimationParams)(this), appearPreset = null === (_b = null === (_a = this._spec) || void 0 === _a ? void 0 : _a.animationAppear) || void 0 === _b ? void 0 : _b.preset; this._symbolMark.setAnimationConfig((0, utils_1.animationConfig)(null === (_c = factory_1.Factory.getAnimationInKey("scatter")) || void 0 === _c ? void 0 : _c({}, appearPreset), (0, utils_1.userAnimationConfig)("point", this._spec, this._markAttributeContext), animationParams)); } initSymbolMarkStyle() { const symbolMark = this._symbolMark; symbolMark && ("zero" !== this._invalidType && this.setMarkStyle(symbolMark, { visible: this._getInvalidDefined.bind(this) }), this.setMarkStyle(symbolMark, { x: this.dataToPositionX.bind(this), y: this.dataToPositionY.bind(this), z: this._fieldZ ? this.dataToPositionZ.bind(this) : null, fill: this.getColorAttribute(), size: (0, vutils_1.isNumber)(this._size) || (0, vutils_1.isFunction)(this._size) ? this._size : scatter_1.SCATTER_DEFAULT_SIZE, symbolType: (0, vutils_1.isString)(this._shape) || (0, vutils_1.isFunction)(this._shape) ? this._shape : scatter_1.SCATTER_DEFAULT_SHAPE }, interface_1.STATE_VALUE_ENUM.STATE_NORMAL, attribute_1.AttributeLevel.Series), ((0, vutils_1.isValid)(this._sizeField) || (0, vutils_1.isValid)(this._size)) && this.setMarkStyle(symbolMark, { size: this.getSizeAttribute(this._sizeField, this._size) }, interface_1.STATE_VALUE_ENUM.STATE_NORMAL, attribute_1.AttributeLevel.User_Mark), ((0, vutils_1.isValid)(this._shapeField) || (0, vutils_1.isValid)(this._shape)) && this.setMarkStyle(symbolMark, { symbolType: this.getShapeAttribute(this._shapeField, this._shape) }, interface_1.STATE_VALUE_ENUM.STATE_NORMAL, attribute_1.AttributeLevel.User_Mark)); } initTooltip() { super.initTooltip(), this._symbolMark && this._tooltipHelper.activeTriggerSet.mark.add(this._symbolMark); } viewDataStatisticsUpdate(d) { super.viewDataStatisticsUpdate(d); const allValid = [ this.getDimensionField()[0], this.getStackValueField() ].every((field => { var _a, _b, _c; return field && (null === (_c = null === (_b = null === (_a = this.getViewDataStatistics()) || void 0 === _a ? void 0 : _a.latestData) || void 0 === _b ? void 0 : _b[field]) || void 0 === _c ? void 0 : _c.allValid); })); "zero" === this._invalidType || allValid ? this.setMarkStyle(this._symbolMark, { visible: !0 }, "normal", attribute_1.AttributeLevel.Series) : this.setMarkStyle(this._symbolMark, { visible: this._getInvalidDefined.bind(this) }, "normal", attribute_1.AttributeLevel.Series), this._symbolMark.getProduct() && this._symbolMark.compileEncode(); } initLabelMarkStyle(labelMark) { labelMark && (this._labelMark = labelMark, this.setMarkStyle(labelMark, { fill: this.getColorAttribute(), text: datum => datum[this.getStackValueField()], z: this._fieldZ ? this.dataToPositionZ.bind(this) : null }, interface_1.STATE_VALUE_ENUM.STATE_NORMAL, attribute_1.AttributeLevel.Series), "zero" !== this._invalidType && this.setMarkStyle(labelMark, { visible: this._getInvalidDefined.bind(this) }, interface_1.STATE_VALUE_ENUM.STATE_NORMAL, attribute_1.AttributeLevel.Series)); } handleZoom(e) { var _a, _b; this.getMarksWithoutRoot().forEach((mark => { if (!mark) return; const graphics = mark.getGraphics(); graphics && graphics.length && graphics.forEach(((graphicItem, i) => { var _a, _b; const datum = null === (_b = null === (_a = null == graphicItem ? void 0 : graphicItem.context) || void 0 === _a ? void 0 : _a.data) || void 0 === _b ? void 0 : _b[0], newPosition = this.dataToPosition(datum); newPosition && graphicItem && graphicItem.translateTo(newPosition.x, newPosition.y); })); })); const vgrammarLabel = null === (_b = null === (_a = this._labelMark) || void 0 === _a ? void 0 : _a.getComponent()) || void 0 === _b ? void 0 : _b.getProduct(); vgrammarLabel && vgrammarLabel.evaluate(null, null); } handlePan(e) { this.handleZoom(e); } getDefaultShapeType() { return "circle"; } getActiveMarks() { return [ this._symbolMark ]; } } exports.ScatterSeries = ScatterSeries, ScatterSeries.type = type_1.SeriesTypeEnum.scatter, ScatterSeries.mark = constant_1.scatterSeriesMark, ScatterSeries.builtInTheme = { scatter: scatter_2.scatter }, ScatterSeries.transformerConstructor = scatter_transformer_1.ScatterSeriesSpecTransformer; const registerScatterSeries = () => { (0, symbol_1.registerSymbolMark)(), (0, animation_1.registerScatterAnimation)(), (0, cartesian_2.registerCartesianBandAxis)(), (0, cartesian_2.registerCartesianLinearAxis)(), factory_1.Factory.registerSeries(ScatterSeries.type, ScatterSeries); }; exports.registerScatterSeries = registerScatterSeries; //# sourceMappingURL=scatter.js.map