UNPKG

@visactor/vgrammar-core

Version:

VGrammar is a visual grammar library

47 lines (43 loc) 2.71 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: !0 }), exports.RollUp = void 0; const enums_1 = require("../graph/enums"), vutils_1 = require("@visactor/vutils"), filter_1 = require("./filter"); class RollUp extends filter_1.Filter { constructor(view, options) { super(view, options), this.type = RollUp.type, this._isToggle = !1, this.handleStart = event => { var _a, _b; const element = event.element; if (element && this._marks && this._marks.includes(element.mark)) { const filterValue = null === (_b = null === (_a = event.element) || void 0 === _a ? void 0 : _a.getDatum) || void 0 === _b ? void 0 : _b.call(_a); filterValue === this._filterData || (0, vutils_1.isArray)(filterValue) && (0, vutils_1.isArray)(this._filterValue) && filterValue.length === this._filterValue.length && filterValue.every((datum => !this._filterValue.includes(datum))) ? this._isToggle && (this._filterValue = null, this.handleFilter(event)) : this.handleFilter(event); } }, this.handleReset = event => { this._filterValue && (this._filterValue = null, this.handleFilter(event)); }, this.options = Object.assign({}, RollUp.defaultOptions, options), this._marks = view.getMarksBySelector(this.options.source), this._data = (0, vutils_1.isString)(this.options.target.data) ? view.getDataById(this.options.target.data) : this.options.target.data; } getEvents() { if (!this._marks || 0 === this._marks.length) return []; if (!this._data) return []; const transform = this.options.target.transform; this._filterData(this._data, null, enums_1.DataFilterRank.rollUp, (event => { var _a, _b; return null === (_b = null === (_a = null == event ? void 0 : event.element) || void 0 === _a ? void 0 : _a.getDatum) || void 0 === _b ? void 0 : _b.call(_a); }), void 0, ((data, filterValue) => transform(data, filterValue))); const events = [ { type: this.options.trigger, handler: this.handleStart } ], eventName = "empty" === this.options.triggerOff ? this.options.trigger : this.options.triggerOff.includes("view:") ? this.options.triggerOff.replace("view:", "") : this.options.triggerOff; return eventName !== this.options.trigger ? (events.push({ type: eventName, handler: this.handleReset }), this._isToggle = !1) : this._isToggle = !0, events; } } exports.RollUp = RollUp, RollUp.type = "roll-up", RollUp.defaultOptions = { trigger: "click", triggerOff: "empty" }; //# sourceMappingURL=roll-up.js.map