UNPKG

@visactor/vchart

Version:

charts lib based @visactor/VGrammar

119 lines (114 loc) 7.48 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: !0 }), exports.DataFilterEvent = void 0; const vutils_1 = require("@visactor/vutils"), zoom_1 = require("../../interaction/zoom"), util_1 = require("../axis/cartesian/util"); class DataFilterEvent { enableInteraction() { this._activeRoam = !0; } disableInteraction() { this._activeRoam = !1; } zoomIn(location) { this.handleChartZoom({ zoomDelta: 1.2, zoomX: null == location ? void 0 : location.x, zoomY: null == location ? void 0 : location.y }); } zoomOut(location) { this.handleChartZoom({ zoomDelta: .8, zoomX: null == location ? void 0 : location.x, zoomY: null == location ? void 0 : location.y }); } constructor(type, spec, handleChange, getLayoutRect, getState, getRegions, getOption, getEvent) { this._activeRoam = !0, this._zoomAttr = { enable: !0, rate: 1, focus: !0 }, this._dragAttr = { enable: !0, rate: 1, reverse: !0 }, this._scrollAttr = { enable: !0, rate: 1, reverse: !0 }, this.initZoomEvent = () => { var _a, _b, _c, _d, _e, _f, _g; const option = { delayType: null !== (_b = null === (_a = this._spec) || void 0 === _a ? void 0 : _a.delayType) && void 0 !== _b ? _b : "throttle", delayTime: (0, vutils_1.isValid)(null === (_c = this._spec) || void 0 === _c ? void 0 : _c.delayType) ? null !== (_e = null === (_d = this._spec) || void 0 === _d ? void 0 : _d.delayTime) && void 0 !== _e ? _e : 30 : 0, realTime: null === (_g = null === (_f = this._spec) || void 0 === _f ? void 0 : _f.realTime) || void 0 === _g || _g, allowComponentZoom: !0 }; this._zoomAttr.enable && this.initZoomEventOfRegions(this.getRegions(), null, this.handleChartZoom, option), this._scrollAttr.enable && this.initScrollEventOfRegions(this.getRegions(), null, this.handleChartScroll, option), this._dragAttr.enable && this.initDragEventOfRegions(this.getRegions(), null, this.handleChartDrag, option); }, this.handleChartZoom = (params, e) => { var _a, _b; if (!this._activeRoam || this._zoomAttr.filter && !this._zoomAttr.filter(params, e)) return; const {zoomDelta: zoomDelta, zoomX: zoomX, zoomY: zoomY} = params, {x: x, y: y} = this.getRegions()[0].getLayoutStartPoint(), {width: width, height: height} = this.getRegions()[0].getLayoutRect(), delta = Math.abs(this.getState().start - this.getState().end), zoomRate = null !== (_b = null === (_a = this._spec.roamZoom) || void 0 === _a ? void 0 : _a.rate) && void 0 !== _b ? _b : 1; if (delta >= 1 && zoomDelta < 1) return; if (delta <= .01 && zoomDelta > 1) return; const focusLoc = this._isHorizontal ? zoomX : zoomY, totalValue = delta * (zoomDelta - 1) * zoomRate; let startValue = totalValue / 2, endValue = totalValue / 2; if (focusLoc) { const startLoc = this._isHorizontal ? x : y, endLoc = this._isHorizontal ? width : height; startValue = Math.abs(startLoc - focusLoc) / Math.abs(endLoc - startLoc) * totalValue, endValue = Math.abs(endLoc - focusLoc) / Math.abs(endLoc - startLoc) * totalValue; } const start = (0, vutils_1.clamp)(this.getState().start + startValue, 0, 1), end = (0, vutils_1.clamp)(this.getState().end - endValue, 0, 1); this._handleChange(Math.min(start, end), Math.max(start, end), !0); }, this.handleChartScroll = (params, e) => { var _a; if (!this._activeRoam || this._scrollAttr.filter && !this._scrollAttr.filter(params, e)) return !1; const {scrollX: scrollX, scrollY: scrollY} = params; let value = this._isHorizontal ? scrollX : scrollY; const active = this._isHorizontal ? (0, vutils_1.abs)(scrollX / scrollY) >= .5 : (0, vutils_1.abs)(scrollY / scrollX) >= .5; if (this._scrollAttr.reverse || (value = -value), active) { const scrollStep = this._spec.scrollStep; if ((0, vutils_1.isValidNumber)(scrollStep)) { value = (value > 0 ? 1 : -1) * (scrollStep * (this.getState().end - this.getState().start) / 1); } this.handleChartMove(value, null !== (_a = this._scrollAttr.rate) && void 0 !== _a ? _a : 1); } const hasChange = 0 !== this.getState().start && 1 !== this.getState().end; return active && hasChange; }, this.handleChartDrag = (delta, e) => { var _a; if (!this._activeRoam || this._dragAttr.filter && !this._dragAttr.filter(delta, e)) return; const [dx, dy] = delta; let value = this._isHorizontal ? dx : dy; this._dragAttr.reverse && (value = -value), this.handleChartMove(value, null !== (_a = this._dragAttr.rate) && void 0 !== _a ? _a : 1); }, this.handleChartMove = (value, rate) => { const totalValue = this._isHorizontal ? this.getLayoutRect().width : this.getLayoutRect().height; if (Math.abs(value) >= 1e-6) if (value > 0 && this.getState().end < 1) { const moveDelta = Math.min(1 - this.getState().end, value / totalValue) * rate; this._handleChange(this.getState().start + moveDelta, this.getState().end + moveDelta, !0); } else if (value < 0 && this.getState().start > 0) { const moveDelta = Math.max(-this.getState().start, value / totalValue) * rate; this._handleChange(this.getState().start + moveDelta, this.getState().end + moveDelta, !0); } return !1; }, this._type = type, this._spec = spec, this._handleChange = handleChange, this.getLayoutRect = getLayoutRect, this.getState = getState, this.getRegions = getRegions, this._regions = getRegions(), this.getOption = getOption, this._option = getOption(), this.getEvent = getEvent, this._isHorizontal = "horizontal" === (0, util_1.getDirectionByOrient)((0, util_1.getOrient)(spec)); } setEventAttrFromSpec() { !0 === this._spec.roamZoom || this._spec.roamZoom ? this._zoomAttr = (0, vutils_1.merge)({}, this._zoomAttr, this._spec.roamZoom) : this._zoomAttr.enable = !1, !0 === this._spec.roamDrag || this._spec.roamDrag ? this._dragAttr = (0, vutils_1.merge)({}, this._dragAttr, this._spec.roamDrag) : this._dragAttr.enable = !1, !0 === this._spec.roamScroll || this._spec.roamScroll ? this._scrollAttr = (0, vutils_1.merge)({}, this._scrollAttr, this._spec.roamScroll) : this._scrollAttr.enable = !1, (0, vutils_1.isBoolean)(this._spec.roam) && (this._zoomAttr.enable = "scrollBar" !== this._type && this._spec.roam, this._dragAttr.enable = this._spec.roam, this._scrollAttr.enable = this._spec.roam), (this._zoomAttr.enable || this._dragAttr.enable || this._scrollAttr.enable) && this.initZoomable(this.getEvent(), this._option.mode); } } exports.DataFilterEvent = DataFilterEvent, (0, vutils_1.mixin)(DataFilterEvent, zoom_1.Zoomable); //# sourceMappingURL=data-filter-event.js.map