UNPKG

8.92 kBSource Map (JSON)View Raw
1{"version":3,"file":"link-by-color.js","sourceRoot":"","sources":["../../../../src/interaction/action/element/link-by-color.ts"],"names":[],"mappings":"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","sourcesContent":["import Action from '../base';\nimport { getCurrentElement, getElementValue, getElementsByField } from '../util';\nimport Element from '../../../geometry/element/';\nimport { deepMix, each, isFunction } from '@antv/util';\nimport { LooseObject } from '../../../interface';\nimport { IGroup, ShapeAttrs } from '../../../dependents';\n\ntype LinkActiveStyle = ShapeAttrs | ((style: ShapeAttrs, Element: Element) => ShapeAttrs);\n\n/**\n * Link Elements by color\n *\n * public 方法是对外可用的反馈交互。使用方式,如:element-link-by-color:link, element-link-by-color:unlink, element-link-by-color:clear\n */\nclass LinkByColor extends Action {\n private linkGroup: IGroup;\n private cache: LooseObject = {};\n // 获取颜色对应的 scale\n private getColorScale(view, element) {\n const colorAttr = element.geometry.getAttribute('color');\n if (!colorAttr) {\n return null;\n }\n const scale = view.getScaleByField(colorAttr.getFields()[0]);\n return scale;\n }\n // 获取连接的 path\n private getLinkPath(element: Element, nextElement: Element) {\n const view = this.context.view;\n const { isTransposed } = view.getCoordinate();\n const bbox = element.shape.getCanvasBBox();\n const nextBBox = nextElement.shape.getCanvasBBox();\n const path = isTransposed\n ? [\n ['M', bbox.minX, bbox.minY],\n ['L', nextBBox.minX, nextBBox.maxY],\n ['L', nextBBox.maxX, nextBBox.maxY],\n ['L', bbox.maxX, bbox.minY],\n ['Z'],\n ]\n : [\n ['M', bbox.maxX, bbox.minY],\n ['L', nextBBox.minX, nextBBox.minY],\n ['L', nextBBox.minX, nextBBox.maxY],\n ['L', bbox.maxX, bbox.maxY],\n ['Z'],\n ];\n return path;\n }\n // 添加连接的图形\n private addLinkShape(group: IGroup, element: Element, nextElement: Element, activeStyle?: LinkActiveStyle) {\n const style = {\n opacity: 0.4,\n fill: element.shape.attr('fill'),\n };\n group.addShape({\n type: 'path',\n attrs: {\n ...deepMix({}, style, isFunction(activeStyle) ? activeStyle(style, element) : activeStyle),\n path: this.getLinkPath(element, nextElement),\n },\n });\n }\n // 使用图形连接\n private linkByElement(element: Element, activeStyle?: LinkActiveStyle) {\n const view = this.context.view;\n const scale = this.getColorScale(view, element);\n if (!scale) {\n return;\n }\n const value = getElementValue(element, scale.field);\n if (!this.cache[value]) {\n const elements = getElementsByField(view, scale.field, value);\n const linkGroup = this.linkGroup;\n const group = linkGroup.addGroup();\n this.cache[value] = group; // 缓存\n const count = elements.length;\n each(elements, (el, index) => {\n if (index < count - 1) {\n const nextEl = elements[index + 1];\n this.addLinkShape(group, el, nextEl, activeStyle);\n }\n });\n }\n }\n // 移除连接\n private removeLink(element) {\n const scale = this.getColorScale(this.context.view, element);\n if (!scale) {\n return;\n }\n const value = getElementValue(element, scale.field);\n if (this.cache[value]) {\n this.cache[value].remove();\n this.cache[value] = null;\n }\n }\n\n /**\n * 连接 elements\n *\n * @usage\n * registerInteraction('xxx', {\n * start: [\n * {\n * trigger: 'interval:mouseenter',\n * action: 'element-link-by-color:link',\n * arg: {\n * // style: { fill: 'red' }\n * style: (style, element) => ({ fill: 'red' })\n * },\n * },\n * ],\n * });\n */\n public link(args?: { style: LinkActiveStyle }) {\n const context = this.context;\n if (!this.linkGroup) {\n // 不允许被拾取\n this.linkGroup = context.view.foregroundGroup.addGroup({\n id: 'link-by-color-group',\n capture: false,\n });\n }\n const element = getCurrentElement(context);\n if (element) {\n this.linkByElement(element, args?.style);\n }\n }\n\n /**\n * 取消连接 elements\n */\n public unlink() {\n const element = getCurrentElement(this.context);\n if (element) {\n this.removeLink(element);\n }\n }\n\n /**\n * 清除所有连接\n */\n public clear() {\n if (this.linkGroup) {\n this.linkGroup.clear();\n }\n this.cache = {};\n }\n\n /**\n * 销毁\n */\n destroy() {\n super.destroy();\n if (this.linkGroup) {\n this.linkGroup.remove();\n }\n }\n}\nexport default LinkByColor;\n"]}
\No newline at end of file