UNPKG

@visactor/vgrammar-core

Version:

VGrammar is a visual grammar library

46 lines (41 loc) 2.56 kB
import { DataFilterRank } from "../graph/enums"; import { isArray, isString } from "@visactor/vutils"; import { Filter } from "./filter"; export class RollUp extends 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 || isArray(filterValue) && 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 = 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, 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; } } RollUp.type = "roll-up", RollUp.defaultOptions = { trigger: "click", triggerOff: "empty" }; //# sourceMappingURL=roll-up.js.map