UNPKG

@visactor/vgrammar-core

Version:

VGrammar is a visual grammar library

82 lines (77 loc) 5.26 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: !0 }), exports.ViewNavigationBase = void 0; const vutils_1 = require("@visactor/vutils"), base_1 = require("./base"), enums_1 = require("../graph/enums"), scale_1 = require("../util/scale"); class ViewNavigationBase extends base_1.BaseInteraction { constructor(view, options) { super(view, options), this.options = options; } _parseLinkedComponent(option) { if (!option) return null; const comp = (0, vutils_1.isString)(option) ? this.view.getMarkById(option) : option; return !comp || comp.markType !== enums_1.GrammarMarkType.component || comp.componentType !== enums_1.ComponentEnum.datazoom && comp.componentType !== enums_1.ComponentEnum.scrollbar ? null : comp; } _initStateByDim(dim, linkedComponent, scale, dataTarget, rangeOptions) { const comp = this._parseLinkedComponent(linkedComponent); if (comp) return void (this._state[dim] = { linkedComponent: comp }); const scaleGrammar = (0, vutils_1.isNil)(scale) ? null : (0, vutils_1.isString)(scale) ? this.view.getScaleById(scale) : scale, dataGrammar = (0, vutils_1.isNil)(null == dataTarget ? void 0 : dataTarget.data) ? null : (0, vutils_1.isString)(dataTarget.data) ? this.view.getDataById(dataTarget.data) : dataTarget.data; if (!scaleGrammar || !dataGrammar) return this._state[dim] = { data: dataGrammar, scale: scaleGrammar }, void ((0, vutils_1.isArray)(rangeOptions) ? (this._state[dim].rangeFactor = rangeOptions, this._state[dim].initRangeFactor = rangeOptions) : (0, vutils_1.isFunction)(rangeOptions) ? this._state[dim].getCurrentRange = rangeOptions : scaleGrammar && scaleGrammar.getRangeFactor() && (this._state[dim].rangeFactor = scaleGrammar.getRangeFactor(), this._state[dim].initRangeFactor = scaleGrammar.getRangeFactor())); dataGrammar.attach(scaleGrammar); const filterByScale = (0, vutils_1.isString)(dataTarget.filter) ? (datum, filterValue) => { const scale = scaleGrammar.getScale(), ratio = (0, scale_1.getScaleRangeRatio)(scale, datum[dataTarget.filter]); return ratio >= filterValue[0] && ratio <= filterValue[1]; } : dataTarget.filter, dataFilter = { source: `${scaleGrammar.uid}`, rank: enums_1.DataFilterRank.normal, filter: data => { var _a, _b, _c, _d; const filterValue = "x" === dim ? null === (_b = null === (_a = this._state) || void 0 === _a ? void 0 : _a.x) || void 0 === _b ? void 0 : _b.filterValue : null === (_d = null === (_c = this._state) || void 0 === _c ? void 0 : _c.y) || void 0 === _d ? void 0 : _d.filterValue; if (!filterValue) return data; const filteredData = data.filter((datum => filterByScale(datum, filterValue))); return dataTarget.transform ? dataTarget.transform(filteredData, filterValue) : filteredData; } }; "x" === dim ? this._dataFilterX = dataFilter : this._dataFilterY = dataFilter, dataGrammar.addDataFilter(dataFilter), this._state[dim] = { data: dataGrammar, scale: scaleGrammar }; } _initGrammars() { const {enableX: enableX, enableY: enableY, scaleX: scaleX, scaleY: scaleY, dataTargetX: dataTargetX, dataTargetY: dataTargetY, linkedComponentX: linkedComponentX, linkedComponentY: linkedComponentY, rangeX: rangeX, rangeY: rangeY} = this.options; this._state = {}, !1 !== enableX && this._initStateByDim("x", linkedComponentX, scaleX, dataTargetX, rangeX), !1 !== enableY && this._initStateByDim("y", linkedComponentY, scaleY, dataTargetY, rangeY), this._inited = !0; } _updateLinkedComponent(comp, newRange) { comp.componentType === enums_1.ComponentEnum.datazoom ? comp.setStartEndValue(newRange[0], newRange[1]) : comp.setScrollStart(newRange[0]); } updateView(type, newRange, eventType, e) { var _a, _b, _c, _d; newRange && newRange.x && (null === (_b = null === (_a = this._state) || void 0 === _a ? void 0 : _a.x) || void 0 === _b ? void 0 : _b.linkedComponent) && this._updateLinkedComponent(this._state.x.linkedComponent, newRange.x), newRange && newRange.y && (null === (_d = null === (_c = this._state) || void 0 === _c ? void 0 : _c.y) || void 0 === _d ? void 0 : _d.linkedComponent) && this._updateLinkedComponent(this._state.y.linkedComponent, newRange.y), newRange && newRange.needUpdate && this.view.run(), this.dispatchEvent(type, { viewRange: newRange, event: e, eventType: eventType }); } unbind() { super.unbind(), this._state && Object.keys(this._state).forEach((dim => { const {data: data, scale: scale} = this._state[dim]; data && scale ? (data.detach(scale), data.removeDataFilter("x" === dim ? this._dataFilterX : this._dataFilterY)) : scale && (scale.setRangeFactor(null), scale.commit()); })), this._state = null; } } exports.ViewNavigationBase = ViewNavigationBase; //# sourceMappingURL=view-navigation-base.js.map