@visactor/vchart
Version:
charts lib based @visactor/VGrammar
139 lines (132 loc) • 9.38 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: !0
}), exports.registerAreaSeries = exports.AreaSeries = void 0;
const vutils_1 = require("@visactor/vutils"), line_mixin_1 = require("../mixin/line-mixin"), cartesian_1 = require("../cartesian/cartesian"), attribute_1 = require("../../constant/attribute"), scale_1 = require("../../util/scale"), type_1 = require("../interface/type"), vutils_2 = require("@visactor/vutils"), utils_1 = require("../../animation/utils"), interpolate_1 = require("../../typings/interpolate"), line_1 = require("../../mark/line"), area_1 = require("../../mark/area"), symbol_1 = require("../../mark/symbol"), tooltip_helpter_1 = require("./tooltip-helpter"), constant_1 = require("./constant"), factory_1 = require("../../core/factory"), animation_1 = require("./animation"), area_transformer_1 = require("./area-transformer"), utils_2 = require("../util/utils"), cartesian_2 = require("../../component/axis/cartesian"), data_1 = require("../../constant/data"), symbol_overlap_1 = require("../../mark/transform/symbol-overlap"), data_sampling_1 = require("../../mark/transform/data-sampling"), area_2 = require("../../theme/builtin/common/series/area");
class AreaSeries extends cartesian_1.CartesianSeries {
constructor() {
super(...arguments), this.type = type_1.SeriesTypeEnum.area, this.transformerConstructor = area_transformer_1.AreaSeriesSpecTransformer,
this._sortDataByAxis = !1;
}
initMark() {
var _a;
const seriesMark = null !== (_a = this._spec.seriesMark) && void 0 !== _a ? _a : "area", isAreaMarkVisible = this._isAreaVisible() || this._isLineVisible();
this._areaMark = this._createMark(AreaSeries.mark.area, {
groupKey: this._seriesField,
isSeriesMark: isAreaMarkVisible && "point" !== seriesMark
}, {
morphElementKey: this.getDimensionField()[0]
}), this.initSymbolMark("point" === seriesMark);
}
initMarkStyle() {
this.initAreaMarkStyle(), this.initSymbolMarkStyle();
}
initAreaMarkStyle() {
var _a, _b, _c, _d, _e;
const userCurveType = null !== (_c = null === (_b = null === (_a = this.getSpec().area) || void 0 === _a ? void 0 : _a.style) || void 0 === _b ? void 0 : _b.curveType) && void 0 !== _c ? _c : null === (_e = null === (_d = this.getSpec().line) || void 0 === _d ? void 0 : _d.style) || void 0 === _e ? void 0 : _e.curveType, curveType = userCurveType === interpolate_1.DEFAULT_SMOOTH_INTERPOLATE ? "horizontal" === this._direction ? "monotoneY" : "monotoneX" : userCurveType, areaMark = this._areaMark;
if (areaMark) {
const isAreaVisible = this._isAreaVisible(), isLineVisible = this._isLineVisible();
isAreaVisible || isLineVisible ? areaMark.setVisible(!0) : areaMark.setVisible(!1),
"horizontal" === this._direction ? this.setMarkStyle(this._areaMark, {
x: this.dataToPositionX.bind(this),
x1: datum => {
var _a, _b;
return (0, scale_1.valueInScaleRange)(this.dataToPositionX1(datum), null === (_b = null === (_a = this._xAxisHelper) || void 0 === _a ? void 0 : _a.getScale) || void 0 === _b ? void 0 : _b.call(_a, 0));
},
y: this.dataToPositionY.bind(this),
y1: this.dataToPositionY.bind(this),
z: this._fieldZ ? this.dataToPositionZ.bind(this) : null,
orient: this._direction
}, "normal", attribute_1.AttributeLevel.Series) : this.setMarkStyle(this._areaMark, {
x: this.dataToPositionX.bind(this),
x1: this.dataToPositionX.bind(this),
y1: datum => {
var _a, _b;
return (0, scale_1.valueInScaleRange)(this.dataToPositionY1(datum), null === (_b = null === (_a = this._yAxisHelper) || void 0 === _a ? void 0 : _a.getScale) || void 0 === _b ? void 0 : _b.call(_a, 0));
},
y: this.dataToPositionY.bind(this),
z: this._fieldZ ? this.dataToPositionZ.bind(this) : null
}, "normal", attribute_1.AttributeLevel.Series), this.setMarkStyle(areaMark, {
fill: !!isAreaVisible && this.getColorAttribute(),
stroke: !!isLineVisible && this.getColorAttribute()
}, "normal", attribute_1.AttributeLevel.Series), "zero" !== this._invalidType && this.setMarkStyle(areaMark, {
defined: this._getInvalidDefined.bind(this),
connectedType: this._getInvalidConnectType()
}, "normal", attribute_1.AttributeLevel.Series), this.getStack() && this.setMarkStyle(areaMark, {
zIndex: datum => -datum[data_1.STACK_FIELD_END]
}, "normal", attribute_1.AttributeLevel.Series), this.setMarkStyle(areaMark, {
curveType: curveType
}, "normal", attribute_1.AttributeLevel.Built_In), Object.keys(areaMark.stateStyle).forEach((state => {
areaMark.stateStyle[state].stroke && areaMark.setPostProcess("stroke", (result => [ result, !1, !1, !1 ]), state);
}));
}
}
initAnimation() {
var _a, _b, _c, _d;
const areaAnimationParams = {
direction: this.direction
}, appearPreset = null === (_a = this._spec.animationAppear) || void 0 === _a ? void 0 : _a.preset;
if (this._lineMark && this._lineMark.setAnimationConfig((0, utils_1.animationConfig)(null === (_b = factory_1.Factory.getAnimationInKey("line")) || void 0 === _b ? void 0 : _b(areaAnimationParams, appearPreset), (0,
utils_1.userAnimationConfig)("line", this._spec, this._markAttributeContext))),
this._areaMark && this._areaMark.setAnimationConfig((0, utils_1.animationConfig)(null === (_c = factory_1.Factory.getAnimationInKey("area")) || void 0 === _c ? void 0 : _c(areaAnimationParams, appearPreset), (0,
utils_1.userAnimationConfig)("area", this._spec, this._markAttributeContext))),
this._symbolMark) {
const animationParams = (0, utils_2.getGroupAnimationParams)(this);
this._symbolMark.setAnimationConfig((0, utils_1.animationConfig)(null === (_d = factory_1.Factory.getAnimationInKey("scaleInOut")) || void 0 === _d ? void 0 : _d(), (0,
utils_1.userAnimationConfig)("point", this._spec, this._markAttributeContext), animationParams));
}
}
_isAreaVisible() {
var _a;
const areaSpec = this._spec.area || {};
return !1 !== areaSpec.visible && !1 !== (null === (_a = areaSpec.style) || void 0 === _a ? void 0 : _a.visible);
}
_isLineVisible() {
var _a;
const lineSpec = this._spec.line || {};
return !1 !== lineSpec.visible && !1 !== (null === (_a = lineSpec.style) || void 0 === _a ? void 0 : _a.visible);
}
initTooltip() {
this._tooltipHelper = new tooltip_helpter_1.AreaSeriesTooltipHelper(this);
const {group: group, mark: mark} = this._tooltipHelper.activeTriggerSet;
this._areaMark && group.add(this._areaMark), this._lineMark && group.add(this._lineMark),
this._symbolMark && (mark.add(this._symbolMark), group.add(this._symbolMark));
}
viewDataStatisticsUpdate(d) {
super.viewDataStatisticsUpdate(d), this.encodeDefined(this._areaMark, "defined");
}
compile() {
super.compile(), this.addSamplingCompile(), this.addOverlapCompile();
}
getDefaultShapeType() {
return "square";
}
getActiveMarks() {
return [ this._areaMark, this._symbolMark, this._lineMark ];
}
onLayoutEnd() {
super.onLayoutEnd(), this.reCompileSampling();
}
getSeriesStyle(datum) {
return attribute => {
var _a, _b, _c, _d, _e;
const seriesMarkType = null !== (_a = this._spec.seriesMark) && void 0 !== _a ? _a : "area";
let result = null !== (_c = null === (_b = this._seriesMark) || void 0 === _b ? void 0 : _b.getAttribute(attribute, datum)) && void 0 !== _c ? _c : void 0;
return "fill" !== attribute || result && "line" !== seriesMarkType || (attribute = "stroke",
result = null !== (_e = null === (_d = this._seriesMark) || void 0 === _d ? void 0 : _d.getAttribute(attribute, datum)) && void 0 !== _e ? _e : void 0),
"stroke" === attribute && (0, vutils_1.isArray)(result) ? result[0] : result;
};
}
}
exports.AreaSeries = AreaSeries, AreaSeries.type = type_1.SeriesTypeEnum.area, AreaSeries.builtInTheme = {
area: area_2.area
}, AreaSeries.mark = constant_1.areaSeriesMark, AreaSeries.transformerConstructor = area_transformer_1.AreaSeriesSpecTransformer,
(0, vutils_2.mixin)(AreaSeries, line_mixin_1.LineLikeSeriesMixin);
const registerAreaSeries = () => {
(0, data_sampling_1.registerDataSamplingTransform)(), (0, symbol_overlap_1.registerSymbolOverlapTransform)(),
(0, line_1.registerLineMark)(), (0, area_1.registerAreaMark)(), (0, symbol_1.registerSymbolMark)(),
(0, animation_1.registerAreaSeriesAnimation)(), (0, cartesian_2.registerCartesianBandAxis)(),
(0, cartesian_2.registerCartesianLinearAxis)(), factory_1.Factory.registerSeries(AreaSeries.type, AreaSeries);
};
exports.registerAreaSeries = registerAreaSeries;
//# sourceMappingURL=area.js.map