UNPKG

@visactor/vgrammar-core

Version:

VGrammar is a visual grammar library

95 lines (90 loc) 4.61 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: !0 }), exports.GroupMark = void 0; const attributes_1 = require("../graph/attributes"), constants_1 = require("../graph/constants"), enums_1 = require("../graph/enums"), graphic_1 = require("../graph/util/graphic"), mark_1 = require("./mark"), vutils_1 = require("@visactor/vutils"), encode_1 = require("../graph/mark/encode"); class GroupMark extends mark_1.Mark { constructor(view, group) { super(view, enums_1.GrammarMarkType.group, group), this.children = []; } parseRenderContext() { return { large: !1 }; } appendChild(mark) { return this.children.push(mark), this; } removeChild(mark) { return this.children = this.children.filter((child => child !== mark)), this; } includesChild(mark, descendant = !0) { return !!this.children.includes(mark) || !!descendant && this.children.some((child => child.markType === enums_1.GrammarMarkType.group && child.includesChild(mark, !0))); } updateLayoutChildren() { return this.children.length ? (this.layoutChildren || (this.layoutChildren = []), this.layoutChildren = this.children.filter((child => child.needLayout())), this) : this; } getAttributeTransforms() { return attributes_1.transformsByType.rect; } evaluateJoin(data) { if (!this.elements.length) { const el = this.createElement(); el.updateData(constants_1.DefaultKey, constants_1.DefaultMarkData, (() => "")), this.elements = [ el ], this.elementMap.set(constants_1.DefaultKey, el); } } getChannelsFromConfig(element) { const spec = this.spec, initAttrs = {}; if ((0, vutils_1.isNil)(spec.clip) || (initAttrs.clip = spec.clip), (0, vutils_1.isNil)(spec.zIndex) || (initAttrs.zIndex = spec.zIndex), !(0, vutils_1.isNil)(spec.clipPath)) { const paths = (0, vutils_1.isFunction)(spec.clipPath) ? spec.clipPath([ element ]) : spec.clipPath; paths && paths.length ? initAttrs.path = paths : (initAttrs.path = null, initAttrs.clip = !1); } return (0, vutils_1.isNil)(spec.interactive) || (initAttrs.pickable = spec.interactive), initAttrs; } evaluateGroupEncode(elements, groupEncode, parameters) { var _a; const el = this.elements[0], nextAttrs = {}, items = [ Object.assign({}, null === (_a = el.items) || void 0 === _a ? void 0 : _a[0], { nextAttrs: nextAttrs }) ]; return (0, encode_1.invokeEncoderToItems)(el, items, groupEncode, parameters), this._groupEncodeResult = nextAttrs, nextAttrs; } evaluateEncode(elements, encoders, parameters, noGroupEncode) { const initAttrs = this.getChannelsFromConfig(); if (encoders) { this.emit(enums_1.HOOK_EVENT.BEFORE_ELEMENT_ENCODE, { encoders: encoders, parameters: parameters }, this); const groupEncodeAttrs = noGroupEncode ? null : this.evaluateGroupEncode(elements, encoders[enums_1.BuiltInEncodeNames.group], parameters); elements.forEach((element => { element.items.forEach((item => { item.nextAttrs = Object.assign(item.nextAttrs, initAttrs, groupEncodeAttrs); })), element.encodeItems(element.items, encoders, this._isReentered, parameters); })), this._isReentered = !1, this.evaluateTransform(this._getTransformsAfterEncodeItems(), elements, parameters), elements.forEach((element => { element.encodeGraphic(); })), this.emit(enums_1.HOOK_EVENT.AFTER_ELEMENT_ENCODE, { encoders: encoders, parameters: parameters }, this); } else elements.forEach((element => { element.initGraphicItem(initAttrs); })); } addGraphicItem(attrs, groupKey, newGraphicItem) { const graphicItem = null != newGraphicItem ? newGraphicItem : (0, graphic_1.createGraphicItem)(this, this.markType, attrs); if (graphicItem) return this.emit(enums_1.HOOK_EVENT.BEFORE_ADD_VRENDER_MARK, { graphicItem: graphicItem }), graphicItem.name = `${this.id() || this.markType}`, this.graphicParent.insertIntoKeepIdx(graphicItem, this.graphicIndex), this.emit(enums_1.HOOK_EVENT.AFTER_ADD_VRENDER_MARK, { graphicItem: graphicItem }), graphicItem; } } exports.GroupMark = GroupMark; //# sourceMappingURL=group.js.map