import type { Edge, Graph as Graphlib, Node } from '@antv/graphlib'; import { TREE_KEY } from '../constants'; import type { ComboData, EdgeData, NodeData } from '../spec'; import { NodeLikeData } from '../types/data'; import { idOf } from './id'; import { isEdgeData } from './is'; export function toGraphlibData(datums: EdgeData): Edge; export function toGraphlibData(datums: NodeLikeData): Node; /** * 将 NodeData、EdgeData、ComboData 转换为 graphlib 的数据结构 * * Transform NodeData, EdgeData, ComboData to graphlib data structure * @param data - 节点、边、combo 数据 | node, combo data * @returns graphlib 数据 | graphlib data */ export function toGraphlibData(data: NodeData | EdgeData | ComboData): Node | Edge { const { id = idOf(data), style, data: customData, ...rest } = data; const _data = { ...data, style: { ...style }, data: { ...customData } }; if (isEdgeData(data)) return { id, data: _data, ...rest } as Edge; return { id, data: _data } as Node; } export function toG6Data(data: Edge): T; export function toG6Data(data: Node): T; /** * 将 Node、Edge、Combo 转换为 G6 的数据结构 * * Transform Node, Edge, Combo to G6 data structure * @param data - graphlib 节点、边、Combo 数据 | graphlib node, edge, combo data * @returns G6 数据 | G6 data */ export function toG6Data(data: Node | Edge): T { return data.data; } /** * 创建树形结构 * * Create tree structure * @param model - 数据模型 | data model */ export function createTreeStructure(model: Graphlib) { if (model.hasTreeStructure(TREE_KEY)) return; model.attachTreeStructure(TREE_KEY); const edges = model.getAllEdges(); for (const edge of edges) { const { source, target } = edge; model.setParent(target, source, TREE_KEY); } }