UNPKG

@visactor/vchart

Version:

charts lib based @visactor/VGrammar

173 lines (168 loc) 10.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: !0 }), exports.ProgressLikeSeries = void 0; const vutils_1 = require("@visactor/vutils"), data_1 = require("../../../constant/data"), polar_1 = require("../../../constant/polar"), attribute_1 = require("../../../constant/attribute"), scale_1 = require("../../../util/scale"), polar_2 = require("../polar"), vrender_core_1 = require("@visactor/vrender-core"), constant_1 = require("./constant"); class ProgressLikeSeries extends polar_2.PolarSeries { constructor() { super(...arguments), this._arcGroupMark = null, this._getAngleValueStart = datum => { const axis = this._getAngleAxis(), {tickMask: tickMask} = this._spec; if ((null == tickMask ? void 0 : tickMask.forceAlign) && this._isTickMaskVisible(axis)) { const originValue = datum[this.getStack() ? data_1.STACK_FIELD_START : data_1.SEGMENT_FIELD_START], subTickData = this._getAngleAxisSubTickData(axis), step = subTickData[1].value - subTickData[0].value, offsetAngle = (0, vutils_1.degreeToRadian)(tickMask.offsetAngle); let pos; if ((0, vutils_1.isValid)(originValue)) { const index = (0, vutils_1.binaryFuzzySearch)(subTickData, (tick => tick.value - originValue)), targetIndex = index >= subTickData.length || originValue > subTickData[index].value - step / 2 ? Math.min(index, subTickData.length - 1) : index > 0 ? index - 1 : void 0; void 0 !== targetIndex && (pos = this.angleAxisHelper.dataToPosition([ subTickData[targetIndex].value - step / 2 ])); } return (0, vutils_1.isNil)(pos) && (pos = this.angleAxisHelper.dataToPosition([ subTickData[0].value - step / 2 ])), pos + offsetAngle; } return this._getAngleValueStartWithoutMask(datum); }, this._getAngleValueEnd = datum => { const axis = this._getAngleAxis(), {tickMask: tickMask} = this._spec; if ((null == tickMask ? void 0 : tickMask.forceAlign) && this._isTickMaskVisible(axis)) { const originValue = datum[this.getStack() ? data_1.STACK_FIELD_END : this._angleField[0]], subTickData = this._getAngleAxisSubTickData(axis), step = subTickData[1].value - subTickData[0].value, offsetAngle = (0, vutils_1.degreeToRadian)(tickMask.offsetAngle), index = (0, vutils_1.binaryFuzzySearch)(subTickData, (tick => tick.value - originValue)), targetIndex = index >= subTickData.length || originValue > subTickData[index].value - step / 2 ? Math.min(index, subTickData.length - 1) : index > 0 ? index - 1 : void 0; let pos; return pos = void 0 !== targetIndex ? this.angleAxisHelper.dataToPosition([ subTickData[targetIndex].value + step / 2 ]) : this.angleAxisHelper.dataToPosition([ subTickData[0].value - step / 2 ]), pos + offsetAngle; } return this._getAngleValueEndWithoutMask(datum); }; } setAttrFromSpec() { var _a, _b, _c; super.setAttrFromSpec(); const chartSpec = null === (_a = this._option.globalInstance.getChart()) || void 0 === _a ? void 0 : _a.getSpec(), startAngle = null !== (_b = this._spec.startAngle) && void 0 !== _b ? _b : null == chartSpec ? void 0 : chartSpec.startAngle; this._startAngle = (0, vutils_1.isValid)(startAngle) ? (0, vutils_1.degreeToRadian)(startAngle) : polar_1.POLAR_START_RADIAN; const endAngle = null !== (_c = this._spec.endAngle) && void 0 !== _c ? _c : null == chartSpec ? void 0 : chartSpec.endAngle; this._endAngle = (0, vutils_1.isValid)(endAngle) ? (0, vutils_1.degreeToRadian)(endAngle) : polar_1.POLAR_END_RADIAN, this.setAngleField(this._spec.valueField || this._spec.angleField), this.setRadiusField(this._spec.categoryField || this._spec.radiusField), this._specAngleField = this._angleField.slice(), this._specRadiusField = this._radiusField.slice(); } getStackGroupFields() { return this._radiusField; } getStackValueField() { var _a; return null === (_a = this._angleField) || void 0 === _a ? void 0 : _a[0]; } getGroupFields() { return this._angleField; } _convertMarkStyle(style) { const newStyle = super._convertMarkStyle(style); if (newStyle.fill) { const value = style.fill; "conical" !== (null == value ? void 0 : value.gradient) || (0, vutils_1.isValid)(null == value ? void 0 : value.startAngle) || (0, vutils_1.isValid)(null == value ? void 0 : value.endAngle) || (newStyle.fill = Object.assign(Object.assign({}, value), { startAngle: this._startAngle, endAngle: this._endAngle })); } return newStyle; } _getAngleValueStartWithoutMask(datum) { if (this.getStack()) { const value = (0, scale_1.valueInScaleRange)(this.angleAxisHelper.dataToPosition([ datum[data_1.STACK_FIELD_START] ]), this.angleAxisHelper.getScale(0)); if ((0, vutils_1.isValidNumber)(value)) return value; } return this._startAngle; } _getAngleValueEndWithoutMask(datum) { if (this.getStack()) { const value = (0, scale_1.valueInScaleRange)(this.angleAxisHelper.dataToPosition([ datum[data_1.STACK_FIELD_END] ]), this.angleAxisHelper.getScale(0)); if ((0, vutils_1.isValidNumber)(value)) return value; } const angle = this.angleAxisHelper.dataToPosition([ datum[this._angleField[0]] ]); return this._spec.clamp ? (0, scale_1.valueInScaleRange)(angle, this.angleAxisHelper.getScale(0)) : angle; } getDimensionField() { return this._specRadiusField; } getMeasureField() { return this._specAngleField; } initMark() { this._initArcGroupMark(); } initMarkStyle() { this._initArcGroupMarkStyle(); } _initArcGroupMark() { return this._arcGroupMark = this._createMark(ProgressLikeSeries.mark.group, { skipBeforeLayouted: !1 }), this._arcGroupMark; } _initArcGroupMarkStyle() { const groupMark = this._arcGroupMark; groupMark.created(), this.setMarkStyle(groupMark, { x: 0, y: 0 }, "normal", attribute_1.AttributeLevel.Series), this._arcGroupMark.setMarkConfig({ interactive: !1, zIndex: this.layoutZIndex, clip: !0, clipPath: () => { const axis = this._getAngleAxis(), {x: x, y: y} = this.angleAxisHelper.center(), radius = this._computeLayoutRadius(); if (this._isTickMaskVisible(axis)) { const {tickMask: tickMask} = this._spec, {angle: angle, offsetAngle: offsetAngle, style: style = {}} = tickMask, subTickData = this._getAngleAxisSubTickData(axis), markStyle = style; return subTickData.map((({value: value}) => { const pos = this.angleAxisHelper.dataToPosition([ value ]) + (0, vutils_1.degreeToRadian)(offsetAngle), angleUnit = (0, vutils_1.degreeToRadian)(angle) / 2; return (0, vrender_core_1.createArc)(Object.assign(Object.assign({}, markStyle), { x: x, y: y, startAngle: pos - angleUnit, endAngle: pos + angleUnit, innerRadius: radius * this._innerRadius, outerRadius: radius * this._outerRadius, fill: !0 })); })); } const {width: width, height: height} = this.getLayoutRect(); return [ (0, vrender_core_1.createRect)({ width: width, height: height, fill: !0 }) ]; } }); } _getAngleAxis() { if (!this.angleAxisHelper) return; const angleAxisId = this.angleAxisHelper.getAxisId(); return this._option.getChart().getAllComponents().find((component => component.id === angleAxisId)); } _getAngleAxisTickData(angleAxis) { var _a; return null === (_a = null == angleAxis ? void 0 : angleAxis.getTickData()) || void 0 === _a ? void 0 : _a.getLatestData(); } _isTickMaskVisible(angleAxis) { const tickData = this._getAngleAxisTickData(angleAxis), {tickMask: tickMask} = this._spec; return tickMask && !1 !== tickMask.visible && (null == tickData ? void 0 : tickData.length) > 1; } _getAngleAxisSubTickData(angleAxis) { var _a; const tickData = this._getAngleAxisTickData(angleAxis), subTickData = [], {subTick: subTick = {}, tick: tick = {}} = null !== (_a = null == angleAxis ? void 0 : angleAxis.getSpec()) && void 0 !== _a ? _a : {}, {tickCount: subTickCount = 4} = subTick, {alignWithLabel: alignWithLabel} = tick; if ((null == tickData ? void 0 : tickData.length) >= 2) { const tickSegment = tickData[1].value - tickData[0].value; for (let i = 0; i < tickData.length - 1; i++) { const pre = tickData[i], next = tickData[i + 1]; subTickData.push(pre); for (let j = 0; j < subTickCount; j++) { const percent = (j + 1) / (subTickCount + 1), value = (1 - percent) * pre.value + percent * (next ? next.value : alignWithLabel ? 1 : pre.value + tickSegment); subTickData.push({ value: value }); } } return subTickData.push(tickData[tickData.length - 1]), subTickData; } return tickData; } } exports.ProgressLikeSeries = ProgressLikeSeries, ProgressLikeSeries.mark = constant_1.progressLikeSeriesMark; //# sourceMappingURL=progress-like.js.map