import LogicFlow, { CallbackArgs, Model, BaseNodeModel, BaseEdgeModel } from '@logicflow/core'; import { PoolModel } from './PoolModel'; import { PoolView } from './PoolView'; import { LaneModel } from './LaneModel'; import { LaneView } from './LaneView'; import EdgeConfig = LogicFlow.EdgeConfig; import EdgeData = LogicFlow.EdgeData; import NodeData = LogicFlow.NodeData; import BoxBoundsPoint = Model.BoxBoundsPoint; type ElementsInfoInGroup = { childNodes: BaseNodeModel[]; edgesData: EdgeData[]; }; export declare const PoolNode: { type: string; view: typeof PoolView; model: typeof PoolModel; }; export declare const LaneNode: { type: string; view: typeof LaneView; model: typeof LaneModel; }; export declare class PoolElements { static pluginName: string; private lf; activeGroup?: LaneModel; nodeLaneMap: Map; constructor({ lf, options }: LogicFlow.IExtensionProps); /** * 获取节点所属的泳道 * @param nodeId */ getLaneByNodeId(nodeId: string): BaseNodeModel | undefined; /** * 获取指定范围内的泳道 * 当泳道重合时,优先返回最上层的泳道 * @param bounds * @param nodeData */ getLaneByBounds(bounds: BoxBoundsPoint, nodeData: NodeData): any | undefined; /** * 提高元素的层级,如果是 group,同时提高其子元素的层级 * @param model */ onSelectionDrop: () => void; onNodeAddOrDrop: ({ data: node }: CallbackArgs<'node:add'>) => void; addNodeToGroup: (node: LogicFlow.NodeData) => void; onGroupAddNode: ({ data: groupData, childId, }: CallbackArgs<'group:add-node'>) => void; removeNodeFromGroup: ({ data: node, model, }: CallbackArgs<'node:delete'>) => void; onSelectionDrag: () => void; onNodeDrag: ({ data: node }: CallbackArgs<'node:drag'>) => void; setActiveGroup: (node: LogicFlow.NodeData) => void; /** * @param node * @param isMultiple * @param isSelected */ onNodeSelect: ({ data: node, isMultiple, isSelected, }: Omit, 'e' | 'position'>) => void; onNodeMove: ({ deltaX, deltaY, data, }: Omit, 'e' | 'position'>) => void; onGraphRendered: ({ data }: CallbackArgs<'graph:rendered'>) => void; removeChildrenInGroupNodeData(nodeData: T): T; /** * 创建一个 Group 类型节点内部所有子节点的副本 * 并且在遍历所有 nodes 的过程中,顺便拿到所有 edges (只在 Group 范围的 edges) */ initGroupChildNodes(nodeIdMap: Record, children: Set, curGroup: LaneModel, distance: number): ElementsInfoInGroup; /** * 根据参数 edge 选择是新建边还是基于已有边,复制一条边出来 * @param edge * @param nodeIdMap * @param distance */ createEdge(edge: EdgeConfig | EdgeData, nodeIdMap: Record, distance: number): BaseEdgeModel; /** * 检测group:resize后的bounds是否会小于children的bounds * 限制group进行resize时不能小于内部的占地面积 * @param groupModel * @param deltaX * @param deltaY * @param newWidth * @param newHeight */ checkGroupBoundsWithChildren(groupModel: LaneModel, deltaX: number, deltaY: number, newWidth: number, newHeight: number): boolean; init(): void; render(): void; destroy(): void; } export default PoolElements;