UNPKG

@visactor/vchart

Version:

charts lib based @visactor/VGrammar

48 lines (45 loc) 1.59 kB
import { array, isNil, merge } from "@visactor/vutils"; export class MarkSet { constructor() { this._children = [], this._markNameMap = {}, this._infoMap = new Map; } getMarkNameMap() { return this._markNameMap; } addMark(mark, markInfo) { isNil(mark) || (this._children.push(mark), this._markNameMap[mark.name] = mark, this._infoMap.set(mark, merge({}, MarkSet.defaultMarkInfo, markInfo))); } removeMark(markName) { const index = this._children.findIndex((m => m.name === markName)); index >= 0 && (this._infoMap.delete(this._children[index]), delete this._markNameMap[markName], this._children.splice(index, 1)); } clear() { this._children = [], this._markNameMap = {}, this._infoMap.clear(); } forEach(callbackfn) { this._children.forEach(callbackfn); } includes(mark, fromIndex) { return this._children.includes(mark, fromIndex); } get(key) { return isNaN(Number(key)) ? this._markNameMap[key] : this._children[key]; } getMarks() { return this._children.slice(); } getMarksInType(type) { const types = array(type); return this._children.filter((m => types.includes(m.type))); } getMarkInId(markId) { return this._children.find((m => m.id === markId)); } getMarkWithInfo(info) { return this._children.find((mark => Object.keys(info).every((key => info[key] === this._infoMap.get(mark)[key])))); } } MarkSet.defaultMarkInfo = {}; //# sourceMappingURL=index.js.map