@visactor/vchart
Version:
charts lib based @visactor/VGrammar
148 lines (141 loc) • 7.96 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: !0
}), exports.registerGaugeSeries = exports.GaugeSeries = void 0;
const type_1 = require("../interface/type"), progress_like_1 = require("../polar/progress-like/progress-like"), register_1 = require("../../data/register"), data_1 = require("../../constant/data"), utils_1 = require("../../animation/utils"), constant_1 = require("./constant"), vutils_1 = require("@visactor/vutils"), factory_1 = require("../../core/factory"), progress_like_2 = require("../polar/progress-like"), gauge_transformer_1 = require("./gauge-transformer"), arc_1 = require("../../mark/arc"), polar_1 = require("../../component/axis/polar"), attribute_1 = require("../../constant/attribute"), util_1 = require("../../util"), gauge_1 = require("../../theme/builtin/common/series/gauge");
class GaugeSeries extends progress_like_1.ProgressLikeSeries {
constructor() {
super(...arguments), this.type = type_1.SeriesTypeEnum.gauge, this.transformerConstructor = gauge_transformer_1.GaugeSeriesSpecTransformer,
this._segmentMark = null, this._trackMark = null, this._padAngle = 0;
}
setAttrFromSpec() {
var _a;
super.setAttrFromSpec(), this._padAngle = (0, vutils_1.degreeToRadian)(null !== (_a = this._spec.padAngle) && void 0 !== _a ? _a : 0);
}
initData() {
var _a;
super.initData();
(0, register_1.registerDataSetInstanceTransform)(this._option.dataSet, "spiltSegment", ((data, op) => {
const dataCollect = data.slice();
return dataCollect.sort(((a, b) => a[this._angleField[0]] - b[this._angleField[0]])),
dataCollect.forEach(((datum, i) => {
datum[data_1.SEGMENT_FIELD_END] = datum[this._angleField[0]], datum[data_1.SEGMENT_FIELD_START] = i > 0 ? dataCollect[i - 1][data_1.SEGMENT_FIELD_END] : void 0;
})), dataCollect;
})), null === (_a = this.getViewData()) || void 0 === _a || _a.transform({
type: "spiltSegment"
}, !1);
}
initMark() {
super.initMark(), this._trackMark = this._createMark(GaugeSeries.mark.track, {
parent: this._arcGroupMark,
dataView: !1
}), this._segmentMark = this._createMark(GaugeSeries.mark.segment, {
parent: this._arcGroupMark,
isSeriesMark: !0
});
}
initMarkStyle() {
super.initMarkStyle(), this.initTrackMarkStyle(), this.initSegmentMarkStyle();
}
initSegmentMarkStyle() {
var _a;
const segmentMark = this._segmentMark;
segmentMark && this.setMarkStyle(segmentMark, {
x: () => this.angleAxisHelper.center().x,
y: () => this.angleAxisHelper.center().y,
startAngle: this._getAngleValueStart.bind(this),
endAngle: this._getAngleValueEnd.bind(this),
innerRadius: () => {
var _a;
return this._computeLayoutRadius() * (null !== (_a = this._spec.innerRadius) && void 0 !== _a ? _a : 0);
},
outerRadius: () => {
var _a, _b;
return this._computeLayoutRadius() * (null !== (_b = null !== (_a = this._spec.radius) && void 0 !== _a ? _a : this._spec.outerRadius) && void 0 !== _b ? _b : 1);
},
cap: null !== (_a = this._spec.roundCap) && void 0 !== _a && _a,
boundsMode: "imprecise",
cornerRadius: this._spec.cornerRadius,
fill: this.getColorAttribute(),
zIndex: 200,
forceShowCap: !0
});
}
generateRadiusStyle(spec) {
if (!spec) return;
const style = {};
return spec.outerRadius && (style.outerRadius = () => this._computeLayoutRadius() * spec.outerRadius),
spec.innerRadius && (style.innerRadius = () => this._computeLayoutRadius() * spec.innerRadius),
style;
}
initMarkStyleWithSpec(mark, spec) {
if (super.initMarkStyleWithSpec(mark, spec), mark && "segment" === mark.name) {
const segmentSpec = this.getSpec().segment;
if (segmentSpec) for (const state in segmentSpec.state || {}) this.setMarkStyle(mark, this.generateRadiusStyle(segmentSpec.state[state]), state, attribute_1.AttributeLevel.User_Mark);
}
}
initTooltip() {
super.initTooltip(), this._segmentMark && this._tooltipHelper.activeTriggerSet.mark.add(this._segmentMark);
}
initTrackMarkStyle() {
var _a;
const trackMark = this._trackMark;
trackMark && this.setMarkStyle(trackMark, {
x: () => this.angleAxisHelper.center().x,
y: () => this.angleAxisHelper.center().y,
startAngle: this._startAngle,
endAngle: this._endAngle,
innerRadius: () => {
var _a;
return this._computeLayoutRadius() * (null !== (_a = this._spec.innerRadius) && void 0 !== _a ? _a : 0);
},
outerRadius: () => {
var _a, _b;
return this._computeLayoutRadius() * (null !== (_b = null !== (_a = this._spec.radius) && void 0 !== _a ? _a : this._spec.outerRadius) && void 0 !== _b ? _b : 1);
},
cap: null !== (_a = this._spec.roundCap) && void 0 !== _a && _a,
boundsMode: "imprecise",
cornerRadius: this._spec.cornerRadius,
zIndex: 100
});
}
_getAngleValueStartWithoutMask(datum) {
const startAngle = this._getAngleValueStartWithoutPadAngle(datum), endAngle = this._getAngleValueEndWithoutPadAngle(datum), angle = (0,
vutils_1.clamper)(startAngle, (startAngle + endAngle) / 2)(startAngle + (endAngle > startAngle ? 1 : -1) * Math.abs(this._padAngle / 2));
return this._spec.clamp ? (0, util_1.valueInScaleRange)(angle, this.angleAxisHelper.getScale(0)) : angle;
}
_getAngleValueEndWithoutMask(datum) {
const startAngle = this._getAngleValueStartWithoutPadAngle(datum), endAngle = this._getAngleValueEndWithoutPadAngle(datum), angle = (0,
vutils_1.clamper)(endAngle, (startAngle + endAngle) / 2)(endAngle - (endAngle > startAngle ? 1 : -1) * Math.abs(this._padAngle / 2));
return this._spec.clamp ? (0, util_1.valueInScaleRange)(angle, this.angleAxisHelper.getScale(0)) : angle;
}
_getAngleValueStartWithoutPadAngle(datum) {
return (0, vutils_1.isValid)(datum[data_1.SEGMENT_FIELD_START]) ? this.angleAxisHelper.dataToPosition([ datum[data_1.SEGMENT_FIELD_START] ]) : this._startAngle;
}
_getAngleValueEndWithoutPadAngle(datum) {
return this.angleAxisHelper.dataToPosition([ datum[data_1.SEGMENT_FIELD_END] ]);
}
initAnimation() {
var _a, _b, _c;
const appearPreset = null === (_b = null === (_a = this._spec) || void 0 === _a ? void 0 : _a.animationAppear) || void 0 === _b ? void 0 : _b.preset;
this._segmentMark.setAnimationConfig((0, utils_1.animationConfig)(null === (_c = factory_1.Factory.getAnimationInKey("circularProgress")) || void 0 === _c ? void 0 : _c({
startAngle: this._startAngle
}, appearPreset), (0, utils_1.userAnimationConfig)("segment", this._spec, this._markAttributeContext)));
}
getDefaultShapeType() {
return "circle";
}
getActiveMarks() {
return [];
}
}
exports.GaugeSeries = GaugeSeries, GaugeSeries.type = type_1.SeriesTypeEnum.gauge,
GaugeSeries.mark = constant_1.gaugeSeriesMark, GaugeSeries.builtInTheme = {
gauge: gauge_1.gauge
}, GaugeSeries.transformerConstructor = gauge_transformer_1.GaugeSeriesSpecTransformer;
const registerGaugeSeries = () => {
factory_1.Factory.registerSeries(GaugeSeries.type, GaugeSeries), (0, arc_1.registerArcMark)(),
(0, progress_like_2.registerProgressLikeAnimation)(), (0, polar_1.registerPolarLinearAxis)();
};
exports.registerGaugeSeries = registerGaugeSeries;
//# sourceMappingURL=gauge.js.map