@visactor/vgrammar-core 0.13.6 → 0.13.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/graph/element.js +3 -3
- package/cjs/graph/element.js.map +1 -1
- package/cjs/graph/glyph-element.js +3 -3
- package/cjs/graph/glyph-element.js.map +1 -1
- package/cjs/index.d.ts +1 -1
- package/cjs/index.js +1 -1
- package/cjs/index.js.map +1 -1
- package/cjs/view/group.js +6 -3
- package/cjs/view/group.js.map +1 -1
- package/cjs/view/mark.js +15 -9
- package/cjs/view/mark.js.map +1 -1
- package/es/graph/element.js +3 -3
- package/es/graph/element.js.map +1 -1
- package/es/graph/glyph-element.js +3 -3
- package/es/graph/glyph-element.js.map +1 -1
- package/es/index.d.ts +1 -1
- package/es/index.js +1 -1
- package/es/index.js.map +1 -1
- package/es/view/group.js +6 -3
- package/es/view/group.js.map +1 -1
- package/es/view/mark.js +14 -6
- package/es/view/mark.js.map +1 -1
- package/package.json +7 -7
package/cjs/view/mark.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/view/mark.ts"],"names":[],"mappings":"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","file":"mark.js","sourcesContent":["import type { IGroup } from '@visactor/vrender-core';\nimport type { IBounds } from '@visactor/vutils';\nimport { isArray, isNil, isString } from '@visactor/vutils';\nimport { BridgeElementKey, CollectionMarkType, DefaultKey, DefaultMarkData, Mark3DType } from '../graph/constants';\nimport {\n DiffState,\n GrammarMarkType,\n LayoutState,\n HOOK_EVENT,\n GrammarTypeEnum,\n BuiltInEncodeNames\n} from '../graph/enums';\nimport { Differ, groupData } from '../graph/mark/differ';\nimport { Animate } from '../graph/animation/animate';\nimport { createGraphicItem, removeGraphicItem } from '../graph/util/graphic';\nimport { GrammarBase } from './grammar-base';\nimport type {\n GrammarType,\n ICoordinate,\n IData,\n IElement,\n IGrammarBase,\n IGroupMark,\n IMark,\n IMarkConfig,\n IView,\n MarkAnimationSpec,\n MarkBaseLayoutSpec,\n MarkFunctionType,\n MarkKeySpec,\n MarkLayoutCallback,\n MarkLayoutSpec,\n MarkSortSpec,\n MarkSpec,\n MarkStateSpec,\n MarkType,\n TransformSpec,\n ProgressiveContext,\n IProgressiveTransformResult,\n Nil,\n IAnimate,\n MarkStateSortSpec,\n BaseSingleEncodeSpec\n} from '../types';\nimport { isFieldEncode, isScaleEncode, parseEncodeType } from '../parse/mark';\nimport { getGrammarOutput, parseField, isFunctionType } from '../parse/util';\nimport { parseTransformSpec } from '../parse/transform';\nimport { createElement } from '../graph/util/element';\nimport { invokeEncoder, invokeEncoderToItems } from '../graph/mark/encode';\nimport { transformsByType } from '../graph/attributes';\nimport getExtendedEvents from '../graph/util/events-extend';\nimport type { IBaseScale } from '@visactor/vscale';\nimport { EVENT_SOURCE_VIEW } from './constants';\n\nexport class Mark extends GrammarBase implements IMark {\n readonly grammarType: GrammarType = 'mark';\n\n protected declare spec: MarkSpec;\n\n /**\n * only need to clear elements after join and render\n * but `handleRenderEnd` will be call after every render\n */\n protected needClear?: boolean;\n\n coord: ICoordinate;\n\n disableCoordinateTransform: boolean;\n\n // mark properties\n markType: MarkType;\n\n group: IGroupMark | undefined;\n /** 非group mark,对应的容器节点 */\n graphicItem?: IGroup;\n graphicIndex: number;\n /** mark下的element,对应的父节点 */\n graphicParent?: IGroup;\n\n elements: IElement[] = [];\n elementMap: Map<string, IElement> = new Map();\n\n isUpdated: boolean = true;\n\n private _groupKeys: string[];\n\n protected _groupEncodeResult: Record<string, any>;\n\n /** whether mark enter encode is updated */\n protected _isReentered: boolean = false;\n\n private _context: any;\n\n private renderContext?: {\n large: boolean;\n parameters?: any;\n progressive?: ProgressiveContext;\n beforeTransformProgressive?: IProgressiveTransformResult;\n };\n animate: IAnimate = new Animate(this, {});\n\n protected differ = new Differ([]);\n\n private _delegateEvent: (event: any, type: string) => void;\n\n private _finalParameters: any;\n\n constructor(view: IView, markType: MarkType, group?: IGroupMark) {\n super(view);\n this.markType = markType;\n this.spec.type = markType;\n this.spec.encode = { update: {} };\n this.spec.group = group;\n if (group) {\n this.group = group;\n this.attach(group);\n group.appendChild(this);\n }\n }\n\n parse(spec: MarkSpec) {\n super.parse(spec);\n\n // TODO: add group api\n if (this.spec.group) {\n const groupMark = isString(this.spec.group) ? this.view.getMarkById(this.spec.group) : this.spec.group;\n this.detach(groupMark);\n }\n const groupMark = isString(spec.group) ? this.view.getMarkById(spec.group) : spec.group;\n this.attach(groupMark);\n\n this.join(spec.from?.data, spec.key, spec.sort, spec.groupBy, spec.groupSort);\n this.coordinate(spec.coordinate);\n this.state(spec.state, this.spec.stateSort);\n\n // remove old encode\n Object.keys(this.spec.encode ?? {}).forEach(state => {\n this.encodeState(state, {}, true);\n });\n\n // add new encode\n Object.keys(spec.encode ?? {}).forEach(state => {\n this.encodeState(state, spec.encode[state]);\n });\n this.animation(spec.animation);\n this.animationState(spec.animationState);\n this.morph(spec.morph, spec.morphKey, spec.morphElementKey);\n this.layout(spec.layout);\n this.configure(spec);\n this.transform(spec.transform);\n\n this.parseAddition(spec);\n\n this.spec = spec;\n this.markType = spec.type as MarkType;\n\n this.commit();\n return this;\n }\n\n parameters() {\n // apply last parameters after prepareRelease\n return this._finalParameters ?? super.parameters();\n }\n\n protected parseAddition(spec: MarkSpec) {\n return this;\n }\n\n reuse(grammar: IGrammarBase) {\n if (grammar.grammarType !== this.grammarType) {\n return this;\n }\n const mark = grammar as Mark;\n this.markType = mark.markType;\n this.coord = mark.coord;\n\n this.elementMap = mark.elementMap;\n this.elements = mark.elements;\n this.elementMap.forEach(element => (element.mark = this));\n\n this.differ = mark.differ;\n this.animate = mark.animate;\n this.animate.mark = this;\n\n this._context = mark._context;\n // set group in later evaluate progress\n this.graphicItem = mark.graphicItem;\n this.graphicIndex = mark.graphicIndex;\n this.graphicParent = mark.graphicParent;\n\n this.needClear = mark.needClear;\n this.isUpdated = mark.isUpdated;\n\n return this;\n }\n\n needLayout() {\n // 后续可以加上Visible 判断等\n return !isNil(this.spec.layout);\n }\n\n handleLayoutEnd() {\n // if ((this.spec?.layout as MarkBaseLayoutSpec)?.skipBeforeLayouted) {\n // this.run();\n // }\n }\n\n handleRenderEnd() {\n /**\n * only need to clear elements after join and render\n * but `handleRenderEnd` will be call after every render\n */\n if (!this.needClear) {\n return;\n }\n // clear exit elements\n this.cleanExitElements();\n // clear element channels\n this.elementMap.forEach(element => {\n if (element.diffState === DiffState.exit) {\n element.clearGraphicAttributes();\n } else {\n element.clearChangedGraphicAttributes();\n }\n });\n this.differ.updateToCurrent();\n this.needClear = false;\n }\n\n evaluateMainTasks(data: any[], parameters: any) {\n if (this.needSkipBeforeLayout() && this.view.getLayoutState() === LayoutState.before) {\n return this;\n }\n\n const stage = this.view.renderer?.stage();\n\n this.init(stage, parameters);\n const transformData = this.evaluateTransform(this._getTransformsBeforeJoin(), data ?? DefaultMarkData, parameters);\n let inputData = transformData?.progressive ? data : (transformData as any[]);\n\n this.evaluateGroup(inputData);\n\n this.renderContext = this.parseRenderContext(inputData, parameters);\n if (!this.renderContext.progressive) {\n if (transformData?.progressive) {\n this.renderContext.parameters = parameters;\n this.renderContext.beforeTransformProgressive = transformData.progressive;\n inputData = transformData.progressive.output();\n }\n this.emit(HOOK_EVENT.BEFORE_MARK_JOIN);\n // FIXME: better default upstream\n this.evaluateJoin(inputData);\n this.emit(HOOK_EVENT.AFTER_MARK_JOIN);\n\n this.emit(HOOK_EVENT.BEFORE_MARK_STATE);\n this.evaluateState(this.elements, this.spec.state, parameters);\n this.emit(HOOK_EVENT.AFTER_MARK_STATE);\n\n this.emit(HOOK_EVENT.BEFORE_MARK_ENCODE);\n this.evaluateEncode(this.elements, this._getEncoders(), parameters);\n this.emit(HOOK_EVENT.AFTER_MARK_ENCODE);\n } else {\n this.differ.reset();\n this.elementMap.clear();\n this.evaluateProgressive();\n }\n\n this.emit(HOOK_EVENT.BEFORE_MARK_UPDATE);\n this.update(this.spec);\n this.emit(HOOK_EVENT.AFTER_MARK_UPDATE);\n\n return this;\n }\n\n protected evaluateGroup(data: any[]) {\n if (this.markType === GrammarMarkType.group) {\n return;\n }\n const currentData = data ?? DefaultMarkData;\n const res = groupData(currentData, this.spec.groupBy, this.spec.groupSort);\n const groupKeys = res.keys as string[];\n\n this._groupKeys = groupKeys;\n this._groupEncodeResult = null;\n\n this.differ.setCurrentData(res);\n }\n\n protected _getTransformsAfterEncodeItems() {\n return this.transforms && this.transforms.filter(entry => entry.markPhase === 'afterEncodeItems');\n }\n\n private _getTransformsAfterEncode() {\n return (\n this.transforms && this.transforms.filter(entry => isNil(entry.markPhase) || entry.markPhase === 'afterEncode')\n );\n }\n\n private _getTransformsBeforeJoin() {\n return this.transforms ? this.transforms.filter(entry => entry.markPhase === 'beforeJoin') : [];\n }\n\n evaluate(data: any[], parameters: any) {\n this.evaluateMainTasks(data, parameters);\n if (!this.renderContext?.progressive) {\n this.evaluateTransform(this._getTransformsAfterEncode(), this.elements, parameters);\n }\n\n return this;\n }\n\n output() {\n return this;\n }\n\n join(\n data: IData | string | Nil,\n key?: MarkKeySpec,\n sort?: MarkSortSpec,\n groupBy?: MarkKeySpec,\n groupSort?: MarkSortSpec\n ) {\n // set data source\n if (this.grammarSource) {\n this.detach(this.grammarSource);\n this.grammarSource = null;\n }\n this.spec.from = null;\n if (!isNil(data)) {\n if (isString(data)) {\n this.grammarSource = this.view.getDataById(data);\n } else {\n this.grammarSource = data;\n }\n this.spec.from = { data };\n this.attach(this.grammarSource);\n }\n\n // set key & sort\n this.spec.key = key;\n this.spec.sort = sort;\n this.spec.groupBy = groupBy;\n this.spec.groupSort = groupSort;\n\n this.commit();\n return this;\n }\n\n coordinate(coordinate: ICoordinate | string | Nil) {\n if (isString(coordinate)) {\n this.coord = this.view.getCoordinateById(coordinate);\n } else {\n this.coord = coordinate;\n }\n this.attach(this.coord);\n this.commit();\n return this;\n }\n\n state(state: MarkFunctionType<string | string[]> | Nil, stateSort?: MarkStateSortSpec) {\n this.spec.stateSort = stateSort;\n\n return this.setFunctionSpec(state, 'state');\n }\n\n encode(channel: string | BaseSingleEncodeSpec, value?: MarkFunctionType<any> | boolean, clear?: boolean): this {\n return this.encodeState(DiffState.update, channel, value, clear);\n }\n\n encodeState(\n state: string,\n channel: string | BaseSingleEncodeSpec,\n value?: MarkFunctionType<any> | boolean,\n clear?: boolean\n ): this {\n if (state === DiffState.enter) {\n this._isReentered = true;\n }\n\n if (this.spec.encode[state]) {\n const lastEncoder = this.spec.encode[state];\n // detach last dependencies\n if (isFunctionType(lastEncoder)) {\n this.detach(parseEncodeType(lastEncoder, this.view));\n } else {\n const isSingleChannel = isString(channel);\n const clearAll = (isSingleChannel && clear) || (!isSingleChannel && value);\n\n if (clearAll) {\n Object.keys(lastEncoder).forEach(c => {\n this.detach(parseEncodeType(lastEncoder[c], this.view));\n });\n\n this.spec.encode[state] = {};\n } else if (isSingleChannel) {\n this.detach(parseEncodeType(lastEncoder[channel], this.view));\n } else {\n Object.keys(channel).forEach(c => {\n this.detach(parseEncodeType(lastEncoder[c], this.view));\n });\n }\n }\n }\n\n if (channel) {\n if (!this.spec.encode[state]) {\n this.spec.encode[state] = {};\n }\n\n // update encode & append new dependencies\n if (isString(channel)) {\n this.spec.encode[state][channel] = value;\n this.attach(parseEncodeType(value, this.view));\n } else if (isFunctionType(channel)) {\n this.spec.encode[state] = channel;\n this.attach(parseEncodeType(channel, this.view));\n } else if (channel) {\n Object.assign(this.spec.encode[state], channel);\n Object.values(channel).forEach(channelEncoder => {\n this.attach(parseEncodeType(channelEncoder, this.view));\n });\n }\n }\n\n this.commit();\n return this;\n }\n\n protected _getEncoders() {\n return this.spec.encode ?? {};\n }\n\n animation(animationConfig: MarkAnimationSpec | Nil): this {\n this.spec.animation = animationConfig;\n return this;\n }\n\n animationState(animationState: MarkFunctionType<string> | Nil): this {\n return this.setFunctionSpec(animationState, 'animationState');\n }\n\n layout(layout: MarkLayoutSpec | MarkLayoutCallback | Nil): this {\n this.spec.layout = layout;\n this.commit();\n return this;\n }\n\n morph(enableMorph: boolean, morphKey?: string, morphElementKey?: string): this {\n this.spec.morph = enableMorph;\n this.spec.morphKey = morphKey;\n this.spec.morphElementKey = morphElementKey;\n return this;\n }\n\n transform(transforms: TransformSpec[] | Nil): this {\n const prevTransforms = parseTransformSpec(this.spec.transform, this.view);\n if (prevTransforms) {\n this.detach(prevTransforms.refs);\n this.transforms = [];\n }\n\n const nextTransforms = parseTransformSpec(transforms, this.view);\n if (nextTransforms) {\n this.attach(nextTransforms.refs);\n this.transforms = nextTransforms.transforms;\n }\n\n this.spec.transform = transforms;\n this.commit();\n return this;\n }\n\n configure(config: IMarkConfig | Nil): this {\n const keys = [\n 'clip',\n 'clipPath',\n 'zIndex',\n 'interactive',\n 'context',\n 'setCustomizedShape',\n 'large',\n 'largeThreshold',\n 'progressiveStep',\n 'progressiveThreshold',\n 'support3d',\n 'morph',\n 'morphKey',\n 'morphElementKey',\n 'attributeTransforms',\n 'skipTheme',\n 'enableSegments',\n 'stateSort'\n ];\n if (config === null) {\n keys.forEach(key => {\n if (!isNil(this.spec[key])) {\n this.spec[key] = undefined;\n }\n });\n return this;\n }\n\n keys.forEach(key => {\n if (!isNil(config[key])) {\n this.spec[key] = config[key];\n }\n });\n\n return this;\n }\n\n context(context: any): this {\n this.spec.context = context;\n this._context = context;\n return this;\n }\n\n isCollectionMark(): boolean {\n return (CollectionMarkType as string[]).includes(this.markType);\n }\n\n needAnimate(): boolean {\n return !this.renderContext?.progressive && !isNil(this.spec.animation);\n }\n\n getAllElements(): IElement[] {\n const elements = this.elements.slice();\n this.elementMap.forEach(element => {\n // For most of time, exit elements will not be included in this.elements.\n // After prepareRelease is invoked, elements will all be marked as exited.\n if (element.diffState === DiffState.exit && !elements.includes(element)) {\n elements.push(element);\n }\n });\n if (this.spec.sort) {\n elements.sort((elementA, elementB) => {\n return this.spec.sort(elementA.getDatum(), elementB.getDatum());\n });\n }\n return elements;\n }\n\n getScales() {\n const scales = {};\n\n this.references.forEach((count, ref) => {\n if (ref.grammarType === GrammarTypeEnum.scale) {\n scales[ref.id() as string] = ref.output();\n }\n });\n\n return scales;\n }\n\n getScalesByChannel() {\n const encoders = this.spec.encode;\n\n if (!encoders) {\n return {};\n }\n\n const res: Record<string, IBaseScale> = {};\n const params = this.parameters();\n\n Object.keys(encoders).forEach(state => {\n const useEncoders = encoders[state];\n\n if (useEncoders && !isFunctionType(useEncoders)) {\n Object.keys(useEncoders).forEach(channel => {\n if (isScaleEncode(useEncoders[channel])) {\n res[channel] = getGrammarOutput(useEncoders[channel].scale, params);\n }\n });\n }\n });\n\n return res;\n }\n\n getFieldsByChannel() {\n const encoders = this.spec.encode;\n\n if (!encoders) {\n return {};\n }\n\n const res: Record<string, string> = {};\n Object.keys(encoders).forEach(state => {\n const useEncoders = encoders[state];\n\n if (!isFunctionType(useEncoders)) {\n Object.keys(useEncoders).forEach(channel => {\n if (isFieldEncode(useEncoders[channel])) {\n res[channel] = useEncoders[channel].field;\n }\n });\n }\n });\n\n return res;\n }\n\n protected init(stage: any, parameters: any) {\n if (!this._delegateEvent) {\n this._delegateEvent = (event: any, type: string) => {\n const activeElement = event.target?.[BridgeElementKey] as IElement;\n if (activeElement?.mark === this) {\n const extendedEvt = getExtendedEvents(this.view, event, activeElement, type, EVENT_SOURCE_VIEW);\n this.emitGrammarEvent(type, extendedEvt, activeElement);\n }\n };\n this.initEvent();\n }\n\n if (!this.animate) {\n this.animate = new Animate(this, this.spec.animation);\n if (this.needAnimate()) {\n this.animate.updateState(this.spec.animationState);\n }\n }\n\n if (!this.group) {\n // root mark will not be reused\n const group = getGrammarOutput(this.spec.group, parameters) as IGroupMark;\n this.group = group;\n if (group) {\n group.appendChild(this);\n }\n }\n\n const groupGraphicItem = this.group ? this.group.getGroupGraphicItem() : stage.defaultLayer;\n const markIndex = this.group?.children?.indexOf(this) ?? 0;\n if (this.markType !== GrammarMarkType.group) {\n if (!this.graphicItem) {\n const graphicItem = createGraphicItem(this, GrammarMarkType.group, {\n pickable: false,\n zIndex: this.spec.zIndex ?? 0\n }) as IGroup;\n if (this.spec.support3d || (Mark3DType as string[]).includes(this.markType)) {\n graphicItem.setMode('3d');\n }\n graphicItem.name = `${this.id() || this.markType}`;\n this.graphicItem = graphicItem;\n }\n this.graphicParent = this.graphicItem;\n if (groupGraphicItem && (this.graphicIndex !== markIndex || this.graphicItem.parent !== groupGraphicItem)) {\n groupGraphicItem.insertIntoKeepIdx(this.graphicItem, markIndex);\n }\n } else {\n this.graphicParent = groupGraphicItem;\n }\n this.graphicIndex = markIndex;\n }\n\n protected update(spec: MarkSpec) {\n this._context = this.spec.context;\n this.isUpdated = true;\n\n if (!this.renderContext.progressive) {\n if (spec.animation) {\n this.animate.updateConfig(spec.animation);\n }\n this.animate.updateState(spec.animationState);\n }\n\n if (this.markType !== GrammarMarkType.group) {\n if (!isNil(spec.zIndex)) {\n this.graphicItem.setAttribute('zIndex', spec.zIndex);\n }\n if (!isNil(spec.clip)) {\n this.graphicItem.setAttribute('clip', spec.clip);\n }\n if (!isNil(spec.clipPath)) {\n this.graphicItem.setAttribute('path', isArray(spec.clipPath) ? spec.clipPath : spec.clipPath(this.elements));\n }\n\n // only update interactive\n this.elementMap.forEach(element => {\n element.updateGraphicItem();\n });\n } else {\n // update group element graphic item attributes\n this.elementMap.forEach(element => {\n element.updateGraphicItem();\n });\n }\n }\n\n protected evaluateJoin(data: any[]) {\n this.needClear = true;\n const keyGetter = parseField(this.spec.key ?? (this.grammarSource as IData)?.getDataIDKey() ?? (() => DefaultKey));\n const groupKeyGetter = parseField(this.spec.groupBy ?? (() => DefaultKey));\n const sort = this.spec.sort;\n const isCollectionMark = this.isCollectionMark();\n\n const enterElements = new Set<IElement>(this.elements.filter(element => element.diffState === DiffState.enter));\n const elements: IElement[] = [];\n this.differ.setCallback((key, data, prevData) => {\n const elementKey: string = key as string;\n let element: IElement;\n if (isNil(data)) {\n // exit\n element = this.elementMap.get(elementKey);\n if (element) {\n element.diffState = DiffState.exit;\n }\n } else if (isNil(prevData)) {\n // enter\n element = this.elementMap.has(elementKey) ? this.elementMap.get(elementKey) : createElement(this);\n if (element.diffState === DiffState.exit) {\n // force element to stop exit animation if it is reentered\n element.diffState = DiffState.enter;\n const animators = this.animate.getElementAnimators(element, DiffState.exit);\n animators.forEach(animator => animator.stop('start'));\n }\n\n element.diffState = DiffState.enter;\n const groupKey: string = isCollectionMark ? key : groupKeyGetter(data[0]);\n element.updateData(groupKey, data, keyGetter, this.view);\n this.elementMap.set(elementKey, element);\n elements.push(element);\n } else {\n // update\n element = this.elementMap.get(elementKey);\n if (element) {\n element.diffState = DiffState.update;\n const groupKey: string = isCollectionMark ? key : groupKeyGetter(data[0]);\n element.updateData(groupKey, data, keyGetter, this.view);\n elements.push(element);\n }\n }\n enterElements.delete(element);\n });\n\n const currentData = data ?? DefaultMarkData;\n\n if (!isCollectionMark) {\n this.differ.setCurrentData(\n groupData(\n currentData,\n (datum: any) => {\n return `${groupKeyGetter(datum)}-${keyGetter(datum)}`;\n },\n undefined\n )\n );\n }\n this.differ.doDiff();\n\n // Enter elements between dataflow start data and end data should be removed directly.\n enterElements.forEach(element => {\n this.elementMap.delete(isCollectionMark ? element.groupKey : `${element.groupKey}-${element.key}`);\n element.remove();\n element.release();\n });\n\n this.elements = elements;\n if (sort && this.elements.length >= 2) {\n this.elements.sort((elementA, elementB) => {\n return sort(elementA.getDatum(), elementB.getDatum());\n });\n }\n }\n\n protected evaluateState(elements: IElement[], stateSpec: MarkStateSpec, parameters: any): void {\n if (!stateSpec) {\n return;\n }\n\n elements.forEach(element => {\n element.state(stateSpec, parameters);\n });\n }\n\n protected evaluateGroupEncode(elements: IElement[], groupEncode: any, parameters: any) {\n if (!this._groupKeys || !groupEncode) {\n return;\n }\n\n const res = {};\n\n this._groupKeys.forEach(key => {\n const el = elements.find(el => el.groupKey === key);\n\n if (!el) {\n return;\n }\n\n res[key] = invokeEncoder(groupEncode, el.items && el.items[0] && el.items[0].datum, el, parameters);\n });\n\n this._groupEncodeResult = res;\n\n return res;\n }\n\n protected getChannelsFromConfig(element?: IElement) {\n const spec = this.spec;\n\n return !isNil(spec.interactive) ? { pickable: spec.interactive } : null;\n }\n\n protected evaluateEncode(elements: IElement[], encoders: any, parameters: any, noGroupEncode?: boolean) {\n const initAttrs = this.getChannelsFromConfig();\n\n if (encoders) {\n this.emit(HOOK_EVENT.BEFORE_ELEMENT_ENCODE, { encoders, parameters }, this);\n\n const groupEncodeAttrs = noGroupEncode\n ? null\n : this.evaluateGroupEncode(elements, encoders[BuiltInEncodeNames.group], parameters);\n\n elements.forEach(element => {\n if (this.markType === GrammarMarkType.glyph && this._groupEncodeResult) {\n element.items.forEach(item => {\n item.nextAttrs = Object.assign(item.nextAttrs, initAttrs, this._groupEncodeResult[element.groupKey]);\n });\n } else if (groupEncodeAttrs?.[element.groupKey] && !this.isCollectionMark()) {\n element.items.forEach(item => {\n item.nextAttrs = Object.assign(item.nextAttrs, initAttrs, groupEncodeAttrs[element.groupKey]);\n });\n } else if (initAttrs) {\n element.items.forEach(item => {\n item.nextAttrs = Object.assign(item.nextAttrs, initAttrs);\n });\n }\n\n element.encodeItems(element.items, encoders, this._isReentered, parameters);\n });\n\n this._isReentered = false;\n\n this.evaluateTransform(this._getTransformsAfterEncodeItems(), elements, parameters);\n\n elements.forEach(element => {\n element.encodeGraphic(this.isCollectionMark() ? groupEncodeAttrs?.[element.groupKey] : null);\n });\n this.emit(HOOK_EVENT.AFTER_ELEMENT_ENCODE, { encoders, parameters }, this);\n } else {\n elements.forEach(element => {\n element.initGraphicItem(initAttrs);\n });\n }\n }\n\n addGraphicItem(attrs: any, groupKey?: string, newGraphicItem?: any) {\n const graphicItem: any = newGraphicItem ?? createGraphicItem(this, this.markType, attrs);\n\n if (!graphicItem) {\n return;\n }\n\n if (this.renderContext?.progressive) {\n let group: IGroup;\n\n if (this._groupKeys) {\n const index = this._groupKeys.indexOf(groupKey);\n\n if (index >= 0) {\n group = this.graphicParent.getChildAt(index) as IGroup;\n }\n } else {\n group = this.graphicParent.at(0) as IGroup;\n }\n\n if (this.isCollectionMark()) {\n graphicItem.incremental = 1;\n group.appendChild(graphicItem);\n } else {\n group.incrementalAppendChild(graphicItem);\n }\n } else {\n (this.graphicParent as any).appendChild(graphicItem);\n }\n return graphicItem;\n }\n\n parseRenderContext(data: any[], parameters: any) {\n const enableProgressive =\n this.markType !== GrammarMarkType.group &&\n this.spec.progressiveStep > 0 &&\n this.spec.progressiveThreshold > 0 &&\n this.spec.progressiveStep < this.spec.progressiveThreshold;\n const large = this.spec.large && this.spec.largeThreshold > 0 && data.length >= this.spec.largeThreshold;\n\n if (enableProgressive) {\n const groupedData = this.differ.getCurrentData();\n\n if (\n groupedData &&\n groupedData.keys &&\n groupedData.keys.some(key => groupedData.data.get(key).length > this.spec.progressiveThreshold)\n ) {\n return {\n large,\n parameters,\n progressive: {\n data,\n step: this.spec.progressiveStep,\n currentIndex: 0,\n totalStep: groupedData.keys.reduce((total, key) => {\n return Math.max(Math.ceil(groupedData.data.get(key).length / this.spec.progressiveStep), total);\n }, 1),\n groupedData: groupedData.data as Map<string, any[]>\n }\n };\n }\n\n return { large };\n }\n\n return {\n large\n };\n }\n\n isProgressive() {\n return this.renderContext && (!!this.renderContext.progressive || !!this.renderContext.beforeTransformProgressive);\n }\n\n isDoingProgressive() {\n return (\n this.renderContext &&\n ((this.renderContext.progressive &&\n this.renderContext.progressive.currentIndex < this.renderContext.progressive.totalStep) ||\n (this.renderContext.beforeTransformProgressive && this.renderContext.beforeTransformProgressive.unfinished()))\n );\n }\n\n clearProgressive() {\n if (this.renderContext && this.renderContext.progressive) {\n this.elements = [];\n\n (this.graphicParent as any).children.forEach((group: IGroup) => {\n group.incrementalClearChild();\n });\n (this.graphicParent as any).removeAllChild();\n }\n\n if (this.renderContext && this.renderContext.beforeTransformProgressive) {\n this.renderContext.beforeTransformProgressive.release();\n }\n\n this.renderContext = null;\n }\n\n restartProgressive() {\n if (this.renderContext && this.renderContext.progressive) {\n this.renderContext.progressive.currentIndex = 0;\n }\n }\n\n evaluateJoinProgressive() {\n const currentIndex = this.renderContext.progressive.currentIndex;\n const keyGetter = parseField(this.spec.key ?? (this.grammarSource as IData)?.getDataIDKey() ?? (() => DefaultKey));\n\n const elements: IElement[] = [];\n\n if (this.isCollectionMark()) {\n this._groupKeys.forEach((key, index) => {\n const data = this.renderContext.progressive.groupedData.get(key);\n const groupStep = this.renderContext.progressive.step;\n const dataSlice = data.slice(currentIndex * groupStep, (currentIndex + 1) * groupStep);\n\n if (currentIndex === 0) {\n const element = createElement(this);\n element.diffState = DiffState.enter;\n element.updateData(key, dataSlice, keyGetter, this.view);\n elements.push(element);\n } else {\n const element = this.elements[index];\n element.updateData(key, dataSlice, keyGetter, this.view);\n elements.push(element);\n }\n });\n\n return elements;\n }\n\n const groupElements: Record<string, IElement[]> = {};\n this._groupKeys.forEach(key => {\n const data = this.renderContext.progressive.groupedData.get(key);\n const groupStep = this.renderContext.progressive.step;\n const dataSlice = data.slice(currentIndex * groupStep, (currentIndex + 1) * groupStep);\n const group: IElement[] = [];\n\n dataSlice.forEach(entry => {\n const element = createElement(this);\n element.diffState = DiffState.enter;\n element.updateData(key, [entry], keyGetter, this.view);\n group.push(element);\n elements.push(element);\n });\n\n groupElements[key] = group;\n });\n\n return { groupElements, elements };\n }\n\n protected evaluateEncodeProgressive(elements: IElement[], encoders: any, parameters: any) {\n const progressiveIndex = this.renderContext.progressive.currentIndex;\n\n if (progressiveIndex === 0) {\n this.evaluateEncode(elements, encoders, parameters);\n\n if (\n progressiveIndex === 0 &&\n this._groupEncodeResult &&\n !this.isCollectionMark() &&\n this.markType !== GrammarMarkType.glyph\n ) {\n const firstElement = elements[0];\n const firstChild = firstElement.getGraphicItem();\n const group = firstChild?.parent;\n\n if (group) {\n if (this._groupEncodeResult[firstElement.groupKey]) {\n (group as IGroup).setTheme({ common: this._groupEncodeResult[firstElement.groupKey] });\n }\n }\n }\n } else {\n this.evaluateEncode(elements, encoders, parameters, true);\n }\n }\n\n evaluateProgressive() {\n if (this.renderContext?.beforeTransformProgressive) {\n this.renderContext.beforeTransformProgressive.progressiveRun();\n const output = this.renderContext.beforeTransformProgressive.output();\n\n this.emit(HOOK_EVENT.BEFORE_MARK_JOIN);\n // FIXME: better default upstream\n this.evaluateJoin(output);\n this.emit(HOOK_EVENT.AFTER_MARK_JOIN);\n\n this.emit(HOOK_EVENT.BEFORE_MARK_STATE);\n this.evaluateState(this.elements, this.spec.state, this.renderContext.parameters);\n this.emit(HOOK_EVENT.AFTER_MARK_STATE);\n\n this.emit(HOOK_EVENT.BEFORE_MARK_ENCODE);\n this.evaluateEncode(this.elements, this._getEncoders(), this.renderContext.parameters);\n this.emit(HOOK_EVENT.AFTER_MARK_ENCODE);\n return;\n }\n\n if (!this.renderContext?.progressive) {\n return;\n }\n const parameters = this.renderContext.parameters;\n\n this.emit(HOOK_EVENT.BEFORE_MARK_JOIN);\n const result = this.evaluateJoinProgressive();\n const elements = Array.isArray(result) ? result : result.elements;\n this.emit(HOOK_EVENT.AFTER_MARK_JOIN);\n\n if (this.renderContext.progressive.currentIndex === 0) {\n (this.graphicParent as any).removeAllChild();\n\n this._groupKeys.forEach(key => {\n const graphicItem = createGraphicItem(this, GrammarMarkType.group, {\n pickable: false,\n zIndex: this.spec.zIndex\n });\n graphicItem.incremental = this.renderContext.progressive.step;\n (this.graphicParent as any).appendChild(graphicItem);\n });\n\n this.elements = elements;\n } else {\n this.elements = this.elements.concat(elements);\n }\n\n this.emit(HOOK_EVENT.BEFORE_MARK_STATE);\n this.evaluateState(elements, this.spec.state, parameters);\n this.emit(HOOK_EVENT.AFTER_MARK_STATE);\n\n this.emit(HOOK_EVENT.BEFORE_MARK_ENCODE);\n if (Array.isArray(result)) {\n this.evaluateEncodeProgressive(elements, this._getEncoders(), parameters);\n } else {\n const groupElements = result.groupElements;\n Object.keys(groupElements).forEach(key => {\n this.evaluateEncodeProgressive(groupElements[key], this._getEncoders(), parameters);\n });\n }\n this.emit(HOOK_EVENT.AFTER_MARK_ENCODE);\n\n const progressiveTransforms = this._getTransformsAfterEncode()?.filter(entry => entry.canProgressive === true);\n\n if (progressiveTransforms?.length) {\n this.evaluateTransform(progressiveTransforms, this.elements, parameters);\n }\n\n this.renderContext.progressive.currentIndex += 1;\n }\n\n isLargeMode() {\n return this.renderContext && this.renderContext.large;\n }\n\n cleanExitElements() {\n this.elementMap.forEach((element, key) => {\n if (element.diffState === DiffState.exit && !element.isReserved) {\n this.elementMap.delete(key);\n element.remove();\n element.release();\n }\n });\n }\n\n getGroupGraphicItem() {\n if (this.elements && this.elements[0] && this.elements[0].getGraphicItem) {\n return this.elements[0].getGraphicItem();\n }\n }\n\n getBounds() {\n return (this.graphicItem ? this.graphicItem.AABBBounds : this.getGroupGraphicItem()?.AABBBounds) as IBounds;\n }\n\n getMorphConfig(): { morph: boolean; morphKey: string; morphElementKey: string } {\n return {\n morph: this.spec.morph ?? false,\n morphKey: this.spec.morphKey,\n morphElementKey: this.spec.morphElementKey\n };\n }\n\n getAttributeTransforms() {\n return this.spec.attributeTransforms ?? transformsByType[this.markType];\n }\n\n getContext() {\n return this._context;\n }\n\n protected needSkipBeforeLayout(): boolean {\n if ((this.spec.layout as MarkBaseLayoutSpec)?.skipBeforeLayouted === true) {\n return true;\n }\n let group = this.group;\n // if parent mark has been skipped, child marks should skip\n while (group) {\n if (group.getSpec().layout?.skipBeforeLayouted === true) {\n return true;\n }\n group = group.group;\n }\n return false;\n }\n\n private initEvent() {\n if (this._delegateEvent) {\n const stage = this.view.renderer.stage();\n stage && stage.on('*', this._delegateEvent);\n }\n }\n\n private releaseEvent() {\n if (this._delegateEvent) {\n const stage = this.view.renderer.stage();\n stage && stage.off('*', this._delegateEvent);\n }\n }\n\n clear() {\n this.releaseEvent();\n this.transforms = null;\n\n this.elementMap = null;\n this.elements = null;\n\n this.graphicItem = null;\n this.animate = null;\n\n this.group?.removeChild(this);\n this.group = null;\n super.clear();\n }\n\n prepareRelease() {\n this.animate.stop();\n this.elementMap.forEach(element => (element.diffState = DiffState.exit));\n this._finalParameters = this.parameters();\n }\n\n release() {\n this.releaseEvent();\n this.elements.forEach(element => element.release());\n this.elementMap.clear();\n this._finalParameters = null;\n\n if (this.animate) {\n this.animate.release();\n }\n\n if (this.graphicItem) {\n removeGraphicItem(this.graphicItem);\n }\n\n this.detachAll();\n\n super.release();\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/view/mark.ts"],"names":[],"mappings":"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","file":"mark.js","sourcesContent":["import type { IGroup } from '@visactor/vrender-core';\nimport type { IBounds } from '@visactor/vutils';\nimport { isArray, isNil, isString } from '@visactor/vutils';\nimport { BridgeElementKey, CollectionMarkType, DefaultKey, DefaultMarkData, Mark3DType } from '../graph/constants';\nimport {\n DiffState,\n GrammarMarkType,\n LayoutState,\n HOOK_EVENT,\n GrammarTypeEnum,\n BuiltInEncodeNames\n} from '../graph/enums';\nimport { Differ, groupData } from '../graph/mark/differ';\nimport { Animate } from '../graph/animation/animate';\nimport { createGraphicItem, removeGraphicItem } from '../graph/util/graphic';\nimport { GrammarBase } from './grammar-base';\nimport type {\n GrammarType,\n ICoordinate,\n IData,\n IElement,\n IGrammarBase,\n IGroupMark,\n IMark,\n IMarkConfig,\n IView,\n MarkAnimationSpec,\n MarkBaseLayoutSpec,\n MarkFunctionType,\n MarkKeySpec,\n MarkLayoutCallback,\n MarkLayoutSpec,\n MarkSortSpec,\n MarkSpec,\n MarkStateSpec,\n MarkType,\n TransformSpec,\n ProgressiveContext,\n IProgressiveTransformResult,\n Nil,\n IAnimate,\n MarkStateSortSpec,\n BaseSingleEncodeSpec\n} from '../types';\nimport { isFieldEncode, isScaleEncode, parseEncodeType } from '../parse/mark';\nimport { getGrammarOutput, parseField, isFunctionType } from '../parse/util';\nimport { parseTransformSpec } from '../parse/transform';\nimport { createElement } from '../graph/util/element';\nimport { invokeEncoder, invokeEncoderToItems } from '../graph/mark/encode';\nimport { transformsByType } from '../graph/attributes';\nimport getExtendedEvents from '../graph/util/events-extend';\nimport type { IBaseScale } from '@visactor/vscale';\nimport { EVENT_SOURCE_VIEW } from './constants';\n\nexport class Mark extends GrammarBase implements IMark {\n readonly grammarType: GrammarType = 'mark';\n\n protected declare spec: MarkSpec;\n\n /**\n * only need to clear elements after join and render\n * but `handleRenderEnd` will be call after every render\n */\n protected needClear?: boolean;\n\n coord: ICoordinate;\n\n disableCoordinateTransform: boolean;\n\n // mark properties\n markType: MarkType;\n\n group: IGroupMark | undefined;\n /** 非group mark,对应的容器节点 */\n graphicItem?: IGroup;\n graphicIndex: number;\n /** mark下的element,对应的父节点 */\n graphicParent?: IGroup;\n\n elements: IElement[] = [];\n elementMap: Map<string, IElement> = new Map();\n\n isUpdated: boolean = true;\n\n private _groupKeys: string[];\n\n protected _groupEncodeResult: Record<string, any>;\n\n /** whether mark enter encode is updated */\n protected _isReentered: boolean = false;\n\n private _context: any;\n\n private renderContext?: {\n large: boolean;\n parameters?: any;\n progressive?: ProgressiveContext;\n beforeTransformProgressive?: IProgressiveTransformResult;\n };\n animate: IAnimate = new Animate(this, {});\n\n protected differ = new Differ([]);\n\n private _delegateEvent: (event: any, type: string) => void;\n\n private _finalParameters: any;\n\n constructor(view: IView, markType: MarkType, group?: IGroupMark) {\n super(view);\n this.markType = markType;\n this.spec.type = markType;\n this.spec.encode = { update: {} };\n this.spec.group = group;\n if (group) {\n this.group = group;\n this.attach(group);\n group.appendChild(this);\n }\n }\n\n parse(spec: MarkSpec) {\n super.parse(spec);\n\n // TODO: add group api\n if (this.spec.group) {\n const groupMark = isString(this.spec.group) ? this.view.getMarkById(this.spec.group) : this.spec.group;\n this.detach(groupMark);\n }\n const groupMark = isString(spec.group) ? this.view.getMarkById(spec.group) : spec.group;\n this.attach(groupMark);\n\n this.join(spec.from?.data, spec.key, spec.sort, spec.groupBy, spec.groupSort);\n this.coordinate(spec.coordinate);\n this.state(spec.state, this.spec.stateSort);\n\n // remove old encode\n Object.keys(this.spec.encode ?? {}).forEach(state => {\n this.encodeState(state, {}, true);\n });\n\n // add new encode\n Object.keys(spec.encode ?? {}).forEach(state => {\n this.encodeState(state, spec.encode[state]);\n });\n this.animation(spec.animation);\n this.animationState(spec.animationState);\n this.morph(spec.morph, spec.morphKey, spec.morphElementKey);\n this.layout(spec.layout);\n this.configure(spec);\n this.transform(spec.transform);\n\n this.parseAddition(spec);\n\n this.spec = spec;\n this.markType = spec.type as MarkType;\n\n this.commit();\n return this;\n }\n\n parameters() {\n // apply last parameters after prepareRelease\n return this._finalParameters ?? super.parameters();\n }\n\n protected parseAddition(spec: MarkSpec) {\n return this;\n }\n\n reuse(grammar: IGrammarBase) {\n if (grammar.grammarType !== this.grammarType) {\n return this;\n }\n const mark = grammar as Mark;\n this.markType = mark.markType;\n this.coord = mark.coord;\n\n this.elementMap = mark.elementMap;\n this.elements = mark.elements;\n this.elementMap.forEach(element => (element.mark = this));\n\n this.differ = mark.differ;\n this.animate = mark.animate;\n this.animate.mark = this;\n\n this._context = mark._context;\n // set group in later evaluate progress\n this.graphicItem = mark.graphicItem;\n this.graphicIndex = mark.graphicIndex;\n this.graphicParent = mark.graphicParent;\n\n this.needClear = mark.needClear;\n this.isUpdated = mark.isUpdated;\n\n return this;\n }\n\n needLayout() {\n // 后续可以加上Visible 判断等\n return !isNil(this.spec.layout);\n }\n\n handleLayoutEnd() {\n // if ((this.spec?.layout as MarkBaseLayoutSpec)?.skipBeforeLayouted) {\n // this.run();\n // }\n }\n\n handleRenderEnd() {\n /**\n * only need to clear elements after join and render\n * but `handleRenderEnd` will be call after every render\n */\n if (!this.needClear) {\n return;\n }\n // clear exit elements\n this.cleanExitElements();\n // clear element channels\n this.elementMap.forEach(element => {\n if (element.diffState === DiffState.exit) {\n element.clearGraphicAttributes();\n } else {\n element.clearChangedGraphicAttributes();\n }\n });\n this.differ.updateToCurrent();\n this.needClear = false;\n }\n\n evaluateMainTasks(data: any[], parameters: any) {\n if (this.needSkipBeforeLayout() && this.view.getLayoutState() === LayoutState.before) {\n return this;\n }\n\n const stage = this.view.renderer?.stage();\n\n this.init(stage, parameters);\n const transformData = this.evaluateTransform(this._getTransformsBeforeJoin(), data ?? DefaultMarkData, parameters);\n let inputData = transformData?.progressive ? data : (transformData as any[]);\n\n this.evaluateGroup(inputData);\n\n this.renderContext = this.parseRenderContext(inputData, parameters);\n if (!this.renderContext.progressive) {\n if (transformData?.progressive) {\n this.renderContext.parameters = parameters;\n this.renderContext.beforeTransformProgressive = transformData.progressive;\n inputData = transformData.progressive.output();\n }\n this.emit(HOOK_EVENT.BEFORE_MARK_JOIN);\n // FIXME: better default upstream\n this.evaluateJoin(inputData);\n this.emit(HOOK_EVENT.AFTER_MARK_JOIN);\n\n this.emit(HOOK_EVENT.BEFORE_MARK_STATE);\n this.evaluateState(this.elements, this.spec.state, parameters);\n this.emit(HOOK_EVENT.AFTER_MARK_STATE);\n\n this.emit(HOOK_EVENT.BEFORE_MARK_ENCODE);\n this.evaluateEncode(this.elements, this._getEncoders(), parameters);\n this.emit(HOOK_EVENT.AFTER_MARK_ENCODE);\n } else {\n this.differ.reset();\n this.elementMap.clear();\n this.evaluateProgressive();\n }\n\n this.emit(HOOK_EVENT.BEFORE_MARK_UPDATE);\n this.update(this.spec);\n this.emit(HOOK_EVENT.AFTER_MARK_UPDATE);\n\n return this;\n }\n\n protected evaluateGroup(data: any[]) {\n if (this.markType === GrammarMarkType.group) {\n return;\n }\n const currentData = data ?? DefaultMarkData;\n const res = groupData(currentData, this.spec.groupBy, this.spec.groupSort);\n const groupKeys = res.keys as string[];\n\n this._groupKeys = groupKeys;\n this._groupEncodeResult = null;\n\n this.differ.setCurrentData(res);\n }\n\n protected _getTransformsAfterEncodeItems() {\n return this.transforms && this.transforms.filter(entry => entry.markPhase === 'afterEncodeItems');\n }\n\n private _getTransformsAfterEncode() {\n return (\n this.transforms && this.transforms.filter(entry => isNil(entry.markPhase) || entry.markPhase === 'afterEncode')\n );\n }\n\n private _getTransformsBeforeJoin() {\n return this.transforms ? this.transforms.filter(entry => entry.markPhase === 'beforeJoin') : [];\n }\n\n evaluate(data: any[], parameters: any) {\n this.evaluateMainTasks(data, parameters);\n if (!this.renderContext?.progressive) {\n this.evaluateTransform(this._getTransformsAfterEncode(), this.elements, parameters);\n }\n\n return this;\n }\n\n output() {\n return this;\n }\n\n join(\n data: IData | string | Nil,\n key?: MarkKeySpec,\n sort?: MarkSortSpec,\n groupBy?: MarkKeySpec,\n groupSort?: MarkSortSpec\n ) {\n // set data source\n if (this.grammarSource) {\n this.detach(this.grammarSource);\n this.grammarSource = null;\n }\n this.spec.from = null;\n if (!isNil(data)) {\n if (isString(data)) {\n this.grammarSource = this.view.getDataById(data);\n } else {\n this.grammarSource = data;\n }\n this.spec.from = { data };\n this.attach(this.grammarSource);\n }\n\n // set key & sort\n this.spec.key = key;\n this.spec.sort = sort;\n this.spec.groupBy = groupBy;\n this.spec.groupSort = groupSort;\n\n this.commit();\n return this;\n }\n\n coordinate(coordinate: ICoordinate | string | Nil) {\n if (isString(coordinate)) {\n this.coord = this.view.getCoordinateById(coordinate);\n } else {\n this.coord = coordinate;\n }\n this.attach(this.coord);\n this.commit();\n return this;\n }\n\n state(state: MarkFunctionType<string | string[]> | Nil, stateSort?: MarkStateSortSpec) {\n this.spec.stateSort = stateSort;\n\n return this.setFunctionSpec(state, 'state');\n }\n\n encode(channel: string | BaseSingleEncodeSpec, value?: MarkFunctionType<any> | boolean, clear?: boolean): this {\n return this.encodeState(DiffState.update, channel, value, clear);\n }\n\n encodeState(\n state: string,\n channel: string | BaseSingleEncodeSpec,\n value?: MarkFunctionType<any> | boolean,\n clear?: boolean\n ): this {\n if (state === DiffState.enter) {\n this._isReentered = true;\n }\n\n if (this.spec.encode[state]) {\n const lastEncoder = this.spec.encode[state];\n // detach last dependencies\n if (isFunctionType(lastEncoder)) {\n this.detach(parseEncodeType(lastEncoder, this.view));\n } else {\n const isSingleChannel = isString(channel);\n const clearAll = (isSingleChannel && clear) || (!isSingleChannel && value);\n\n if (clearAll) {\n Object.keys(lastEncoder).forEach(c => {\n this.detach(parseEncodeType(lastEncoder[c], this.view));\n });\n\n this.spec.encode[state] = {};\n } else if (isSingleChannel) {\n this.detach(parseEncodeType(lastEncoder[channel], this.view));\n } else {\n Object.keys(channel).forEach(c => {\n this.detach(parseEncodeType(lastEncoder[c], this.view));\n });\n }\n }\n }\n\n if (channel) {\n if (!this.spec.encode[state]) {\n this.spec.encode[state] = {};\n }\n\n // update encode & append new dependencies\n if (isString(channel)) {\n this.spec.encode[state][channel] = value;\n this.attach(parseEncodeType(value, this.view));\n } else if (isFunctionType(channel)) {\n this.spec.encode[state] = channel;\n this.attach(parseEncodeType(channel, this.view));\n } else if (channel) {\n Object.assign(this.spec.encode[state], channel);\n Object.values(channel).forEach(channelEncoder => {\n this.attach(parseEncodeType(channelEncoder, this.view));\n });\n }\n }\n\n this.commit();\n return this;\n }\n\n protected _getEncoders() {\n return this.spec.encode ?? {};\n }\n\n animation(animationConfig: MarkAnimationSpec | Nil): this {\n this.spec.animation = animationConfig;\n return this;\n }\n\n animationState(animationState: MarkFunctionType<string> | Nil): this {\n return this.setFunctionSpec(animationState, 'animationState');\n }\n\n layout(layout: MarkLayoutSpec | MarkLayoutCallback | Nil): this {\n this.spec.layout = layout;\n this.commit();\n return this;\n }\n\n morph(enableMorph: boolean, morphKey?: string, morphElementKey?: string): this {\n this.spec.morph = enableMorph;\n this.spec.morphKey = morphKey;\n this.spec.morphElementKey = morphElementKey;\n return this;\n }\n\n transform(transforms: TransformSpec[] | Nil): this {\n const prevTransforms = parseTransformSpec(this.spec.transform, this.view);\n if (prevTransforms) {\n this.detach(prevTransforms.refs);\n this.transforms = [];\n }\n\n const nextTransforms = parseTransformSpec(transforms, this.view);\n if (nextTransforms) {\n this.attach(nextTransforms.refs);\n this.transforms = nextTransforms.transforms;\n }\n\n this.spec.transform = transforms;\n this.commit();\n return this;\n }\n\n configure(config: IMarkConfig | Nil): this {\n const keys = [\n 'clip',\n 'clipPath',\n 'zIndex',\n 'interactive',\n 'context',\n 'setCustomizedShape',\n 'large',\n 'largeThreshold',\n 'progressiveStep',\n 'progressiveThreshold',\n 'support3d',\n 'morph',\n 'morphKey',\n 'morphElementKey',\n 'attributeTransforms',\n 'skipTheme',\n 'enableSegments',\n 'stateSort'\n ];\n if (config === null) {\n keys.forEach(key => {\n if (!isNil(this.spec[key])) {\n this.spec[key] = undefined;\n }\n });\n return this;\n }\n\n keys.forEach(key => {\n if (!isNil(config[key])) {\n this.spec[key] = config[key];\n }\n });\n\n return this;\n }\n\n context(context: any): this {\n this.spec.context = context;\n this._context = context;\n return this;\n }\n\n isCollectionMark(): boolean {\n return (CollectionMarkType as string[]).includes(this.markType);\n }\n\n needAnimate(): boolean {\n return !this.renderContext?.progressive && !isNil(this.spec.animation);\n }\n\n getAllElements(): IElement[] {\n const elements = this.elements.slice();\n this.elementMap.forEach(element => {\n // For most of time, exit elements will not be included in this.elements.\n // After prepareRelease is invoked, elements will all be marked as exited.\n if (element.diffState === DiffState.exit && !elements.includes(element)) {\n elements.push(element);\n }\n });\n if (this.spec.sort) {\n elements.sort((elementA, elementB) => {\n return this.spec.sort(elementA.getDatum(), elementB.getDatum());\n });\n }\n return elements;\n }\n\n getScales() {\n const scales = {};\n\n this.references.forEach((count, ref) => {\n if (ref.grammarType === GrammarTypeEnum.scale) {\n scales[ref.id() as string] = ref.output();\n }\n });\n\n return scales;\n }\n\n getScalesByChannel() {\n const encoders = this.spec.encode;\n\n if (!encoders) {\n return {};\n }\n\n const res: Record<string, IBaseScale> = {};\n const params = this.parameters();\n\n Object.keys(encoders).forEach(state => {\n const useEncoders = encoders[state];\n\n if (useEncoders && !isFunctionType(useEncoders)) {\n Object.keys(useEncoders).forEach(channel => {\n if (isScaleEncode(useEncoders[channel])) {\n res[channel] = getGrammarOutput(useEncoders[channel].scale, params);\n }\n });\n }\n });\n\n return res;\n }\n\n getFieldsByChannel() {\n const encoders = this.spec.encode;\n\n if (!encoders) {\n return {};\n }\n\n const res: Record<string, string> = {};\n Object.keys(encoders).forEach(state => {\n const useEncoders = encoders[state];\n\n if (!isFunctionType(useEncoders)) {\n Object.keys(useEncoders).forEach(channel => {\n if (isFieldEncode(useEncoders[channel])) {\n res[channel] = useEncoders[channel].field;\n }\n });\n }\n });\n\n return res;\n }\n\n protected init(stage: any, parameters: any) {\n if (!this._delegateEvent) {\n this._delegateEvent = (event: any, type: string) => {\n const activeElement = event.target?.[BridgeElementKey] as IElement;\n if (activeElement?.mark === this) {\n const extendedEvt = getExtendedEvents(this.view, event, activeElement, type, EVENT_SOURCE_VIEW);\n this.emitGrammarEvent(type, extendedEvt, activeElement);\n }\n };\n this.initEvent();\n }\n\n if (!this.animate) {\n this.animate = new Animate(this, this.spec.animation);\n if (this.needAnimate()) {\n this.animate.updateState(this.spec.animationState);\n }\n }\n\n if (!this.group) {\n // root mark will not be reused\n const group = getGrammarOutput(this.spec.group, parameters) as IGroupMark;\n this.group = group;\n if (group) {\n group.appendChild(this);\n }\n }\n\n const groupGraphicItem = this.group ? this.group.getGroupGraphicItem() : stage.defaultLayer;\n const markIndex = this.group?.children?.indexOf(this) ?? 0;\n if (this.markType !== GrammarMarkType.group) {\n if (!this.graphicItem) {\n const graphicItem = createGraphicItem(this, GrammarMarkType.group, {\n pickable: false,\n zIndex: this.spec.zIndex ?? 0\n }) as IGroup;\n if (this.spec.support3d || (Mark3DType as string[]).includes(this.markType)) {\n graphicItem.setMode('3d');\n }\n graphicItem.name = `${this.id() || this.markType}`;\n this.graphicItem = graphicItem;\n }\n this.graphicParent = this.graphicItem;\n if (groupGraphicItem && (this.graphicIndex !== markIndex || this.graphicItem.parent !== groupGraphicItem)) {\n groupGraphicItem.insertIntoKeepIdx(this.graphicItem, markIndex);\n }\n } else {\n this.graphicParent = groupGraphicItem;\n }\n this.graphicIndex = markIndex;\n }\n\n protected update(spec: MarkSpec) {\n this._context = this.spec.context;\n this.isUpdated = true;\n\n if (!this.renderContext.progressive) {\n if (spec.animation) {\n this.animate.updateConfig(spec.animation);\n }\n this.animate.updateState(spec.animationState);\n }\n\n if (this.markType !== GrammarMarkType.group) {\n if (!isNil(spec.zIndex)) {\n this.graphicItem.setAttribute('zIndex', spec.zIndex);\n }\n if (!isNil(spec.clip)) {\n this.graphicItem.setAttribute('clip', spec.clip);\n }\n if (!isNil(spec.clipPath)) {\n const paths = isArray(spec.clipPath) ? spec.clipPath : spec.clipPath(this.elements);\n\n if (paths && paths.length) {\n this.graphicItem.setAttribute('path', paths);\n } else {\n this.graphicItem.setAttributes({\n path: paths,\n clip: false\n });\n }\n }\n\n // only update interactive\n this.elementMap.forEach(element => {\n element.updateGraphicItem();\n });\n } else {\n // update group element graphic item attributes\n this.elementMap.forEach(element => {\n element.updateGraphicItem();\n });\n }\n }\n\n protected evaluateJoin(data: any[]) {\n this.needClear = true;\n const keyGetter = parseField(this.spec.key ?? (this.grammarSource as IData)?.getDataIDKey() ?? (() => DefaultKey));\n const groupKeyGetter = parseField(this.spec.groupBy ?? (() => DefaultKey));\n const sort = this.spec.sort;\n const isCollectionMark = this.isCollectionMark();\n\n const enterElements = new Set<IElement>(this.elements.filter(element => element.diffState === DiffState.enter));\n const elements: IElement[] = [];\n this.differ.setCallback((key, data, prevData) => {\n const elementKey: string = key as string;\n let element: IElement;\n if (isNil(data)) {\n // exit\n element = this.elementMap.get(elementKey);\n if (element) {\n element.diffState = DiffState.exit;\n }\n } else if (isNil(prevData)) {\n // enter\n element = this.elementMap.has(elementKey) ? this.elementMap.get(elementKey) : createElement(this);\n if (element.diffState === DiffState.exit) {\n // force element to stop exit animation if it is reentered\n element.diffState = DiffState.enter;\n const animators = this.animate.getElementAnimators(element, DiffState.exit);\n animators.forEach(animator => animator.stop('start'));\n }\n\n element.diffState = DiffState.enter;\n const groupKey: string = isCollectionMark ? key : groupKeyGetter(data[0]);\n element.updateData(groupKey, data, keyGetter, this.view);\n this.elementMap.set(elementKey, element);\n elements.push(element);\n } else {\n // update\n element = this.elementMap.get(elementKey);\n if (element) {\n element.diffState = DiffState.update;\n const groupKey: string = isCollectionMark ? key : groupKeyGetter(data[0]);\n element.updateData(groupKey, data, keyGetter, this.view);\n elements.push(element);\n }\n }\n enterElements.delete(element);\n });\n\n const currentData = data ?? DefaultMarkData;\n\n if (!isCollectionMark) {\n this.differ.setCurrentData(\n groupData(\n currentData,\n (datum: any) => {\n return `${groupKeyGetter(datum)}-${keyGetter(datum)}`;\n },\n undefined\n )\n );\n }\n this.differ.doDiff();\n\n // Enter elements between dataflow start data and end data should be removed directly.\n enterElements.forEach(element => {\n this.elementMap.delete(isCollectionMark ? element.groupKey : `${element.groupKey}-${element.key}`);\n element.remove();\n element.release();\n });\n\n this.elements = elements;\n if (sort && this.elements.length >= 2) {\n this.elements.sort((elementA, elementB) => {\n return sort(elementA.getDatum(), elementB.getDatum());\n });\n }\n }\n\n protected evaluateState(elements: IElement[], stateSpec: MarkStateSpec, parameters: any): void {\n if (!stateSpec) {\n return;\n }\n\n elements.forEach(element => {\n element.state(stateSpec, parameters);\n });\n }\n\n protected evaluateGroupEncode(elements: IElement[], groupEncode: any, parameters: any) {\n if (!this._groupKeys || !groupEncode) {\n return;\n }\n\n const res = {};\n\n this._groupKeys.forEach(key => {\n const el = elements.find(el => el.groupKey === key);\n\n if (!el) {\n return;\n }\n\n res[key] = invokeEncoder(groupEncode, el.items && el.items[0] && el.items[0].datum, el, parameters);\n });\n\n this._groupEncodeResult = res;\n\n return res;\n }\n\n protected getChannelsFromConfig(element?: IElement) {\n const spec = this.spec;\n\n return !isNil(spec.interactive) ? { pickable: spec.interactive } : null;\n }\n\n protected evaluateEncode(elements: IElement[], encoders: any, parameters: any, noGroupEncode?: boolean) {\n const initAttrs = this.getChannelsFromConfig();\n\n if (encoders) {\n this.emit(HOOK_EVENT.BEFORE_ELEMENT_ENCODE, { encoders, parameters }, this);\n\n const groupEncodeAttrs = noGroupEncode\n ? null\n : this.evaluateGroupEncode(elements, encoders[BuiltInEncodeNames.group], parameters);\n\n elements.forEach(element => {\n if (this.markType === GrammarMarkType.glyph && this._groupEncodeResult) {\n element.items.forEach(item => {\n item.nextAttrs = Object.assign(item.nextAttrs, initAttrs, this._groupEncodeResult[element.groupKey]);\n });\n } else if (groupEncodeAttrs?.[element.groupKey] && !this.isCollectionMark()) {\n element.items.forEach(item => {\n item.nextAttrs = Object.assign(item.nextAttrs, initAttrs, groupEncodeAttrs[element.groupKey]);\n });\n } else if (initAttrs) {\n element.items.forEach(item => {\n item.nextAttrs = Object.assign(item.nextAttrs, initAttrs);\n });\n }\n\n element.encodeItems(element.items, encoders, this._isReentered, parameters);\n });\n\n this._isReentered = false;\n\n this.evaluateTransform(this._getTransformsAfterEncodeItems(), elements, parameters);\n\n elements.forEach(element => {\n element.encodeGraphic(this.isCollectionMark() ? groupEncodeAttrs?.[element.groupKey] : null);\n });\n this.emit(HOOK_EVENT.AFTER_ELEMENT_ENCODE, { encoders, parameters }, this);\n } else {\n elements.forEach(element => {\n element.initGraphicItem(initAttrs);\n });\n }\n }\n\n addGraphicItem(attrs: any, groupKey?: string, newGraphicItem?: any) {\n const graphicItem: any = newGraphicItem ?? createGraphicItem(this, this.markType, attrs);\n\n if (!graphicItem) {\n return;\n }\n\n if (this.renderContext?.progressive) {\n let group: IGroup;\n\n if (this._groupKeys) {\n const index = this._groupKeys.indexOf(groupKey);\n\n if (index >= 0) {\n group = this.graphicParent.getChildAt(index) as IGroup;\n }\n } else {\n group = this.graphicParent.at(0) as IGroup;\n }\n\n if (this.isCollectionMark()) {\n graphicItem.incremental = 1;\n group.appendChild(graphicItem);\n } else {\n group.incrementalAppendChild(graphicItem);\n }\n } else {\n (this.graphicParent as any).appendChild(graphicItem);\n }\n return graphicItem;\n }\n\n parseRenderContext(data: any[], parameters: any) {\n const enableProgressive =\n this.markType !== GrammarMarkType.group &&\n this.spec.progressiveStep > 0 &&\n this.spec.progressiveThreshold > 0 &&\n this.spec.progressiveStep < this.spec.progressiveThreshold;\n const large = this.spec.large && this.spec.largeThreshold > 0 && data.length >= this.spec.largeThreshold;\n\n if (enableProgressive) {\n const groupedData = this.differ.getCurrentData();\n\n if (\n groupedData &&\n groupedData.keys &&\n groupedData.keys.some(key => groupedData.data.get(key).length > this.spec.progressiveThreshold)\n ) {\n return {\n large,\n parameters,\n progressive: {\n data,\n step: this.spec.progressiveStep,\n currentIndex: 0,\n totalStep: groupedData.keys.reduce((total, key) => {\n return Math.max(Math.ceil(groupedData.data.get(key).length / this.spec.progressiveStep), total);\n }, 1),\n groupedData: groupedData.data as Map<string, any[]>\n }\n };\n }\n\n return { large };\n }\n\n return {\n large\n };\n }\n\n isProgressive() {\n return this.renderContext && (!!this.renderContext.progressive || !!this.renderContext.beforeTransformProgressive);\n }\n\n isDoingProgressive() {\n return (\n this.renderContext &&\n ((this.renderContext.progressive &&\n this.renderContext.progressive.currentIndex < this.renderContext.progressive.totalStep) ||\n (this.renderContext.beforeTransformProgressive && this.renderContext.beforeTransformProgressive.unfinished()))\n );\n }\n\n clearProgressive() {\n if (this.renderContext && this.renderContext.progressive) {\n this.elements = [];\n\n (this.graphicParent as any).children.forEach((group: IGroup) => {\n group.incrementalClearChild();\n });\n (this.graphicParent as any).removeAllChild();\n }\n\n if (this.renderContext && this.renderContext.beforeTransformProgressive) {\n this.renderContext.beforeTransformProgressive.release();\n }\n\n this.renderContext = null;\n }\n\n restartProgressive() {\n if (this.renderContext && this.renderContext.progressive) {\n this.renderContext.progressive.currentIndex = 0;\n }\n }\n\n evaluateJoinProgressive() {\n const currentIndex = this.renderContext.progressive.currentIndex;\n const keyGetter = parseField(this.spec.key ?? (this.grammarSource as IData)?.getDataIDKey() ?? (() => DefaultKey));\n\n const elements: IElement[] = [];\n\n if (this.isCollectionMark()) {\n this._groupKeys.forEach((key, index) => {\n const data = this.renderContext.progressive.groupedData.get(key);\n const groupStep = this.renderContext.progressive.step;\n const dataSlice = data.slice(currentIndex * groupStep, (currentIndex + 1) * groupStep);\n\n if (currentIndex === 0) {\n const element = createElement(this);\n element.diffState = DiffState.enter;\n element.updateData(key, dataSlice, keyGetter, this.view);\n elements.push(element);\n } else {\n const element = this.elements[index];\n element.updateData(key, dataSlice, keyGetter, this.view);\n elements.push(element);\n }\n });\n\n return elements;\n }\n\n const groupElements: Record<string, IElement[]> = {};\n this._groupKeys.forEach(key => {\n const data = this.renderContext.progressive.groupedData.get(key);\n const groupStep = this.renderContext.progressive.step;\n const dataSlice = data.slice(currentIndex * groupStep, (currentIndex + 1) * groupStep);\n const group: IElement[] = [];\n\n dataSlice.forEach(entry => {\n const element = createElement(this);\n element.diffState = DiffState.enter;\n element.updateData(key, [entry], keyGetter, this.view);\n group.push(element);\n elements.push(element);\n });\n\n groupElements[key] = group;\n });\n\n return { groupElements, elements };\n }\n\n protected evaluateEncodeProgressive(elements: IElement[], encoders: any, parameters: any) {\n const progressiveIndex = this.renderContext.progressive.currentIndex;\n\n if (progressiveIndex === 0) {\n this.evaluateEncode(elements, encoders, parameters);\n\n if (\n progressiveIndex === 0 &&\n this._groupEncodeResult &&\n !this.isCollectionMark() &&\n this.markType !== GrammarMarkType.glyph\n ) {\n const firstElement = elements[0];\n const firstChild = firstElement.getGraphicItem();\n const group = firstChild?.parent;\n\n if (group) {\n if (this._groupEncodeResult[firstElement.groupKey]) {\n (group as IGroup).setTheme({ common: this._groupEncodeResult[firstElement.groupKey] });\n }\n }\n }\n } else {\n this.evaluateEncode(elements, encoders, parameters, true);\n }\n }\n\n evaluateProgressive() {\n if (this.renderContext?.beforeTransformProgressive) {\n this.renderContext.beforeTransformProgressive.progressiveRun();\n const output = this.renderContext.beforeTransformProgressive.output();\n\n this.emit(HOOK_EVENT.BEFORE_MARK_JOIN);\n // FIXME: better default upstream\n this.evaluateJoin(output);\n this.emit(HOOK_EVENT.AFTER_MARK_JOIN);\n\n this.emit(HOOK_EVENT.BEFORE_MARK_STATE);\n this.evaluateState(this.elements, this.spec.state, this.renderContext.parameters);\n this.emit(HOOK_EVENT.AFTER_MARK_STATE);\n\n this.emit(HOOK_EVENT.BEFORE_MARK_ENCODE);\n this.evaluateEncode(this.elements, this._getEncoders(), this.renderContext.parameters);\n this.emit(HOOK_EVENT.AFTER_MARK_ENCODE);\n return;\n }\n\n if (!this.renderContext?.progressive) {\n return;\n }\n const parameters = this.renderContext.parameters;\n\n this.emit(HOOK_EVENT.BEFORE_MARK_JOIN);\n const result = this.evaluateJoinProgressive();\n const elements = Array.isArray(result) ? result : result.elements;\n this.emit(HOOK_EVENT.AFTER_MARK_JOIN);\n\n if (this.renderContext.progressive.currentIndex === 0) {\n (this.graphicParent as any).removeAllChild();\n\n this._groupKeys.forEach(key => {\n const graphicItem = createGraphicItem(this, GrammarMarkType.group, {\n pickable: false,\n zIndex: this.spec.zIndex\n });\n graphicItem.incremental = this.renderContext.progressive.step;\n (this.graphicParent as any).appendChild(graphicItem);\n });\n\n this.elements = elements;\n } else {\n this.elements = this.elements.concat(elements);\n }\n\n this.emit(HOOK_EVENT.BEFORE_MARK_STATE);\n this.evaluateState(elements, this.spec.state, parameters);\n this.emit(HOOK_EVENT.AFTER_MARK_STATE);\n\n this.emit(HOOK_EVENT.BEFORE_MARK_ENCODE);\n if (Array.isArray(result)) {\n this.evaluateEncodeProgressive(elements, this._getEncoders(), parameters);\n } else {\n const groupElements = result.groupElements;\n Object.keys(groupElements).forEach(key => {\n this.evaluateEncodeProgressive(groupElements[key], this._getEncoders(), parameters);\n });\n }\n this.emit(HOOK_EVENT.AFTER_MARK_ENCODE);\n\n const progressiveTransforms = this._getTransformsAfterEncode()?.filter(entry => entry.canProgressive === true);\n\n if (progressiveTransforms?.length) {\n this.evaluateTransform(progressiveTransforms, this.elements, parameters);\n }\n\n this.renderContext.progressive.currentIndex += 1;\n }\n\n isLargeMode() {\n return this.renderContext && this.renderContext.large;\n }\n\n cleanExitElements() {\n this.elementMap.forEach((element, key) => {\n if (element.diffState === DiffState.exit && !element.isReserved) {\n this.elementMap.delete(key);\n element.remove();\n element.release();\n }\n });\n }\n\n getGroupGraphicItem() {\n if (this.elements && this.elements[0] && this.elements[0].getGraphicItem) {\n return this.elements[0].getGraphicItem();\n }\n }\n\n getBounds() {\n return (this.graphicItem ? this.graphicItem.AABBBounds : this.getGroupGraphicItem()?.AABBBounds) as IBounds;\n }\n\n getMorphConfig(): { morph: boolean; morphKey: string; morphElementKey: string } {\n return {\n morph: this.spec.morph ?? false,\n morphKey: this.spec.morphKey,\n morphElementKey: this.spec.morphElementKey\n };\n }\n\n getAttributeTransforms() {\n return this.spec.attributeTransforms ?? transformsByType[this.markType];\n }\n\n getContext() {\n return this._context;\n }\n\n protected needSkipBeforeLayout(): boolean {\n if ((this.spec.layout as MarkBaseLayoutSpec)?.skipBeforeLayouted === true) {\n return true;\n }\n let group = this.group;\n // if parent mark has been skipped, child marks should skip\n while (group) {\n if (group.getSpec().layout?.skipBeforeLayouted === true) {\n return true;\n }\n group = group.group;\n }\n return false;\n }\n\n private initEvent() {\n if (this._delegateEvent) {\n const stage = this.view.renderer.stage();\n stage && stage.on('*', this._delegateEvent);\n }\n }\n\n private releaseEvent() {\n if (this._delegateEvent) {\n const stage = this.view.renderer.stage();\n stage && stage.off('*', this._delegateEvent);\n }\n }\n\n clear() {\n this.releaseEvent();\n this.transforms = null;\n\n this.elementMap = null;\n this.elements = null;\n\n this.graphicItem = null;\n this.animate = null;\n\n this.group?.removeChild(this);\n this.group = null;\n super.clear();\n }\n\n prepareRelease() {\n this.animate.stop();\n this.elementMap.forEach(element => (element.diffState = DiffState.exit));\n this._finalParameters = this.parameters();\n }\n\n release() {\n this.releaseEvent();\n this.elements.forEach(element => element.release());\n this.elementMap.clear();\n this._finalParameters = null;\n\n if (this.animate) {\n this.animate.release();\n }\n\n if (this.graphicItem) {\n removeGraphicItem(this.graphicItem);\n }\n\n this.detachAll();\n\n super.release();\n }\n}\n"]}
|
package/es/graph/element.js
CHANGED
|
@@ -24,11 +24,11 @@ export class Element {
|
|
|
24
24
|
constructor(mark) {
|
|
25
25
|
this.data = null, this.states = [], this.diffState = DiffState.enter, this.isReserved = !1,
|
|
26
26
|
this.runtimeStatesEncoder = null, this.items = [], this.getStateAttrs = (stateName, nextStates) => {
|
|
27
|
-
var _a, _b, _c;
|
|
28
|
-
const isRuntimeState = !isNil(null === (_a = this.runtimeStatesEncoder) || void 0 === _a ? void 0 : _a[stateName]), encoder = isRuntimeState ? this.runtimeStatesEncoder[stateName] : null === (
|
|
27
|
+
var _a, _b, _c, _d;
|
|
28
|
+
const isRuntimeState = !isNil(null === (_a = this.runtimeStatesEncoder) || void 0 === _a ? void 0 : _a[stateName]), encoder = isRuntimeState ? Object.assign(Object.assign({}, null === (_b = this.mark.getSpec().encode) || void 0 === _b ? void 0 : _b[stateName]), this.runtimeStatesEncoder[stateName]) : null === (_c = this.mark.getSpec().encode) || void 0 === _c ? void 0 : _c[stateName];
|
|
29
29
|
if (!encoder) return {};
|
|
30
30
|
if (isFunction(encoder)) return encoder(this.getDatum(), this, stateName, nextStates);
|
|
31
|
-
if (!isRuntimeState && (null === (
|
|
31
|
+
if (!isRuntimeState && (null === (_d = this.graphicItem.states) || void 0 === _d ? void 0 : _d[stateName])) return this.graphicItem.states[stateName];
|
|
32
32
|
const stateItems = this.items.map((item => Object.assign({}, item, {
|
|
33
33
|
nextAttrs: {}
|
|
34
34
|
})));
|
package/es/graph/element.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/graph/element.ts"],"names":[],"mappings":"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","file":"element.js","sourcesContent":["import type { IBounds, IPointLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport {\n array,\n has,\n isBoolean,\n isNil,\n isFunction,\n isString,\n isArray,\n get,\n isEmpty,\n isEqual as isObjEqual,\n isObject\n} from '@visactor/vutils';\nimport { isEqual } from '@visactor/vgrammar-util';\nimport type { IBaseCoordinate } from '@visactor/vgrammar-coordinate';\nimport { BridgeElementKey } from './constants';\nimport { DiffState, HOOK_EVENT, GrammarMarkType, BuiltInEncodeNames } from './enums';\nimport { invokeEncoder, invokeEncoderToItems } from './mark/encode';\nimport { removeGraphicItem } from './util/graphic';\nimport { transformAttributes } from './attributes/transform';\nimport {\n getLargeRectsPoints,\n getLargeSymbolsPoints,\n getLinePoints,\n isValidPointsChannel,\n isPointsMarkType\n} from './attributes/helpers';\nimport {\n getLineSegmentConfigs,\n getLinePointsFromSegments,\n parseCollectionMarkAttributes,\n getConnectLineSegmentConfigs\n} from './attributes/line';\nimport type {\n BaseEncodeSpec,\n BaseSingleEncodeSpec,\n IElement,\n IMark,\n IMarkConfig,\n MarkElementItem,\n MarkFunctionType,\n MarkKeySpec,\n MarkSpec,\n MarkType,\n StateProxyEncodeSpec\n} from '../types';\nimport type { IGraphic, ILine, IGraphicAttribute } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { CustomPath2D } from '@visactor/vrender-core';\nimport { invokeFunctionType, parseField } from '../parse/util';\n\nexport class Element implements IElement {\n mark: IMark;\n\n key: string;\n groupKey?: string;\n data: any[] = null;\n\n states: string[] = [];\n\n diffState: DiffState = DiffState.enter;\n // Element should be reserved as long as it need to animate\n isReserved: boolean = false;\n\n runtimeStatesEncoder: BaseEncodeSpec = null;\n\n protected graphicItem: IGraphic;\n\n // hack before vRender refactoring\n items: MarkElementItem[] = [];\n\n constructor(mark: IMark) {\n this.mark = mark;\n }\n\n initGraphicItem(attributes: any = {}) {\n if (this.graphicItem) {\n return;\n }\n // 统一读取mark中是否可交互的配置\n const attrTransforms = this.mark.getAttributeTransforms();\n\n this.graphicItem = this.mark.addGraphicItem(\n attrTransforms ? transformAttributes(attrTransforms, attributes, this) : attributes,\n this.groupKey\n );\n\n if (!this.graphicItem) {\n return;\n }\n // 统一读取mark中是否可交互的配置\n this.graphicItem[BridgeElementKey] = this;\n if (attrTransforms) {\n this.graphicItem.onBeforeAttributeUpdate = (attributes: any) => {\n // mark might be released\n if (!this.mark) {\n return attributes;\n }\n const graphicAttributes = transformAttributes(attrTransforms, attributes, this);\n return graphicAttributes;\n };\n }\n\n // transform initial attributes\n this.clearGraphicAttributes();\n if (this.mark.needAnimate()) {\n this.setPrevGraphicAttributes(null);\n this.setNextGraphicAttributes(attributes);\n this.setFinalGraphicAttributes(attributes);\n }\n }\n\n updateGraphicItem() {\n if (!this.graphicItem) {\n return;\n }\n if (this.diffState === DiffState.exit) {\n (this.graphicItem as any).releaseStatus = 'willRelease';\n } else {\n (this.graphicItem as any).releaseStatus = undefined;\n }\n\n const stateAnimation = this.mark.animate.getAnimationConfigs('state');\n if (stateAnimation.length !== 0) {\n (this.graphicItem as any).stateAnimateConfig = stateAnimation[0].originConfig;\n }\n }\n\n getGraphicItem() {\n return this.graphicItem;\n }\n\n removeGraphicItem() {\n // stop all animation when releasing including normal animation & morphing animation\n if (this.graphicItem) {\n this.graphicItem.animates?.forEach?.(animate => animate.stop());\n }\n\n if (this.graphicItem) {\n removeGraphicItem(this.graphicItem);\n this.graphicItem[BridgeElementKey] = null;\n this.graphicItem = null;\n }\n }\n\n resetGraphicItem() {\n if (this.graphicItem) {\n this.graphicItem = null;\n }\n }\n\n getBounds() {\n // FIXME: 没有更新 bounds 时拿到的 bound 可能为 null\n return this.graphicItem?.AABBBounds as IBounds;\n }\n\n getStates() {\n return this.states;\n }\n\n updateData(groupKey: string | null, data: any[], key: MarkKeySpec) {\n this.mark.emit(HOOK_EVENT.BEFORE_ELEMENT_UPDATE_DATA, { groupKey, data, key }, this);\n this.data = data;\n const keyGetter = parseField(key);\n this.items = data.map(datum => {\n const key = keyGetter(datum);\n const item = {\n datum,\n key,\n view: this.mark.view,\n nextAttrs: {}\n };\n\n return item;\n });\n\n this.groupKey = groupKey;\n this.key = this.mark.isCollectionMark() ? groupKey : this.items?.[0].key;\n\n this.mark.emit(HOOK_EVENT.AFTER_ELEMENT_UPDATE_DATA, { groupKey, data, key }, this);\n return this.items;\n }\n\n state(markState: MarkFunctionType<string | string[]>, parameters?: any) {\n const isCollectionMark = this.mark.isCollectionMark();\n\n const prevStateValues = this.states;\n const newStateValues = array(invokeFunctionType(markState, parameters, this.getDatum(), this));\n const stateSort = this.mark.getSpec()?.stateSort;\n\n if (stateSort && newStateValues.length) {\n newStateValues.sort(stateSort);\n }\n\n const isStateChanged =\n newStateValues.length !== prevStateValues.length ||\n newStateValues.some((newState: string, index: number) => newState !== prevStateValues[index]);\n this.states = newStateValues;\n\n // early logic didn't handle collection mark, only update signal mark state for now\n if (!isCollectionMark && isStateChanged && this.diffState === DiffState.unChange) {\n this.diffState = DiffState.update;\n }\n }\n\n encodeGraphic(attrs?: any) {\n this.coordinateTransformEncode(this.items);\n\n const graphicAttributes = this.transformElementItems(this.items, this.mark.markType);\n\n if (attrs) {\n if (this.mark.isCollectionMark()) {\n // todo `defined` should not be a channel in line/area\n delete attrs.defined;\n }\n\n Object.assign(graphicAttributes, attrs);\n }\n\n if (!this.graphicItem) {\n this.initGraphicItem(graphicAttributes);\n } else {\n this.graphicItem.clearStates();\n // 更新数据流后,states计算不缓存\n this.graphicItem.states = {};\n this.graphicItem.stateProxy = null;\n\n this.applyGraphicAttributes(graphicAttributes);\n }\n\n if ((this.diffState === DiffState.enter || this.diffState === DiffState.update) && this.states.length) {\n this.useStates(this.states);\n }\n\n if (this.mark.markType === GrammarMarkType.shape) {\n // FIXME: shape需要拿到原始数据进行编码,暂时把数据绑定到graphicItem上,看后续graphicItem是否需要支持数据绑定\n (this.graphicItem as any).datum = this.items[0].datum;\n }\n\n // clear item attributes\n this.items.forEach(item => {\n item.nextAttrs = {};\n });\n this._setCustomizedShape();\n }\n\n private _setCustomizedShape() {\n if (!this.graphicItem) {\n return;\n }\n const setCustomizedShape = this.mark.getSpec()?.setCustomizedShape;\n\n if (!setCustomizedShape) {\n return;\n }\n\n this.graphicItem.pathProxy = (attrs: Partial<IGraphicAttribute>) => {\n return setCustomizedShape(this.data, attrs, new CustomPath2D());\n };\n }\n\n encodeItems(items: MarkElementItem[], encoders: BaseEncodeSpec, isReentered: boolean = false, parameters?: any) {\n const isCollectionMark = this.mark.isCollectionMark();\n // marshall encoder functions\n const updateEncoder = encoders[BuiltInEncodeNames.update];\n const enterEncoder = encoders[BuiltInEncodeNames.enter];\n const exitEncoder = encoders[BuiltInEncodeNames.exit];\n const onlyFullEncodeFirst = this.mark.isLargeMode() || (isCollectionMark && !this.mark.getSpec().enableSegments);\n\n if (this.diffState === DiffState.enter) {\n if (enterEncoder) {\n invokeEncoderToItems(this, items, enterEncoder, parameters, onlyFullEncodeFirst);\n }\n if (updateEncoder) {\n invokeEncoderToItems(this, items, updateEncoder, parameters, onlyFullEncodeFirst);\n }\n } else if (this.diffState === DiffState.update) {\n // if mark is reentered or mark is collection type, evaluate enter encode\n if ((isCollectionMark && enterEncoder) || isReentered) {\n invokeEncoderToItems(this, items, enterEncoder, parameters, onlyFullEncodeFirst);\n }\n if (updateEncoder) {\n invokeEncoderToItems(this, items, updateEncoder, parameters, onlyFullEncodeFirst);\n }\n } else if (this.diffState === DiffState.exit && exitEncoder) {\n // if mark is reentered, evaluate enter encode\n if (isReentered) {\n invokeEncoderToItems(this, items, enterEncoder, parameters, onlyFullEncodeFirst);\n }\n invokeEncoderToItems(this, items, exitEncoder, parameters, onlyFullEncodeFirst);\n }\n }\n\n protected coordinateTransformEncode(items: MarkElementItem[]) {\n if (!this.mark.coord || this.mark.markType === 'arc' || this.mark.disableCoordinateTransform === true) {\n return;\n }\n const coord = this.mark.coord.output() as IBaseCoordinate;\n\n items.forEach(item => {\n const nextAttrs = item.nextAttrs;\n const convertedPoint: IPointLike = coord.convert(nextAttrs);\n Object.assign(nextAttrs, convertedPoint);\n });\n }\n\n clearStates(hasAnimation?: boolean) {\n const stateAnimationEnable = isBoolean(hasAnimation)\n ? hasAnimation\n : this.mark.animate.getAnimationConfigs('state').length !== 0;\n\n this.states = [];\n\n if (this.graphicItem) {\n this.graphicItem.clearStates(stateAnimationEnable);\n }\n\n if (this.runtimeStatesEncoder) {\n this.runtimeStatesEncoder = {};\n }\n }\n\n private _updateRuntimeStates(state: string, attrs: any) {\n if (!this.runtimeStatesEncoder) {\n this.runtimeStatesEncoder = {};\n }\n\n this.runtimeStatesEncoder[state] = attrs;\n }\n\n hasState(state: string) {\n return this.states && state && this.states.includes(state);\n }\n\n updateStates(states: Record<string, boolean | BaseSingleEncodeSpec>) {\n if (!this.graphicItem) {\n return false;\n }\n let nextStates = this.states.slice();\n const encode = (this.mark.getSpec() as MarkSpec).encode;\n let forceClearState = false;\n let hasUpdate = false;\n\n Object.keys(states).forEach(stateKey => {\n if (!stateKey) {\n return;\n }\n\n const stateValue = states[stateKey];\n const isRuntimeStateUpdate =\n isObject(stateValue) && !isObjEqual(stateValue, this.runtimeStatesEncoder?.[stateKey]);\n\n if (isRuntimeStateUpdate) {\n if (nextStates.includes(stateKey)) {\n forceClearState = true;\n } else {\n nextStates.push(stateKey);\n }\n this._updateRuntimeStates(stateKey, stateValue);\n hasUpdate = true;\n } else if (stateValue) {\n if (!nextStates.includes(stateKey) && encode?.[stateKey]) {\n nextStates.push(stateKey);\n hasUpdate = true;\n }\n } else {\n if (nextStates.length) {\n const newNextStates = nextStates.filter(state => state !== stateKey);\n\n if (newNextStates.length !== nextStates.length) {\n hasUpdate = true;\n nextStates = newNextStates;\n }\n\n if (this.runtimeStatesEncoder && this.runtimeStatesEncoder[stateKey]) {\n this.runtimeStatesEncoder[stateKey] = null;\n }\n }\n }\n });\n\n if (forceClearState) {\n this.graphicItem.clearStates();\n }\n\n if (hasUpdate) {\n this.useStates(nextStates);\n return true;\n }\n\n return false;\n }\n\n addState(state: string | string[], attrs?: BaseSingleEncodeSpec) {\n if (!this.graphicItem) {\n return false;\n }\n\n const isRuntimeStateUpdate = attrs && isString(state) && !isObjEqual(attrs, this.runtimeStatesEncoder?.[state]);\n if (isRuntimeStateUpdate) {\n const nextStates = this.states.slice();\n if (!nextStates.includes(state)) {\n nextStates.push(state);\n } else {\n this.graphicItem.clearStates();\n }\n this._updateRuntimeStates(state, attrs);\n\n this.useStates(nextStates);\n return true;\n }\n\n const encode = (this.mark.getSpec() as MarkSpec).encode;\n const states = array(state);\n const nextStates = states.reduce((nextStates: string[], stateName: string) => {\n if (stateName && !nextStates.includes(stateName) && encode?.[stateName]) {\n nextStates.push(stateName);\n }\n return nextStates;\n }, this.states.slice());\n\n if (nextStates.length !== this.states.length) {\n this.useStates(nextStates);\n\n return true;\n }\n\n return false;\n }\n\n removeState(state: string | string[]) {\n if (!this.graphicItem) {\n return false;\n }\n\n const states = array(state);\n\n if (!states.length) {\n return false;\n }\n\n const nextStates = this.states.filter(state => !states.includes(state));\n if (nextStates.length === this.states.length) {\n return false;\n }\n\n if (this.runtimeStatesEncoder) {\n states.forEach(state => {\n this.runtimeStatesEncoder[state] = null;\n });\n }\n this.useStates(nextStates);\n\n return true;\n }\n\n protected getStateAttrs = (stateName: string, nextStates: string[]) => {\n const isRuntimeState = !isNil(this.runtimeStatesEncoder?.[stateName]);\n const encoder = isRuntimeState\n ? this.runtimeStatesEncoder[stateName]\n : (this.mark.getSpec() as MarkSpec).encode?.[stateName];\n\n if (!encoder) {\n return {};\n }\n\n if (isFunction(encoder)) {\n return (encoder as StateProxyEncodeSpec)(this.getDatum(), this, stateName, nextStates);\n }\n\n if (!isRuntimeState && this.graphicItem.states?.[stateName]) {\n return this.graphicItem.states[stateName];\n }\n\n const stateItems = this.items.map(item => Object.assign({}, item, { nextAttrs: {} }));\n // collection图元,暂时不支持在state更新中,支持更新points更新\n invokeEncoderToItems(this, stateItems, encoder, (this.mark as any).parameters());\n\n const graphicAttributes = this.transformElementItems(stateItems, this.mark.markType);\n\n if (!this.graphicItem.states) {\n this.graphicItem.states = { [stateName]: graphicAttributes };\n } else if (!this.graphicItem.states[stateName]) {\n this.graphicItem.states[stateName] = graphicAttributes;\n }\n\n return graphicAttributes;\n };\n\n useStates(states: string[], hasAnimation?: boolean) {\n if (!this.graphicItem) {\n return false;\n }\n this.mark.emit(HOOK_EVENT.BEFORE_ELEMENT_STATE, { states }, this);\n\n const stateSort = this.mark.getSpec()?.stateSort;\n\n if (stateSort) {\n states.sort(stateSort);\n }\n this.states = states;\n\n const stateAnimationEnable = isBoolean(hasAnimation)\n ? hasAnimation\n : this.mark.animate.getAnimationConfigs('state').length !== 0;\n\n this.graphicItem.stateProxy = this.getStateAttrs;\n this.graphicItem.useStates(this.states, stateAnimationEnable);\n\n this.mark.emit(HOOK_EVENT.AFTER_ELEMENT_STATE, { states }, this);\n\n return true;\n }\n\n protected diffAttributes(graphicAttributes: { [channel: string]: any }) {\n const diffResult = {};\n const finalGraphicAttributes = this.getFinalGraphicAttributes();\n for (const key in graphicAttributes) {\n if (!isEqual(key, finalGraphicAttributes, graphicAttributes) || !has(finalGraphicAttributes, key)) {\n diffResult[key] = graphicAttributes[key];\n }\n }\n return diffResult;\n }\n\n /**\n * tranform the attribute to graphic attribute\n * @param items\n * @param markType In ordinary, markType is equal to mark.markType, but in glyph, markType is different from mark.markType\n * @param markName\n * @param computePoints\n * @returns\n */\n transformElementItems(items: MarkElementItem[], markType: MarkType, computePoints?: boolean): Record<string, any> {\n const item = items[0];\n\n if (!item.nextAttrs || Object.keys(item.nextAttrs).length === 0) {\n return {};\n }\n\n let nextAttrs = item.nextAttrs;\n\n if (\n isPointsMarkType(markType) &&\n items &&\n items.length &&\n isNil(item.nextAttrs?.points) &&\n (computePoints === true || isValidPointsChannel(Object.keys(item.nextAttrs), this.mark.markType))\n ) {\n const markSpec = this.mark.getSpec();\n const lastPoints = this.getGraphicAttribute('points', false);\n const lastSegments = this.getGraphicAttribute('segments', false);\n const enableSegments = markSpec.enableSegments;\n const connectNullsEncoder = (this.mark.getSpec() as MarkSpec).encode?.[BuiltInEncodeNames.connectNulls];\n const itemNextAttrs = items.map(item => item.nextAttrs);\n const isProgressive = this.mark.isProgressive();\n nextAttrs = parseCollectionMarkAttributes(nextAttrs);\n\n if (markType === GrammarMarkType.line || markType === GrammarMarkType.area) {\n const linePoints = getLinePoints(items, true, lastPoints, markType === GrammarMarkType.area);\n\n // vchart新增了配置,用于开启线段解析;渐进渲染状态不支持线段样式;也不支持连接线\n if (isProgressive) {\n nextAttrs.segments = ((this.graphicItem as ILine)?.attribute?.segments ?? []).concat([\n { points: linePoints }\n ]);\n } else if (connectNullsEncoder) {\n nextAttrs.segments = getConnectLineSegmentConfigs(itemNextAttrs, linePoints, this);\n\n if (nextAttrs.segments && nextAttrs.segments.some((seg: any) => seg.isConnect)) {\n const connectStyle = invokeEncoder(connectNullsEncoder, this.getDatum(), this, this.mark.parameters());\n\n connectStyle &&\n nextAttrs.segments.forEach((seg: any) => {\n if (seg.isConnect) {\n Object.assign(seg, connectStyle);\n }\n });\n }\n // when connectNulls, points need to be saved\n nextAttrs.points = linePoints;\n } else if (enableSegments) {\n const points = !linePoints || linePoints.length === 0 ? getLinePointsFromSegments(lastSegments) : linePoints;\n const segments = getLineSegmentConfigs(itemNextAttrs, points, this);\n\n if (segments) {\n nextAttrs.segments = segments;\n nextAttrs.points = null;\n } else {\n nextAttrs.segments = null;\n nextAttrs.points = points;\n }\n } else {\n nextAttrs.points = linePoints;\n nextAttrs.segments = null;\n }\n } else if (markType === GrammarMarkType.largeRects) {\n nextAttrs.points = getLargeRectsPoints(items, true, lastPoints);\n } else if (markType === GrammarMarkType.largeSymbols) {\n nextAttrs.points = getLargeSymbolsPoints(items, true, lastPoints);\n }\n }\n\n return nextAttrs;\n }\n\n protected applyGraphicAttributes(graphicAttributes: any) {\n if (isEmpty(graphicAttributes)) {\n return;\n }\n\n if (this.mark.needAnimate()) {\n // If mark need animate, diff attributes.\n const nextGraphicAttributes = this.diffAttributes(graphicAttributes);\n const prevGraphicAttributes = this.getPrevGraphicAttributes() ?? {};\n const finalGraphicAttributes = this.getFinalGraphicAttributes() ?? {};\n\n Object.keys(nextGraphicAttributes).forEach(channel => {\n prevGraphicAttributes[channel] = this.getGraphicAttribute(channel);\n finalGraphicAttributes[channel] = nextGraphicAttributes[channel];\n });\n this.setNextGraphicAttributes(nextGraphicAttributes);\n this.setPrevGraphicAttributes(prevGraphicAttributes);\n this.setFinalGraphicAttributes(finalGraphicAttributes);\n\n const currentAnimators = this.mark.animate.getElementAnimators(this);\n const animateGraphicAttributes = currentAnimators.reduce((attributes, animator) => {\n return Object.assign(attributes, animator.getEndAttributes());\n }, {});\n const currentGraphicAttributes = Object.assign({}, animateGraphicAttributes, finalGraphicAttributes);\n\n // Apply next attributes to current graphic item immediately.\n // Scene graph tree should be handled like no animation exists in dataflow procedure.\n this.graphicItem.setAttributes(currentGraphicAttributes);\n } else {\n // Otherwise, directly apply all attributes.\n this.graphicItem.setAttributes(graphicAttributes);\n }\n }\n\n getGraphicAttribute(channel: string, prev: boolean = false) {\n if (!this.graphicItem) {\n return undefined;\n }\n\n if (prev) {\n let value: any;\n const prevGraphicAttributes = this.getPrevGraphicAttributes();\n if (!isNil((value = get(prevGraphicAttributes, channel)))) {\n return value;\n }\n }\n\n // get attribute before transformed\n const trans = this.mark.getAttributeTransforms();\n let getKey: string[] = [channel];\n if (trans && trans.length) {\n const channelTransform = trans.find(entry => {\n return entry.storedAttrs && entry.channels.includes(channel);\n });\n\n if (channelTransform) {\n getKey = [channelTransform.storedAttrs, channel];\n }\n }\n return get(this.graphicItem?.attribute, getKey);\n }\n\n setGraphicAttribute(channel: string, value: any, final: boolean = true) {\n if (!this.graphicItem) {\n return;\n }\n const finalGraphicAttributes = this.getFinalGraphicAttributes();\n const prevGraphicAttributes = this.getPrevGraphicAttributes();\n\n if (final && finalGraphicAttributes) {\n finalGraphicAttributes[channel] = value;\n }\n if (prevGraphicAttributes && !has(prevGraphicAttributes, channel)) {\n prevGraphicAttributes[channel] = this.graphicItem.attribute[channel];\n }\n\n this.graphicItem.setAttribute(channel, value);\n }\n\n setGraphicAttributes(attributes: { [channel: string]: any }, final: boolean = true) {\n if (!this.graphicItem) {\n return;\n }\n const finalGraphicAttributes = this.getFinalGraphicAttributes();\n const prevGraphicAttributes = this.getPrevGraphicAttributes();\n\n Object.keys(attributes).forEach(key => {\n if (finalGraphicAttributes && final) {\n finalGraphicAttributes[key] = attributes[key];\n }\n if (prevGraphicAttributes && !has(prevGraphicAttributes, key)) {\n prevGraphicAttributes[key] = this.graphicItem.attribute[key];\n }\n });\n\n this.graphicItem.setAttributes(attributes);\n }\n\n /**\n * 获取 vRender 已变更的视觉通道属性,只应当由 VGrammar 中 调用\n * @returns 视觉通道键值对\n */\n getFinalGraphicAttributes() {\n return (this.graphicItem as any).finalAttrs;\n }\n\n protected setFinalGraphicAttributes(attributes: { [channel: string]: any }) {\n (this.graphicItem as any).finalAttrs = attributes;\n }\n\n /**\n * 获取 vRender 变更前的视觉通道属性,只应当由 VGrammar 调用\n * @returns 视觉通道键值对\n */\n getPrevGraphicAttributes() {\n return (this.graphicItem as any).prevAttrs;\n }\n\n protected setPrevGraphicAttributes(attributes: { [channel: string]: any }) {\n (this.graphicItem as any).prevAttrs = attributes;\n }\n\n /**\n * 获取 vRender 在单次 dataflow 中变更的视觉通道属性,只应当由 VGrammar 调用\n * @returns 视觉通道键值对\n */\n getNextGraphicAttributes() {\n return (this.graphicItem as any).nextAttrs;\n }\n\n protected setNextGraphicAttributes(attributes: { [channel: string]: any }) {\n (this.graphicItem as any).nextAttrs = attributes;\n }\n\n clearChangedGraphicAttributes() {\n if (this.graphicItem) {\n this.setPrevGraphicAttributes(null);\n this.setNextGraphicAttributes(null);\n }\n }\n\n clearGraphicAttributes() {\n if (this.graphicItem) {\n (this.graphicItem as any).prevAttrs && this.setPrevGraphicAttributes(null);\n (this.graphicItem as any).nextAttrs && this.setNextGraphicAttributes(null);\n (this.graphicItem as any).finalAttrs && this.setFinalGraphicAttributes(null);\n }\n }\n\n remove() {\n if (this.graphicItem) {\n removeGraphicItem(this.graphicItem);\n this.graphicItem = null;\n }\n }\n\n release() {\n this.removeGraphicItem();\n this.mark = null;\n this.data = null;\n this.items = null;\n }\n /**\n * hack support for transform & encode logic. DO NOT USE.\n */\n getItemAttribute(channel?: string) {\n if (!this.items?.length) {\n return;\n }\n\n if (this.mark.isCollectionMark()) {\n return isNil(channel)\n ? this.items.map(item => item.nextAttrs)\n : this.items.map(item => item.nextAttrs?.[channel]);\n }\n\n return isNil(channel) ? this.items[0].nextAttrs : this.items[0].nextAttrs?.[channel];\n }\n setItemAttributes(attributes: { [channel: string]: any } | any[]) {\n if (!this.items?.length) {\n return;\n }\n\n if (this.mark.isCollectionMark()) {\n if (isArray(attributes)) {\n this.items.forEach((item, index) => {\n Object.assign(item.nextAttrs, attributes[index]);\n });\n }\n } else {\n Object.assign(this.items[0].nextAttrs, attributes);\n }\n }\n /**\n * hack support for transform & encode logic. DO NOT USE.\n */\n getItem() {\n return this.mark && this.mark.isCollectionMark() ? this.items ?? [] : this.items?.[0];\n }\n getDatum() {\n return this.mark && this.mark.isCollectionMark() ? this.data ?? [] : this.data?.[0];\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/graph/element.ts"],"names":[],"mappings":"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","file":"element.js","sourcesContent":["import type { IBounds, IPointLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport {\n array,\n has,\n isBoolean,\n isNil,\n isFunction,\n isString,\n isArray,\n get,\n isEmpty,\n isEqual as isObjEqual,\n isObject\n} from '@visactor/vutils';\nimport { isEqual } from '@visactor/vgrammar-util';\nimport type { IBaseCoordinate } from '@visactor/vgrammar-coordinate';\nimport { BridgeElementKey } from './constants';\nimport { DiffState, HOOK_EVENT, GrammarMarkType, BuiltInEncodeNames } from './enums';\nimport { invokeEncoder, invokeEncoderToItems } from './mark/encode';\nimport { removeGraphicItem } from './util/graphic';\nimport { transformAttributes } from './attributes/transform';\nimport {\n getLargeRectsPoints,\n getLargeSymbolsPoints,\n getLinePoints,\n isValidPointsChannel,\n isPointsMarkType\n} from './attributes/helpers';\nimport {\n getLineSegmentConfigs,\n getLinePointsFromSegments,\n parseCollectionMarkAttributes,\n getConnectLineSegmentConfigs\n} from './attributes/line';\nimport type {\n BaseEncodeSpec,\n BaseSingleEncodeSpec,\n IElement,\n IMark,\n IMarkConfig,\n MarkElementItem,\n MarkFunctionType,\n MarkKeySpec,\n MarkSpec,\n MarkType,\n StateProxyEncodeSpec\n} from '../types';\nimport type { IGraphic, ILine, IGraphicAttribute } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { CustomPath2D } from '@visactor/vrender-core';\nimport { invokeFunctionType, parseField } from '../parse/util';\n\nexport class Element implements IElement {\n mark: IMark;\n\n key: string;\n groupKey?: string;\n data: any[] = null;\n\n states: string[] = [];\n\n diffState: DiffState = DiffState.enter;\n // Element should be reserved as long as it need to animate\n isReserved: boolean = false;\n\n runtimeStatesEncoder: BaseEncodeSpec = null;\n\n protected graphicItem: IGraphic;\n\n // hack before vRender refactoring\n items: MarkElementItem[] = [];\n\n constructor(mark: IMark) {\n this.mark = mark;\n }\n\n initGraphicItem(attributes: any = {}) {\n if (this.graphicItem) {\n return;\n }\n // 统一读取mark中是否可交互的配置\n const attrTransforms = this.mark.getAttributeTransforms();\n\n this.graphicItem = this.mark.addGraphicItem(\n attrTransforms ? transformAttributes(attrTransforms, attributes, this) : attributes,\n this.groupKey\n );\n\n if (!this.graphicItem) {\n return;\n }\n // 统一读取mark中是否可交互的配置\n this.graphicItem[BridgeElementKey] = this;\n if (attrTransforms) {\n this.graphicItem.onBeforeAttributeUpdate = (attributes: any) => {\n // mark might be released\n if (!this.mark) {\n return attributes;\n }\n const graphicAttributes = transformAttributes(attrTransforms, attributes, this);\n return graphicAttributes;\n };\n }\n\n // transform initial attributes\n this.clearGraphicAttributes();\n if (this.mark.needAnimate()) {\n this.setPrevGraphicAttributes(null);\n this.setNextGraphicAttributes(attributes);\n this.setFinalGraphicAttributes(attributes);\n }\n }\n\n updateGraphicItem() {\n if (!this.graphicItem) {\n return;\n }\n if (this.diffState === DiffState.exit) {\n (this.graphicItem as any).releaseStatus = 'willRelease';\n } else {\n (this.graphicItem as any).releaseStatus = undefined;\n }\n\n const stateAnimation = this.mark.animate.getAnimationConfigs('state');\n if (stateAnimation.length !== 0) {\n (this.graphicItem as any).stateAnimateConfig = stateAnimation[0].originConfig;\n }\n }\n\n getGraphicItem() {\n return this.graphicItem;\n }\n\n removeGraphicItem() {\n // stop all animation when releasing including normal animation & morphing animation\n if (this.graphicItem) {\n this.graphicItem.animates?.forEach?.(animate => animate.stop());\n }\n\n if (this.graphicItem) {\n removeGraphicItem(this.graphicItem);\n this.graphicItem[BridgeElementKey] = null;\n this.graphicItem = null;\n }\n }\n\n resetGraphicItem() {\n if (this.graphicItem) {\n this.graphicItem = null;\n }\n }\n\n getBounds() {\n // FIXME: 没有更新 bounds 时拿到的 bound 可能为 null\n return this.graphicItem?.AABBBounds as IBounds;\n }\n\n getStates() {\n return this.states;\n }\n\n updateData(groupKey: string | null, data: any[], key: MarkKeySpec) {\n this.mark.emit(HOOK_EVENT.BEFORE_ELEMENT_UPDATE_DATA, { groupKey, data, key }, this);\n this.data = data;\n const keyGetter = parseField(key);\n this.items = data.map(datum => {\n const key = keyGetter(datum);\n const item = {\n datum,\n key,\n view: this.mark.view,\n nextAttrs: {}\n };\n\n return item;\n });\n\n this.groupKey = groupKey;\n this.key = this.mark.isCollectionMark() ? groupKey : this.items?.[0].key;\n\n this.mark.emit(HOOK_EVENT.AFTER_ELEMENT_UPDATE_DATA, { groupKey, data, key }, this);\n return this.items;\n }\n\n state(markState: MarkFunctionType<string | string[]>, parameters?: any) {\n const isCollectionMark = this.mark.isCollectionMark();\n\n const prevStateValues = this.states;\n const newStateValues = array(invokeFunctionType(markState, parameters, this.getDatum(), this));\n const stateSort = this.mark.getSpec()?.stateSort;\n\n if (stateSort && newStateValues.length) {\n newStateValues.sort(stateSort);\n }\n\n const isStateChanged =\n newStateValues.length !== prevStateValues.length ||\n newStateValues.some((newState: string, index: number) => newState !== prevStateValues[index]);\n this.states = newStateValues;\n\n // early logic didn't handle collection mark, only update signal mark state for now\n if (!isCollectionMark && isStateChanged && this.diffState === DiffState.unChange) {\n this.diffState = DiffState.update;\n }\n }\n\n encodeGraphic(attrs?: any) {\n this.coordinateTransformEncode(this.items);\n\n const graphicAttributes = this.transformElementItems(this.items, this.mark.markType);\n\n if (attrs) {\n if (this.mark.isCollectionMark()) {\n // todo `defined` should not be a channel in line/area\n delete attrs.defined;\n }\n\n Object.assign(graphicAttributes, attrs);\n }\n\n if (!this.graphicItem) {\n this.initGraphicItem(graphicAttributes);\n } else {\n this.graphicItem.clearStates();\n // 更新数据流后,states计算不缓存\n this.graphicItem.states = {};\n this.graphicItem.stateProxy = null;\n\n this.applyGraphicAttributes(graphicAttributes);\n }\n\n if ((this.diffState === DiffState.enter || this.diffState === DiffState.update) && this.states.length) {\n this.useStates(this.states);\n }\n\n if (this.mark.markType === GrammarMarkType.shape) {\n // FIXME: shape需要拿到原始数据进行编码,暂时把数据绑定到graphicItem上,看后续graphicItem是否需要支持数据绑定\n (this.graphicItem as any).datum = this.items[0].datum;\n }\n\n // clear item attributes\n this.items.forEach(item => {\n item.nextAttrs = {};\n });\n this._setCustomizedShape();\n }\n\n private _setCustomizedShape() {\n if (!this.graphicItem) {\n return;\n }\n const setCustomizedShape = this.mark.getSpec()?.setCustomizedShape;\n\n if (!setCustomizedShape) {\n return;\n }\n\n this.graphicItem.pathProxy = (attrs: Partial<IGraphicAttribute>) => {\n return setCustomizedShape(this.data, attrs, new CustomPath2D());\n };\n }\n\n encodeItems(items: MarkElementItem[], encoders: BaseEncodeSpec, isReentered: boolean = false, parameters?: any) {\n const isCollectionMark = this.mark.isCollectionMark();\n // marshall encoder functions\n const updateEncoder = encoders[BuiltInEncodeNames.update];\n const enterEncoder = encoders[BuiltInEncodeNames.enter];\n const exitEncoder = encoders[BuiltInEncodeNames.exit];\n const onlyFullEncodeFirst = this.mark.isLargeMode() || (isCollectionMark && !this.mark.getSpec().enableSegments);\n\n if (this.diffState === DiffState.enter) {\n if (enterEncoder) {\n invokeEncoderToItems(this, items, enterEncoder, parameters, onlyFullEncodeFirst);\n }\n if (updateEncoder) {\n invokeEncoderToItems(this, items, updateEncoder, parameters, onlyFullEncodeFirst);\n }\n } else if (this.diffState === DiffState.update) {\n // if mark is reentered or mark is collection type, evaluate enter encode\n if ((isCollectionMark && enterEncoder) || isReentered) {\n invokeEncoderToItems(this, items, enterEncoder, parameters, onlyFullEncodeFirst);\n }\n if (updateEncoder) {\n invokeEncoderToItems(this, items, updateEncoder, parameters, onlyFullEncodeFirst);\n }\n } else if (this.diffState === DiffState.exit && exitEncoder) {\n // if mark is reentered, evaluate enter encode\n if (isReentered) {\n invokeEncoderToItems(this, items, enterEncoder, parameters, onlyFullEncodeFirst);\n }\n invokeEncoderToItems(this, items, exitEncoder, parameters, onlyFullEncodeFirst);\n }\n }\n\n protected coordinateTransformEncode(items: MarkElementItem[]) {\n if (!this.mark.coord || this.mark.markType === 'arc' || this.mark.disableCoordinateTransform === true) {\n return;\n }\n const coord = this.mark.coord.output() as IBaseCoordinate;\n\n items.forEach(item => {\n const nextAttrs = item.nextAttrs;\n const convertedPoint: IPointLike = coord.convert(nextAttrs);\n Object.assign(nextAttrs, convertedPoint);\n });\n }\n\n clearStates(hasAnimation?: boolean) {\n const stateAnimationEnable = isBoolean(hasAnimation)\n ? hasAnimation\n : this.mark.animate.getAnimationConfigs('state').length !== 0;\n\n this.states = [];\n\n if (this.graphicItem) {\n this.graphicItem.clearStates(stateAnimationEnable);\n }\n\n if (this.runtimeStatesEncoder) {\n this.runtimeStatesEncoder = {};\n }\n }\n\n private _updateRuntimeStates(state: string, attrs: any) {\n if (!this.runtimeStatesEncoder) {\n this.runtimeStatesEncoder = {};\n }\n\n this.runtimeStatesEncoder[state] = attrs;\n }\n\n hasState(state: string) {\n return this.states && state && this.states.includes(state);\n }\n\n updateStates(states: Record<string, boolean | BaseSingleEncodeSpec>) {\n if (!this.graphicItem) {\n return false;\n }\n let nextStates = this.states.slice();\n const encode = (this.mark.getSpec() as MarkSpec).encode;\n let forceClearState = false;\n let hasUpdate = false;\n\n Object.keys(states).forEach(stateKey => {\n if (!stateKey) {\n return;\n }\n\n const stateValue = states[stateKey];\n const isRuntimeStateUpdate =\n isObject(stateValue) && !isObjEqual(stateValue, this.runtimeStatesEncoder?.[stateKey]);\n\n if (isRuntimeStateUpdate) {\n if (nextStates.includes(stateKey)) {\n forceClearState = true;\n } else {\n nextStates.push(stateKey);\n }\n this._updateRuntimeStates(stateKey, stateValue);\n hasUpdate = true;\n } else if (stateValue) {\n if (!nextStates.includes(stateKey) && encode?.[stateKey]) {\n nextStates.push(stateKey);\n hasUpdate = true;\n }\n } else {\n if (nextStates.length) {\n const newNextStates = nextStates.filter(state => state !== stateKey);\n\n if (newNextStates.length !== nextStates.length) {\n hasUpdate = true;\n nextStates = newNextStates;\n }\n\n if (this.runtimeStatesEncoder && this.runtimeStatesEncoder[stateKey]) {\n this.runtimeStatesEncoder[stateKey] = null;\n }\n }\n }\n });\n\n if (forceClearState) {\n this.graphicItem.clearStates();\n }\n\n if (hasUpdate) {\n this.useStates(nextStates);\n return true;\n }\n\n return false;\n }\n\n addState(state: string | string[], attrs?: BaseSingleEncodeSpec) {\n if (!this.graphicItem) {\n return false;\n }\n\n const isRuntimeStateUpdate = attrs && isString(state) && !isObjEqual(attrs, this.runtimeStatesEncoder?.[state]);\n if (isRuntimeStateUpdate) {\n const nextStates = this.states.slice();\n if (!nextStates.includes(state)) {\n nextStates.push(state);\n } else {\n this.graphicItem.clearStates();\n }\n this._updateRuntimeStates(state, attrs);\n\n this.useStates(nextStates);\n return true;\n }\n\n const encode = (this.mark.getSpec() as MarkSpec).encode;\n const states = array(state);\n const nextStates = states.reduce((nextStates: string[], stateName: string) => {\n if (stateName && !nextStates.includes(stateName) && encode?.[stateName]) {\n nextStates.push(stateName);\n }\n return nextStates;\n }, this.states.slice());\n\n if (nextStates.length !== this.states.length) {\n this.useStates(nextStates);\n\n return true;\n }\n\n return false;\n }\n\n removeState(state: string | string[]) {\n if (!this.graphicItem) {\n return false;\n }\n\n const states = array(state);\n\n if (!states.length) {\n return false;\n }\n\n const nextStates = this.states.filter(state => !states.includes(state));\n if (nextStates.length === this.states.length) {\n return false;\n }\n\n if (this.runtimeStatesEncoder) {\n states.forEach(state => {\n this.runtimeStatesEncoder[state] = null;\n });\n }\n this.useStates(nextStates);\n\n return true;\n }\n\n protected getStateAttrs = (stateName: string, nextStates: string[]) => {\n const isRuntimeState = !isNil(this.runtimeStatesEncoder?.[stateName]);\n const encoder = isRuntimeState\n ? {\n ...(this.mark.getSpec() as MarkSpec).encode?.[stateName],\n ...this.runtimeStatesEncoder[stateName]\n }\n : (this.mark.getSpec() as MarkSpec).encode?.[stateName];\n\n if (!encoder) {\n return {};\n }\n\n if (isFunction(encoder)) {\n return (encoder as StateProxyEncodeSpec)(this.getDatum(), this, stateName, nextStates);\n }\n\n if (!isRuntimeState && this.graphicItem.states?.[stateName]) {\n return this.graphicItem.states[stateName];\n }\n\n const stateItems = this.items.map(item => Object.assign({}, item, { nextAttrs: {} }));\n // collection图元,暂时不支持在state更新中,支持更新points更新\n invokeEncoderToItems(this, stateItems, encoder, (this.mark as any).parameters());\n\n const graphicAttributes = this.transformElementItems(stateItems, this.mark.markType);\n\n if (!this.graphicItem.states) {\n this.graphicItem.states = { [stateName]: graphicAttributes };\n } else if (!this.graphicItem.states[stateName]) {\n this.graphicItem.states[stateName] = graphicAttributes;\n }\n\n return graphicAttributes;\n };\n\n useStates(states: string[], hasAnimation?: boolean) {\n if (!this.graphicItem) {\n return false;\n }\n this.mark.emit(HOOK_EVENT.BEFORE_ELEMENT_STATE, { states }, this);\n\n const stateSort = this.mark.getSpec()?.stateSort;\n\n if (stateSort) {\n states.sort(stateSort);\n }\n this.states = states;\n\n const stateAnimationEnable = isBoolean(hasAnimation)\n ? hasAnimation\n : this.mark.animate.getAnimationConfigs('state').length !== 0;\n\n this.graphicItem.stateProxy = this.getStateAttrs;\n this.graphicItem.useStates(this.states, stateAnimationEnable);\n\n this.mark.emit(HOOK_EVENT.AFTER_ELEMENT_STATE, { states }, this);\n\n return true;\n }\n\n protected diffAttributes(graphicAttributes: { [channel: string]: any }) {\n const diffResult = {};\n const finalGraphicAttributes = this.getFinalGraphicAttributes();\n for (const key in graphicAttributes) {\n if (!isEqual(key, finalGraphicAttributes, graphicAttributes) || !has(finalGraphicAttributes, key)) {\n diffResult[key] = graphicAttributes[key];\n }\n }\n return diffResult;\n }\n\n /**\n * tranform the attribute to graphic attribute\n * @param items\n * @param markType In ordinary, markType is equal to mark.markType, but in glyph, markType is different from mark.markType\n * @param markName\n * @param computePoints\n * @returns\n */\n transformElementItems(items: MarkElementItem[], markType: MarkType, computePoints?: boolean): Record<string, any> {\n const item = items[0];\n\n if (!item.nextAttrs || Object.keys(item.nextAttrs).length === 0) {\n return {};\n }\n\n let nextAttrs = item.nextAttrs;\n\n if (\n isPointsMarkType(markType) &&\n items &&\n items.length &&\n isNil(item.nextAttrs?.points) &&\n (computePoints === true || isValidPointsChannel(Object.keys(item.nextAttrs), this.mark.markType))\n ) {\n const markSpec = this.mark.getSpec();\n const lastPoints = this.getGraphicAttribute('points', false);\n const lastSegments = this.getGraphicAttribute('segments', false);\n const enableSegments = markSpec.enableSegments;\n const connectNullsEncoder = (this.mark.getSpec() as MarkSpec).encode?.[BuiltInEncodeNames.connectNulls];\n const itemNextAttrs = items.map(item => item.nextAttrs);\n const isProgressive = this.mark.isProgressive();\n nextAttrs = parseCollectionMarkAttributes(nextAttrs);\n\n if (markType === GrammarMarkType.line || markType === GrammarMarkType.area) {\n const linePoints = getLinePoints(items, true, lastPoints, markType === GrammarMarkType.area);\n\n // vchart新增了配置,用于开启线段解析;渐进渲染状态不支持线段样式;也不支持连接线\n if (isProgressive) {\n nextAttrs.segments = ((this.graphicItem as ILine)?.attribute?.segments ?? []).concat([\n { points: linePoints }\n ]);\n } else if (connectNullsEncoder) {\n nextAttrs.segments = getConnectLineSegmentConfigs(itemNextAttrs, linePoints, this);\n\n if (nextAttrs.segments && nextAttrs.segments.some((seg: any) => seg.isConnect)) {\n const connectStyle = invokeEncoder(connectNullsEncoder, this.getDatum(), this, this.mark.parameters());\n\n connectStyle &&\n nextAttrs.segments.forEach((seg: any) => {\n if (seg.isConnect) {\n Object.assign(seg, connectStyle);\n }\n });\n }\n // when connectNulls, points need to be saved\n nextAttrs.points = linePoints;\n } else if (enableSegments) {\n const points = !linePoints || linePoints.length === 0 ? getLinePointsFromSegments(lastSegments) : linePoints;\n const segments = getLineSegmentConfigs(itemNextAttrs, points, this);\n\n if (segments) {\n nextAttrs.segments = segments;\n nextAttrs.points = null;\n } else {\n nextAttrs.segments = null;\n nextAttrs.points = points;\n }\n } else {\n nextAttrs.points = linePoints;\n nextAttrs.segments = null;\n }\n } else if (markType === GrammarMarkType.largeRects) {\n nextAttrs.points = getLargeRectsPoints(items, true, lastPoints);\n } else if (markType === GrammarMarkType.largeSymbols) {\n nextAttrs.points = getLargeSymbolsPoints(items, true, lastPoints);\n }\n }\n\n return nextAttrs;\n }\n\n protected applyGraphicAttributes(graphicAttributes: any) {\n if (isEmpty(graphicAttributes)) {\n return;\n }\n\n if (this.mark.needAnimate()) {\n // If mark need animate, diff attributes.\n const nextGraphicAttributes = this.diffAttributes(graphicAttributes);\n const prevGraphicAttributes = this.getPrevGraphicAttributes() ?? {};\n const finalGraphicAttributes = this.getFinalGraphicAttributes() ?? {};\n\n Object.keys(nextGraphicAttributes).forEach(channel => {\n prevGraphicAttributes[channel] = this.getGraphicAttribute(channel);\n finalGraphicAttributes[channel] = nextGraphicAttributes[channel];\n });\n this.setNextGraphicAttributes(nextGraphicAttributes);\n this.setPrevGraphicAttributes(prevGraphicAttributes);\n this.setFinalGraphicAttributes(finalGraphicAttributes);\n\n const currentAnimators = this.mark.animate.getElementAnimators(this);\n const animateGraphicAttributes = currentAnimators.reduce((attributes, animator) => {\n return Object.assign(attributes, animator.getEndAttributes());\n }, {});\n const currentGraphicAttributes = Object.assign({}, animateGraphicAttributes, finalGraphicAttributes);\n\n // Apply next attributes to current graphic item immediately.\n // Scene graph tree should be handled like no animation exists in dataflow procedure.\n this.graphicItem.setAttributes(currentGraphicAttributes);\n } else {\n // Otherwise, directly apply all attributes.\n this.graphicItem.setAttributes(graphicAttributes);\n }\n }\n\n getGraphicAttribute(channel: string, prev: boolean = false) {\n if (!this.graphicItem) {\n return undefined;\n }\n\n if (prev) {\n let value: any;\n const prevGraphicAttributes = this.getPrevGraphicAttributes();\n if (!isNil((value = get(prevGraphicAttributes, channel)))) {\n return value;\n }\n }\n\n // get attribute before transformed\n const trans = this.mark.getAttributeTransforms();\n let getKey: string[] = [channel];\n if (trans && trans.length) {\n const channelTransform = trans.find(entry => {\n return entry.storedAttrs && entry.channels.includes(channel);\n });\n\n if (channelTransform) {\n getKey = [channelTransform.storedAttrs, channel];\n }\n }\n return get(this.graphicItem?.attribute, getKey);\n }\n\n setGraphicAttribute(channel: string, value: any, final: boolean = true) {\n if (!this.graphicItem) {\n return;\n }\n const finalGraphicAttributes = this.getFinalGraphicAttributes();\n const prevGraphicAttributes = this.getPrevGraphicAttributes();\n\n if (final && finalGraphicAttributes) {\n finalGraphicAttributes[channel] = value;\n }\n if (prevGraphicAttributes && !has(prevGraphicAttributes, channel)) {\n prevGraphicAttributes[channel] = this.graphicItem.attribute[channel];\n }\n\n this.graphicItem.setAttribute(channel, value);\n }\n\n setGraphicAttributes(attributes: { [channel: string]: any }, final: boolean = true) {\n if (!this.graphicItem) {\n return;\n }\n const finalGraphicAttributes = this.getFinalGraphicAttributes();\n const prevGraphicAttributes = this.getPrevGraphicAttributes();\n\n Object.keys(attributes).forEach(key => {\n if (finalGraphicAttributes && final) {\n finalGraphicAttributes[key] = attributes[key];\n }\n if (prevGraphicAttributes && !has(prevGraphicAttributes, key)) {\n prevGraphicAttributes[key] = this.graphicItem.attribute[key];\n }\n });\n\n this.graphicItem.setAttributes(attributes);\n }\n\n /**\n * 获取 vRender 已变更的视觉通道属性,只应当由 VGrammar 中 调用\n * @returns 视觉通道键值对\n */\n getFinalGraphicAttributes() {\n return (this.graphicItem as any).finalAttrs;\n }\n\n protected setFinalGraphicAttributes(attributes: { [channel: string]: any }) {\n (this.graphicItem as any).finalAttrs = attributes;\n }\n\n /**\n * 获取 vRender 变更前的视觉通道属性,只应当由 VGrammar 调用\n * @returns 视觉通道键值对\n */\n getPrevGraphicAttributes() {\n return (this.graphicItem as any).prevAttrs;\n }\n\n protected setPrevGraphicAttributes(attributes: { [channel: string]: any }) {\n (this.graphicItem as any).prevAttrs = attributes;\n }\n\n /**\n * 获取 vRender 在单次 dataflow 中变更的视觉通道属性,只应当由 VGrammar 调用\n * @returns 视觉通道键值对\n */\n getNextGraphicAttributes() {\n return (this.graphicItem as any).nextAttrs;\n }\n\n protected setNextGraphicAttributes(attributes: { [channel: string]: any }) {\n (this.graphicItem as any).nextAttrs = attributes;\n }\n\n clearChangedGraphicAttributes() {\n if (this.graphicItem) {\n this.setPrevGraphicAttributes(null);\n this.setNextGraphicAttributes(null);\n }\n }\n\n clearGraphicAttributes() {\n if (this.graphicItem) {\n (this.graphicItem as any).prevAttrs && this.setPrevGraphicAttributes(null);\n (this.graphicItem as any).nextAttrs && this.setNextGraphicAttributes(null);\n (this.graphicItem as any).finalAttrs && this.setFinalGraphicAttributes(null);\n }\n }\n\n remove() {\n if (this.graphicItem) {\n removeGraphicItem(this.graphicItem);\n this.graphicItem = null;\n }\n }\n\n release() {\n this.removeGraphicItem();\n this.mark = null;\n this.data = null;\n this.items = null;\n }\n /**\n * hack support for transform & encode logic. DO NOT USE.\n */\n getItemAttribute(channel?: string) {\n if (!this.items?.length) {\n return;\n }\n\n if (this.mark.isCollectionMark()) {\n return isNil(channel)\n ? this.items.map(item => item.nextAttrs)\n : this.items.map(item => item.nextAttrs?.[channel]);\n }\n\n return isNil(channel) ? this.items[0].nextAttrs : this.items[0].nextAttrs?.[channel];\n }\n setItemAttributes(attributes: { [channel: string]: any } | any[]) {\n if (!this.items?.length) {\n return;\n }\n\n if (this.mark.isCollectionMark()) {\n if (isArray(attributes)) {\n this.items.forEach((item, index) => {\n Object.assign(item.nextAttrs, attributes[index]);\n });\n }\n } else {\n Object.assign(this.items[0].nextAttrs, attributes);\n }\n }\n /**\n * hack support for transform & encode logic. DO NOT USE.\n */\n getItem() {\n return this.mark && this.mark.isCollectionMark() ? this.items ?? [] : this.items?.[0];\n }\n getDatum() {\n return this.mark && this.mark.isCollectionMark() ? this.data ?? [] : this.data?.[0];\n }\n}\n"]}
|