UNPKG

@visactor/vchart

Version:

charts lib based @visactor/VGrammar

234 lines (227 loc) 11.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: !0 }), exports.registerSunBurstSeries = exports.SunburstSeries = void 0; const vutils_1 = require("@visactor/vutils"), animation_1 = require("./animation"), register_1 = require("../../data/register"), flatten_1 = require("../../data/transforms/flatten"), sunburst_1 = require("../../data/transforms/sunburst"), type_1 = require("../interface/type"), data_1 = require("../../constant/data"), attribute_1 = require("../../constant/attribute"), interface_1 = require("../../compile/mark/interface"), hierarchy_1 = require("../../constant/hierarchy"), config_1 = require("../../animation/config"), data_key_1 = require("../../data/transforms/data-key"), add_property_1 = require("../../data/transforms/add-property"), utils_1 = require("../../animation/utils"), polar_1 = require("../polar/polar"), sunburst_2 = require("../../constant/sunburst"), tooltip_helper_1 = require("./tooltip-helper"), drillable_1 = require("../../interaction/drill/drillable"), arc_1 = require("../../mark/arc"), text_1 = require("../../mark/text"), constant_1 = require("./constant"), factory_1 = require("../../core/factory"), hierarchy_2 = require("../util/hierarchy"), sunburst_3 = require("../../theme/builtin/common/series/sunburst"); class SunburstSeries extends polar_1.PolarSeries { constructor() { super(...arguments), this.type = type_1.SeriesTypeEnum.sunburst; } setCategoryField(f) { return this._categoryField = f, this._categoryField; } getCategoryField() { return this._categoryField; } setValueField(f) { return this._valueField = f, this._valueField; } getValueField() { return this._valueField; } getDimensionField() { return [ this._categoryField ]; } getMeasureField() { return [ this._valueField ]; } setAttrFromSpec() { var _a; super.setAttrFromSpec(), this.setCategoryField(this._spec.categoryField), this.setValueField(this._spec.valueField), this.setSeriesField(null !== (_a = this._spec.seriesField) && void 0 !== _a ? _a : hierarchy_1.DEFAULT_HIERARCHY_ROOT), this._spec.drill && this.initDrillable({ event: this.event, mode: this._option.mode, drillField: () => { var _a; return null !== (_a = this._spec.drillField) && void 0 !== _a ? _a : data_1.DEFAULT_DATA_KEY; }, getRawData: () => this.getRawData() }), this._startAngle = (0, vutils_1.degreeToRadian)(this._spec.startAngle), this._endAngle = (0, vutils_1.degreeToRadian)(this._spec.endAngle), this._centerX = this._spec.centerX, this._centerY = this._spec.centerY, this._offsetX = this._spec.offsetX, this._offsetY = this._spec.offsetY, this.__innerRadius = this._spec.innerRadius, this.__outerRadius = this._spec.outerRadius, this._gap = this._spec.gap, this._labelLayout = this._spec.labelLayout, this._sunburst = this._spec.sunburst, this._label = this._spec.label, this._labelAutoVisible = this._spec.labelAutoVisible; } initData() { super.initData(); const rawData = this.getRawData(); rawData && (this._spec.drill && this.initDrillableData(this._dataSet), (0, register_1.registerDataSetInstanceTransform)(this._dataSet, "sunburstLayout", sunburst_1.sunburstLayout), (0, register_1.registerDataSetInstanceTransform)(this._dataSet, "flatten", flatten_1.flatten), rawData.transform({ type: "sunburstLayout", options: () => { const {innerRadius: innerRadius, outerRadius: outerRadius, gap: gap, label: label} = this._computeLevel(); return { nodeKey: this._categoryField, width: this.getLayoutRect().width, height: this.getLayoutRect().height, center: [ (0, vutils_1.isValid)(this._centerX) ? this._centerX : this.getLayoutRect().width / 2, (0, vutils_1.isValid)(this._centerY) ? this._centerY : this.getLayoutRect().height / 2 ], startAngle: this._startAngle, endAngle: this._endAngle, innerRadius: innerRadius, outerRadius: outerRadius, gapRadius: gap, label: label }; } }), rawData.transform({ type: "flatten", options: { callback: node => { if (node.datum) { const nodeData = node.datum[node.depth]; return Object.assign(Object.assign({}, node), nodeData); } return node; } } })); } getStatisticFields() { return (0, hierarchy_2.appendHierarchyFields)(super.getStatisticFields(), this._categoryField, this._valueField); } _addDataIndexAndKey() { const rawData = this.getRawData(); (0, vutils_1.isNil)(null == rawData ? void 0 : rawData.dataSet) || ((0, register_1.registerDataSetInstanceTransform)(rawData.dataSet, "addVChartProperty", add_property_1.addVChartProperty), rawData.transform({ type: "addVChartProperty", options: { beforeCall: data_key_1.initHierarchyKeyMap.bind(this), call: data_key_1.addHierarchyDataKey } })); } initMark() { this._initArcMark(), this._initLabelMark(); } initMarkStyle() { this._initArcMarkStyle(), this._initLabelMarkStyle(); } _initArcMark() { if (!1 === this._sunburst.visible) return; const sunburstMark = this._createMark(SunburstSeries.mark.sunburst, { isSeriesMark: !0 }); this._sunburstMark = sunburstMark; } _initArcMarkStyle() { (0, vutils_1.isNil)(this._sunburstMark) || this.setMarkStyle(this._sunburstMark, { x: d => d.x + ((0, vutils_1.isValid)(this._offsetX) ? this._offsetX : 0), y: d => d.y + ((0, vutils_1.isValid)(this._offsetY) ? this._offsetY : 0), outerRadius: d => d.outerRadius, innerRadius: d => d.innerRadius, startAngle: d => d.startAngle, endAngle: d => d.endAngle, fill: this.getColorAttribute() }, interface_1.STATE_VALUE_ENUM.STATE_NORMAL, attribute_1.AttributeLevel.Series); } _initLabelMark() { if (!0 !== this._label.visible) return; const labelMark = this._createMark(SunburstSeries.mark.label, { isSeriesMark: !1 }); this._labelMark = labelMark; } _initLabelMarkStyle() { (0, vutils_1.isNil)(this._labelMark) || this.setMarkStyle(this._labelMark, { visible: d => { var _a; const labelAutoVisible = this._labelAutoVisible; return (0, vutils_1.isObject)(labelAutoVisible) && !0 === labelAutoVisible.enable ? (d.endAngle - d.startAngle) * (d.outerRadius - d.innerRadius) > (null !== (_a = null == labelAutoVisible ? void 0 : labelAutoVisible.circumference) && void 0 !== _a ? _a : sunburst_2.SUNBURST_AUTO_VISIBLE_DEFAULT_THRESHOLD) : this._spec.label.visible; }, x: d => { var _a; return (null === (_a = d.label) || void 0 === _a ? void 0 : _a.x) + ((0, vutils_1.isValid)(this._offsetX) ? this._offsetX : 0); }, y: d => { var _a; return (null === (_a = d.label) || void 0 === _a ? void 0 : _a.y) + ((0, vutils_1.isValid)(this._offsetY) ? this._offsetY : 0); }, textBaseline: d => { var _a; return null === (_a = d.label) || void 0 === _a ? void 0 : _a.textBaseline; }, textAlign: d => { var _a; return null === (_a = d.label) || void 0 === _a ? void 0 : _a.textAlign; }, angle: d => { var _a, _b; return null !== (_b = null === (_a = d.label) || void 0 === _a ? void 0 : _a.angle) && void 0 !== _b ? _b : 0; }, fontSize: 10, text: d => d.name }, interface_1.STATE_VALUE_ENUM.STATE_NORMAL, attribute_1.AttributeLevel.Series); } initTooltip() { this._tooltipHelper = new tooltip_helper_1.SunburstTooltipHelper(this), this._sunburstMark && this._tooltipHelper.activeTriggerSet.mark.add(this._sunburstMark), this._labelMark && this._tooltipHelper.activeTriggerSet.mark.add(this._labelMark); } initAnimation() { var _a, _b; const animationParams = { animationInfo: () => ({ innerRadius: this._computeRadius((0, vutils_1.array)(this.__innerRadius))[0], outerRadius: this._computeRadius((0, vutils_1.array)(this.__outerRadius))[0], startAngle: (0, vutils_1.array)(this._startAngle)[0], endAngle: (0, vutils_1.array)(this._endAngle)[0] }) }, appearPreset = null === (_b = null === (_a = this._spec) || void 0 === _a ? void 0 : _a.animationAppear) || void 0 === _b ? void 0 : _b.preset; this.getMarksInType("arc").forEach((mark => { var _a; mark.setAnimationConfig((0, utils_1.animationConfig)(null === (_a = factory_1.Factory.getAnimationInKey("sunburst")) || void 0 === _a ? void 0 : _a(animationParams, appearPreset), (0, utils_1.userAnimationConfig)(mark.name, this._spec, this._markAttributeContext))); })), this.getMarksInType("text").forEach((mark => { var _a; mark.setAnimationConfig((0, utils_1.animationConfig)(null === (_a = factory_1.Factory.getAnimationInKey("fadeInOut")) || void 0 === _a ? void 0 : _a(), (0, utils_1.userAnimationConfig)(mark.name, this._spec, this._markAttributeContext))); })); } initEvent() { super.initEvent(), this._spec.drill && this.bindDrillEvent(); } onLayoutEnd() { super.onLayoutEnd(), this._rawData.reRunAllTransform(); } _computeRadius(radius) { return (0, vutils_1.isArray)(radius) ? radius.map((r => this._computeLayoutRadius() * r)) : this._computeLayoutRadius() * radius; } _computeLevel() { return { innerRadius: this._computeRadius(this.__innerRadius), outerRadius: this._computeRadius(this.__outerRadius), gap: this._gap, label: this._labelLayout }; } getGroupFields() { return []; } getStackGroupFields() { return []; } getStackValueField() { return ""; } _noAnimationDataKey(datum, index) {} getActiveMarks() { return [ this._sunburstMark ]; } getMarkData(datum) { return (null == datum ? void 0 : datum.datum) ? datum.datum[datum.datum.length - 1] : datum; } } exports.SunburstSeries = SunburstSeries, SunburstSeries.type = type_1.SeriesTypeEnum.sunburst, SunburstSeries.mark = constant_1.sunburstSeriesMark, SunburstSeries.builtInTheme = { sunburst: sunburst_3.sunburst }, (0, vutils_1.mixin)(SunburstSeries, drillable_1.Drillable); const registerSunBurstSeries = () => { factory_1.Factory.registerSeries(SunburstSeries.type, SunburstSeries), (0, arc_1.registerArcMark)(), (0, text_1.registerTextMark)(), (0, config_1.registerFadeInOutAnimation)(), (0, animation_1.registerSunburstAnimation)(); }; exports.registerSunBurstSeries = registerSunBurstSeries; //# sourceMappingURL=sunburst.js.map