UNPKG

@logicflow/extension

Version:
147 lines (146 loc) 4.68 kB
import LogicFlow, { BaseEdgeModel, GraphModel, IRectNodeProperties, RectNodeModel } from '@logicflow/core'; import NodeData = LogicFlow.NodeData; import NodeConfig = LogicFlow.NodeConfig; import EdgeConfig = LogicFlow.EdgeConfig; export type IGroupNodeProperties = { /** * 当前分组中的节点 id */ children?: string[]; /** * 分组节点是否可以折叠 */ collapsible?: boolean; /** * 分组节点折叠状态 */ isCollapsed?: boolean; /** * 子节点是否限制移动范围 * 默认为 false,允许拖拽移除分组 */ isRestrict?: boolean; /** * isRestrict 模式启用时, * 如果同时设置 autoResize 为 true, * 那么子节点在父节点中移动时,父节点会自动调整大小 */ autoResize?: boolean; /** * 分组节点的收起状态宽高 */ collapsedWidth?: number; collapsedHeight?: number; /** * 缩放或旋转容器时,是否缩放或旋转组内节点 */ transformWithContainer?: boolean; /** * 当前分组元素的 zIndex */ zIndex?: number; /** * 分组节点是否自动置顶 */ autoToFront?: boolean; isAllowAppendIn?: (_nodeData: any) => boolean; } & IRectNodeProperties; export declare class DynamicGroupNodeModel extends RectNodeModel<IGroupNodeProperties> { readonly isGroup = true; children: Set<string>; isRestrict: boolean; autoResize: boolean; collapsible: boolean; expandWidth: number; expandHeight: number; collapsedWidth: number; collapsedHeight: number; isCollapsed: boolean; groupAddable: boolean; transformWithContainer: boolean; childrenLastCollapseStateDict: Map<string, boolean>; constructor(data: NodeConfig<IGroupNodeProperties>, graphModel: GraphModel); initNodeData(data: LogicFlow.NodeConfig<IGroupNodeProperties>): void; setAttributes(): void; getData(): NodeData; /** * 获取分组内的节点 * @param groupModel */ getNodesInGroup(groupModel: DynamicGroupNodeModel): string[]; getMoveDistance(deltaX: number, deltaY: number, isIgnoreRule?: boolean): [number, number]; /** * 重写 getHistoryData 方法 */ getHistoryData(): NodeData; /** * 触发分组节点的「折叠 or 展开」动作 * 1. 折叠分组的宽高 * 2. 处理分组子节点 * 3. 处理连线 * @param collapse {boolean} true -> 折叠;false -> 展开 */ toggleCollapse(collapse?: boolean): void; private collapse; private expand; createVirtualEdge(edgeConfig: EdgeConfig): void; /** * 折叠分组的时候,需要处理分组自身的连线和分组内部子节点上的连线 * 边的分类: * - 虚拟边:分组被收起时,标识分组本身与外部节点关系的边 * - 真实边:分组本身或者分组内部节点与外部节点(非收起分组)关系的边 * 如果一个分组,本身与外部节点有 M 条连线,且内部 N 个子节点与外部节点有连线,那么这个分组收起时会生成 M+N 条连线 * 折叠分组时: * - 原有的虚拟边删除 * - 创建一个虚拟边 * - 真实边则隐藏 * 展开分组时: * - 当前的虚拟边删除 * - 如果外部节点是收起的分组,则创建虚拟边 * - 如果外部节点是普通节点,则显示真实边 * * @param collapse * @param edges */ collapseEdge(collapse: boolean, edges: BaseEdgeModel[]): void; /** * 是否允许此节点添加到该分组 * TODO: 如何重写该方法呢? * @param _nodeData */ isAllowAppendIn(_nodeData: NodeData): boolean; /** * 更新分组节点是否允许添加节点的属性 * @param isAllow */ setAllowAppendChild(isAllow: boolean): void; /** * 添加节点至分组中 * @param id */ addChild(id: string): void; /** * 从分组中移除某节点 * @param id */ removeChild(id: string): void; /** * 当 groupA 被添加到 groupB 中时,将 groupB 及 groupB 所属的 group zIndex 减 1 */ toBack(): void; /** * 重写 Group 节点的 Resize Outline */ getResizeOutlineStyle(): LogicFlow.CommonTheme; getAnchorStyle(): LogicFlow.AnchorTheme; /** * 设置分组节点 drop 区域的样式 */ getAddableOutlineStyle(): { stroke: string; strokeWidth: number; strokeDasharray: string; fill: string; }; } export default DynamicGroupNodeModel;