UNPKG

@visactor/vchart

Version:

charts lib based @visactor/VGrammar

488 lines (455 loc) 28.7 kB
import { isContinuous } from "@visactor/vscale"; import { CartesianSeries } from "../cartesian/cartesian"; import { DEFAULT_DATA_KEY, STACK_FIELD_END, STACK_FIELD_END_PERCENT, STACK_FIELD_START, STACK_FIELD_START_PERCENT } from "../../constant/data"; import { AttributeLevel } from "../../constant/attribute"; import { valueInScaleRange } from "../../util/scale"; import { getRegionStackGroup } from "../../util/data"; import { getActualNumValue } from "../../util/space"; import { registerBarAnimation } from "./animation"; import { animationConfig, shouldMarkDoMorph, userAnimationConfig } from "../../animation/utils"; import { SeriesTypeEnum } from "../interface/type"; import { registerRectMark } from "../../mark/rect"; import { array, isFunction, isNil, isValid, last } from "@visactor/vutils"; import { barSeriesMark } from "./constant"; import { stackWithMinHeight } from "../util/stack"; import { Factory } from "../../core/factory"; import { registerDataSetInstanceTransform } from "../../data/register"; import { DataView } from "@visactor/vdataset"; import { addVChartProperty } from "../../data/transforms/add-property"; import { addDataKey, initKeyMap } from "../../data/transforms/data-key"; import { getGroupAnimationParams } from "../util/utils"; import { BarSeriesSpecTransformer } from "./bar-transformer"; import { ComponentTypeEnum } from "../../component/interface"; import { RECT_X, RECT_X1, RECT_Y, RECT_Y1 } from "../base/constant"; import { createRect } from "@visactor/vrender-core"; import { registerCartesianLinearAxis, registerCartesianBandAxis } from "../../component/axis/cartesian"; import { CompilableData } from "../../compile/data"; import { registerDataSamplingTransform } from "../../mark/transform/data-sampling"; import { maxInArr, minInArr } from "../../util/array"; import { bar } from "../../theme/builtin/common/series/bar"; export const DefaultBandWidth = 6; export class BarSeries extends CartesianSeries { constructor() { super(...arguments), this.type = SeriesTypeEnum.bar, this._barMarkName = "bar", this._barMarkType = "rect", this.transformerConstructor = BarSeriesSpecTransformer, this._bandPosition = 0, this._getLinearBarRange = (start, end) => { let [x, x1] = [ start, end ].sort(((a, b) => a - b)); const realBarWidth = x1 - x; if (this._spec.barGap) { const halfBarGap = .5 * this._spec.barGap; x = x + halfBarGap, x1 = x1 - halfBarGap; } const curBarWidth = x1 - x, barMinWidth = getActualNumValue(this._spec.barMinWidth || 2, realBarWidth); if (curBarWidth < barMinWidth) { const halfWidthDiff = (barMinWidth - curBarWidth) / 2; x -= halfWidthDiff, x1 += halfWidthDiff; } return [ x, x1 ]; }, this._getBarXStart = (datum, scale, useWholeRange) => this._shouldDoPreCalculate() ? (this._calculateStackRectPosition(!1), datum[RECT_X]) : this._spec.barMinHeight ? this._calculateRectPosition(datum, !1, useWholeRange) : valueInScaleRange(this._dataToPosX(datum), scale, useWholeRange), this._getBarXEnd = (datum, scale, useWholeRange) => this._shouldDoPreCalculate() ? (this._calculateStackRectPosition(!1), datum[RECT_X1]) : valueInScaleRange(this._dataToPosX1(datum), scale, useWholeRange), this._getLinearBarXRange = (datum, scale, useWholeRange) => { const x = valueInScaleRange(this._dataToPosX(datum), scale, useWholeRange), x1 = valueInScaleRange(this._dataToPosX1(datum), scale, useWholeRange); return this._getLinearBarRange(x, x1); }, this._getBarYStart = (datum, scale) => this._shouldDoPreCalculate() ? (this._calculateStackRectPosition(!0), datum[RECT_Y]) : this._spec.barMinHeight ? this._calculateRectPosition(datum, !0) : valueInScaleRange(this._dataToPosY(datum), scale), this._getBarYEnd = (datum, scale) => this._shouldDoPreCalculate() ? (this._calculateStackRectPosition(!0), datum[RECT_Y1]) : valueInScaleRange(this._dataToPosY1(datum), scale), this._getLinearBarYRange = (datum, scale, useWholeRange) => { const y = valueInScaleRange(this._dataToPosY(datum), scale, useWholeRange), y1 = valueInScaleRange(this._dataToPosY1(datum), scale, useWholeRange); return this._getLinearBarRange(y, y1); }, this._getBarBackgroundXStart = scale => { const range = scale.range(); return Math.min(range[0], range[range.length - 1]); }, this._getBarBackgroundXEnd = scale => { const range = scale.range(); return Math.max(range[0], range[range.length - 1]); }, this._getBarBackgroundYStart = scale => { const range = scale.range(); return Math.min(range[0], range[range.length - 1]); }, this._getBarBackgroundYEnd = scale => { const range = scale.range(); return Math.max(range[0], range[range.length - 1]); }, this._getBarBackgroundPositionXEncoder = () => { var _a; return null === (_a = this._barBackgroundPositionXEncoder) || void 0 === _a ? void 0 : _a.bind(this); }, this._setBarBackgroundPositionXEncoder = encoder => { this._barBackgroundPositionXEncoder = encoder.bind(this); }, this._getBarBackgroundPositionYEncoder = () => { var _a; return null === (_a = this._barBackgroundPositionYEncoder) || void 0 === _a ? void 0 : _a.bind(this); }, this._setBarBackgroundPositionYEncoder = encoder => { this._barBackgroundPositionYEncoder = encoder.bind(this); }; } initMark() { this._initBarBackgroundMark(), this._barMark = this._createMark(Object.assign(Object.assign({}, BarSeries.mark.bar), { name: this._barMarkName, type: this._barMarkType }), { groupKey: this._seriesField, isSeriesMark: !0 }, { morphElementKey: this.getDimensionField()[0], morph: shouldMarkDoMorph(this._spec, this._barMarkName) }); } _initBarBackgroundMark() { this._spec.barBackground && this._spec.barBackground.visible && (this._barBackgroundMark = this._createMark(BarSeries.mark.barBackground, { dataView: this._barBackgroundViewData.getDataView(), dataProductId: this._barBackgroundViewData.getProductId() })); } initMarkStyle() { this._barMark && this.setMarkStyle(this._barMark, { fill: this.getColorAttribute() }, "normal", AttributeLevel.Series); } initLabelMarkStyle(textMark) { textMark && this.setMarkStyle(textMark, { fill: this.getColorAttribute(), text: datum => datum[this.getStackValueField()], z: this._fieldZ ? this.dataToPositionZ.bind(this) : null }); } initTooltip() { super.initTooltip(); const {mark: mark, group: group} = this._tooltipHelper.activeTriggerSet; this._barMark && (mark.add(this._barMark), group.add(this._barMark)); } _statisticViewData() { var _a, _b; super._statisticViewData(); const spec = null !== (_a = this._spec.barBackground) && void 0 !== _a ? _a : {}; if (!spec.visible) return; const hasBandAxis = this._getRelatedComponentSpecInfo("axes").some((axisInfo => axisInfo.type === ComponentTypeEnum.cartesianBandAxis)); let barBackgroundData; if (registerDataSetInstanceTransform(this._option.dataSet, "addVChartProperty", addVChartProperty), hasBandAxis) { const dimensionItems = ([data], {scaleDepth: scaleDepth}) => { var _a, _b; let dataCollect = [ {} ]; const fields = this.getDimensionField(), depth = isNil(scaleDepth) ? fields.length : Math.min(fields.length, scaleDepth); for (let i = 0; i < depth; i++) { const field = fields[i], values = null === (_a = data.latestData[field]) || void 0 === _a ? void 0 : _a.values; if (!(null == values ? void 0 : values.length)) continue; const newDataCollect = [], dataKey = null !== (_b = this._spec.dataKey) && void 0 !== _b ? _b : DEFAULT_DATA_KEY; for (let j = 0; j < values.length; j++) for (let k = 0; k < dataCollect.length; k++) newDataCollect.push(Object.assign(Object.assign({}, dataCollect[k]), { [field]: values[j], [dataKey]: values[j] })); dataCollect = newDataCollect; } return dataCollect; }; registerDataSetInstanceTransform(this._option.dataSet, "dimensionItems", dimensionItems), barBackgroundData = new DataView(this._option.dataSet).parse([ this._viewDataStatistics ], { type: "dataview" }).transform({ type: "dimensionItems", options: { scaleDepth: isNil(spec.fieldLevel) ? void 0 : spec.fieldLevel + 1 } }, !1).transform({ type: "addVChartProperty", options: { beforeCall: initKeyMap.bind(this), call: addDataKey } }, !1), null === (_b = this._viewDataStatistics) || void 0 === _b || _b.target.addListener("change", barBackgroundData.reRunAllTransform); } else { const dimensionItems = ([data]) => { const dataCollect = [], [field0, field1] = this.getDimensionContinuousField(), map = {}; return viewData.latestData.forEach((datum => { const key = `${datum[field0]}-${datum[field1]}`; map[key] || (map[key] = { [field0]: datum[field0], [field1]: datum[field1] }, dataCollect.push(map[key])); })), dataCollect; }; registerDataSetInstanceTransform(this._option.dataSet, "dimensionItems", dimensionItems); const viewData = this.getViewData(); barBackgroundData = new DataView(this._option.dataSet).parse([ viewData ], { type: "dataview" }).transform({ type: "dimensionItems" }, !1).transform({ type: "addVChartProperty", options: { beforeCall: initKeyMap.bind(this), call: addDataKey } }, !1), null == viewData || viewData.target.addListener("change", barBackgroundData.reRunAllTransform); } this._barBackgroundViewData = new CompilableData(this._option, barBackgroundData); } init(option) { var _a, _b; super.init(option), "vertical" === this.direction ? "band" === (null === (_a = this._xAxisHelper) || void 0 === _a ? void 0 : _a.getScale(0).type) ? this.initBandRectMarkStyle() : this.initLinearRectMarkStyle() : "band" === (null === (_b = this._yAxisHelper) || void 0 === _b ? void 0 : _b.getScale(0).type) ? this.initBandRectMarkStyle() : this.initLinearRectMarkStyle(); } _shouldDoPreCalculate() { const region = this.getRegion(); return this.getStack() && region.getSeries().filter((s => s.type === this.type && s.getSpec().barMinHeight)).length; } _calculateStackRectPosition(isVertical) { const region = this.getRegion(); if (region._bar_series_position_calculated) return; let start, end, startMethod, endMethod, axisHelper; region._bar_series_position_calculated = !0, isVertical ? (start = RECT_Y1, end = RECT_Y, startMethod = "_dataToPosY1", endMethod = "_dataToPosY", axisHelper = "_yAxisHelper") : (start = RECT_X1, end = RECT_X, startMethod = "_dataToPosX1", endMethod = "_dataToPosX", axisHelper = "_xAxisHelper"); const stackValueGroup = getRegionStackGroup(region, !1, (s => s.type === this.type)); for (const stackValue in stackValueGroup) for (const key in stackValueGroup[stackValue].nodes) stackWithMinHeight(stackValueGroup[stackValue].nodes[key], region.getStackInverse(), { isVertical: isVertical, start: start, end: end, startMethod: startMethod, endMethod: endMethod, axisHelper: axisHelper }); } _calculateRectPosition(datum, isVertical, useWholeRange) { var _a, _b; let startMethod, endMethod, axisHelper; isVertical ? (startMethod = "_dataToPosY1", endMethod = "_dataToPosY", axisHelper = "_yAxisHelper") : (startMethod = "_dataToPosX1", endMethod = "_dataToPosX", axisHelper = "_xAxisHelper"); const seriesScale = null === (_b = (_a = this[axisHelper]).getScale) || void 0 === _b ? void 0 : _b.call(_a, 0), inverse = this[axisHelper].isInverse(), barMinHeight = this._spec.barMinHeight, y1 = valueInScaleRange(this[startMethod](datum), seriesScale, useWholeRange), y = valueInScaleRange(this[endMethod](datum), seriesScale, useWholeRange); let height = Math.abs(y1 - y); height < barMinHeight && (height = barMinHeight); let flag = 1; return y < y1 ? flag = -1 : y === y1 && (flag = isVertical ? inverse ? 1 : -1 : inverse ? -1 : 1), y1 + flag * height; } _dataToPosX(datum) { return this.dataToPositionX(datum); } _dataToPosX1(datum) { return this.dataToPositionX1(datum); } _dataToPosY(datum) { return this.dataToPositionY(datum); } _dataToPosY1(datum) { return this.dataToPositionY1(datum); } initBandRectMarkStyle() { var _a, _b, _c, _d; const xScale = null === (_b = null === (_a = this._xAxisHelper) || void 0 === _a ? void 0 : _a.getScale) || void 0 === _b ? void 0 : _b.call(_a, 0), yScale = null === (_d = null === (_c = this._yAxisHelper) || void 0 === _c ? void 0 : _c.getScale) || void 0 === _d ? void 0 : _d.call(_c, 0); "horizontal" === this.direction ? this.setMarkStyle(this._barMark, { x: datum => this._getBarXStart(datum, xScale), x1: datum => this._getBarXEnd(datum, xScale), y: datum => this._getPosition(this.direction, datum), height: () => this._getBarWidth(this._yAxisHelper), width: () => {}, y1: () => {} }, "normal", AttributeLevel.Series) : this.setMarkStyle(this._barMark, { y: datum => this._getBarYStart(datum, yScale), y1: datum => this._getBarYEnd(datum, yScale), x: datum => this._getPosition(this.direction, datum), width: () => this._getBarWidth(this._xAxisHelper), x1: () => {}, height: () => {} }, "normal", AttributeLevel.Series), this._initStackBarMarkStyle(), this._initBandBarBackgroundMarkStyle(); } _initStackBarMarkStyle() { var _a, _b, _c, _d; if (!this._spec.stackCornerRadius) return; const xScale = null === (_b = null === (_a = this._xAxisHelper) || void 0 === _a ? void 0 : _a.getScale) || void 0 === _b ? void 0 : _b.call(_a, 0), yScale = null === (_d = null === (_c = this._yAxisHelper) || void 0 === _c ? void 0 : _c.getScale) || void 0 === _d ? void 0 : _d.call(_c, 0); this._barMark.setMarkConfig({ clip: !0, clipPath: () => { const rectPaths = []; return this._forEachStackGroup((node => { let min = 1 / 0, max = -1 / 0, hasPercent = !1, minPercent = 1 / 0, maxPercent = -1 / 0; node.values.forEach((datum => { const start = datum[STACK_FIELD_START], end = datum[STACK_FIELD_END], startPercent = datum[STACK_FIELD_START_PERCENT], endPercent = datum[STACK_FIELD_END_PERCENT]; min = Math.min(min, start, end), max = Math.max(max, start, end), isValid(startPercent) && isValid(endPercent) && (hasPercent = !0, minPercent = Math.min(minPercent, startPercent, endPercent), maxPercent = Math.max(maxPercent, startPercent, endPercent)); })); const mockDatum = Object.assign(Object.assign(Object.assign({}, node.values[0]), { [STACK_FIELD_START]: min, [STACK_FIELD_END]: max }), hasPercent ? { [STACK_FIELD_START_PERCENT]: minPercent, [STACK_FIELD_END_PERCENT]: maxPercent } : void 0), rectAttr = "horizontal" === this.direction ? { x: this._getBarXStart(mockDatum, xScale), x1: this._getBarXEnd(mockDatum, xScale), y: this._getPosition(this.direction, mockDatum), height: this._getBarWidth(this._yAxisHelper) } : { y: this._getBarYStart(mockDatum, yScale), y1: this._getBarYEnd(mockDatum, yScale), x: this._getPosition(this.direction, mockDatum), width: this._getBarWidth(this._xAxisHelper) }; rectPaths.push(createRect(Object.assign(Object.assign({}, rectAttr), { cornerRadius: isFunction(this._spec.stackCornerRadius) ? this._spec.stackCornerRadius(rectAttr, mockDatum, this._markAttributeContext) : this._spec.stackCornerRadius, fill: !0 }))); })), rectPaths; } }); } initLinearRectMarkStyle() { var _a, _b, _c, _d; const xScale = null === (_b = null === (_a = this._xAxisHelper) || void 0 === _a ? void 0 : _a.getScale) || void 0 === _b ? void 0 : _b.call(_a, 0), yScale = null === (_d = null === (_c = this._yAxisHelper) || void 0 === _c ? void 0 : _c.getScale) || void 0 === _d ? void 0 : _d.call(_c, 0); if ("horizontal" === this.direction) { const yChannels = isValid(this._fieldY2) ? { y: datum => this._getLinearBarYRange(datum, yScale, !0)[0], y1: datum => this._getLinearBarYRange(datum, yScale, !0)[1] } : { y: datum => valueInScaleRange(this._dataToPosY(datum) - this._getBarWidth(this._yAxisHelper) / 2, yScale, !0), height: datum => this._getBarWidth(this._yAxisHelper) }; this.setMarkStyle(this._barMark, Object.assign({ x: datum => this._getBarXStart(datum, xScale, !0), x1: datum => this._getBarXEnd(datum, xScale, !0) }, yChannels), "normal", AttributeLevel.Series), this.setMarkStyle(this._barBackgroundMark, Object.assign({ x: () => this._getBarBackgroundXStart(xScale), x1: () => this._getBarBackgroundXEnd(xScale) }, yChannels), "normal", AttributeLevel.Series); } else { const xChannels = isValid(this._fieldX2) ? { x: datum => this._getLinearBarXRange(datum, xScale, !0)[0], x1: datum => this._getLinearBarXRange(datum, xScale, !0)[1] } : { x: datum => valueInScaleRange(this._dataToPosX(datum) - this._getBarWidth(this._xAxisHelper) / 2, xScale, !0), width: datum => this._getBarWidth(this._xAxisHelper) }; this.setMarkStyle(this._barMark, Object.assign(Object.assign({}, xChannels), { y: datum => this._getBarYStart(datum, yScale), y1: datum => this._getBarYEnd(datum, yScale) }), "normal", AttributeLevel.Series), this.setMarkStyle(this._barBackgroundMark, Object.assign(Object.assign({}, xChannels), { y: () => this._getBarBackgroundYStart(yScale), y1: () => this._getBarBackgroundYEnd(yScale) }), "normal", AttributeLevel.Series); } } _initBandBarBackgroundMarkStyle() { var _a, _b, _c, _d, _e; if (!this._barBackgroundMark) return; const xScale = null === (_b = null === (_a = this._xAxisHelper) || void 0 === _a ? void 0 : _a.getScale) || void 0 === _b ? void 0 : _b.call(_a, 0), yScale = null === (_d = null === (_c = this._yAxisHelper) || void 0 === _c ? void 0 : _c.getScale) || void 0 === _d ? void 0 : _d.call(_c, 0), spec = null !== (_e = this._spec.barBackground) && void 0 !== _e ? _e : {}, scaleDepth = isNil(spec.fieldLevel) ? void 0 : spec.fieldLevel + 1; "horizontal" === this.direction ? this.setMarkStyle(this._barBackgroundMark, { x: () => this._getBarBackgroundXStart(xScale), x1: () => this._getBarBackgroundXEnd(xScale), y: datum => this._getPosition(this.direction, datum, scaleDepth, "barBackground"), height: () => this._getBarWidth(this._yAxisHelper, scaleDepth), width: () => {}, y1: () => {} }, "normal", AttributeLevel.Series) : this.setMarkStyle(this._barBackgroundMark, { x: datum => this._getPosition(this.direction, datum, scaleDepth, "barBackground"), y: () => this._getBarBackgroundYStart(yScale), y1: () => this._getBarBackgroundYEnd(yScale), width: () => this._getBarWidth(this._xAxisHelper, scaleDepth), x1: () => {}, height: () => {} }, "normal", AttributeLevel.Series); } initAnimation() { var _a, _b; const barAnimationParams = { yField: this._fieldY[0], xField: this._fieldX[0], direction: this.direction, growFrom: () => { var _a; const scale = "horizontal" === this.direction ? null === (_a = this._xAxisHelper) || void 0 === _a ? void 0 : _a.getScale(0) : this._yAxisHelper.getScale(0); if (scale) { const domain = scale.domain(), domainMin = minInArr(domain), domainMax = maxInArr(domain); return domainMax < 0 ? scale.scale(domainMax) : domainMin > 0 ? scale.scale(domainMin) : scale.scale(0); } } }, appearPreset = null === (_a = this._spec.animationAppear) || void 0 === _a ? void 0 : _a.preset, animationParams = getGroupAnimationParams(this); this._barMark.setAnimationConfig(animationConfig(null === (_b = Factory.getAnimationInKey("bar")) || void 0 === _b ? void 0 : _b(barAnimationParams, appearPreset), userAnimationConfig(this._barMarkName, this._spec, this._markAttributeContext), animationParams)); } _getBarWidth(axisHelper, scaleDepth) { var _a, _b; const depthFromSpec = this._groups ? this._groups.fields.length : 1, depth = isNil(scaleDepth) ? depthFromSpec : Math.min(depthFromSpec, scaleDepth), bandWidth = null !== (_b = null === (_a = axisHelper.getBandwidth) || void 0 === _a ? void 0 : _a.call(axisHelper, depth - 1)) && void 0 !== _b ? _b : 6, hasBarWidth = isValid(this._spec.barWidth) && depth === depthFromSpec, hasBarMinWidth = isValid(this._spec.barMinWidth), hasBarMaxWidth = isValid(this._spec.barMaxWidth); let width = bandWidth; return hasBarWidth && (width = getActualNumValue(this._spec.barWidth, bandWidth)), hasBarMinWidth && (width = Math.max(width, getActualNumValue(this._spec.barMinWidth, bandWidth))), hasBarMaxWidth && (width = Math.min(width, getActualNumValue(this._spec.barMaxWidth, bandWidth))), width; } _getPosition(direction, datum, scaleDepth, mark) { var _a, _b, _c, _d, _e; let axisHelper, sizeAttribute, dataToPosition; "horizontal" === direction ? (axisHelper = this.getYAxisHelper(), sizeAttribute = "height", dataToPosition = "barBackground" === mark ? this.dataToBarBackgroundPositionY.bind(this) : this.dataToPositionY.bind(this)) : (axisHelper = this.getXAxisHelper(), sizeAttribute = "width", dataToPosition = "barBackground" === mark ? this.dataToBarBackgroundPositionX.bind(this) : this.dataToPositionX.bind(this)); const scale = axisHelper.getScale(0), depthFromSpec = this._groups ? this._groups.fields.length : 1, depth = isNil(scaleDepth) ? depthFromSpec : Math.min(depthFromSpec, scaleDepth), bandWidth = null !== (_b = null === (_a = axisHelper.getBandwidth) || void 0 === _a ? void 0 : _a.call(axisHelper, depth - 1)) && void 0 !== _b ? _b : 6, size = depth === depthFromSpec ? this._barMark.getAttribute(sizeAttribute, datum) : bandWidth; if (depth > 1 && isValid(this._spec.barGapInGroup)) { const groupFields = this._groups.fields, barInGroup = array(this._spec.barGapInGroup); let totalWidth = 0, offSet = 0; for (let index = groupFields.length - 1; index >= 1; index--) { const groupField = groupFields[index], groupValues = null !== (_d = null === (_c = axisHelper.getScale(index)) || void 0 === _c ? void 0 : _c.domain()) && void 0 !== _d ? _d : [], groupCount = groupValues.length, gap = getActualNumValue(null !== (_e = barInGroup[index - 1]) && void 0 !== _e ? _e : last(barInGroup), bandWidth), i = groupValues.indexOf(datum[groupField]); index === groupFields.length - 1 ? (totalWidth += groupCount * size + (groupCount - 1) * gap, offSet += i * (size + gap)) : (offSet += i * (totalWidth + gap), totalWidth += totalWidth + (groupCount - 1) * gap); } return scale.scale(datum[groupFields[0]]) + axisHelper.getBandwidth(0) / 2 - totalWidth / 2 + offSet; } const continuous = isContinuous(scale.type || "band"); return dataToPosition(datum, depth) + .5 * (bandWidth - size) + (continuous ? -bandWidth / 2 : 0); } dataToBarBackgroundPositionX(datum, scaleDepth) { return this._dataToPosition(datum, this._xAxisHelper, this.fieldX, scaleDepth, this._getBarBackgroundPositionXEncoder, this._setBarBackgroundPositionXEncoder); } dataToBarBackgroundPositionY(datum, scaleDepth) { return this._dataToPosition(datum, this._yAxisHelper, this.fieldY, scaleDepth, this._getBarBackgroundPositionYEncoder, this._setBarBackgroundPositionYEncoder); } onLayoutEnd() { super.onLayoutEnd(); this.getRegion()._bar_series_position_calculated = !1, this._spec.sampling && this.compile(); } onDataUpdate() { super.onDataUpdate(); this.getRegion()._bar_series_position_calculated = !1; } compile() { if (super.compile(), this._spec.sampling) { const {width: width, height: height} = this._region.getLayoutRect(), fieldsY = this._fieldY, fieldsX = this._fieldX; this._data.setTransform([ { type: "sampling", size: "horizontal" === this._direction ? height : width, factor: this._spec.samplingFactor, yfield: "horizontal" === this._direction ? fieldsX[0] : fieldsY[0], groupBy: this._seriesField, mode: this._spec.sampling } ]); } } getDefaultShapeType() { return "square"; } getActiveMarks() { return [ this._barMark ]; } compileData() { var _a; super.compileData(), null === (_a = this._barBackgroundViewData) || void 0 === _a || _a.compile(); } fillData() { var _a, _b; super.fillData(), null === (_b = null === (_a = this._barBackgroundViewData) || void 0 === _a ? void 0 : _a.getDataView()) || void 0 === _b || _b.reRunAllTransform(); } viewDataUpdate(d) { var _a, _b, _c; super.viewDataUpdate(d), null === (_b = null === (_a = this._barBackgroundViewData) || void 0 === _a ? void 0 : _a.getDataView()) || void 0 === _b || _b.reRunAllTransform(), null === (_c = this._barBackgroundViewData) || void 0 === _c || _c.updateData(); } release() { var _a; super.release(), null === (_a = this._barBackgroundViewData) || void 0 === _a || _a.release(), this._barBackgroundViewData = null; } } BarSeries.type = SeriesTypeEnum.bar, BarSeries.builtInTheme = { bar: bar }, BarSeries.mark = barSeriesMark, BarSeries.transformerConstructor = BarSeriesSpecTransformer; export const registerBarSeries = () => { registerDataSamplingTransform(), registerRectMark(), registerBarAnimation(), registerCartesianBandAxis(), registerCartesianLinearAxis(), Factory.registerSeries(BarSeries.type, BarSeries); }; //# sourceMappingURL=bar.js.map