@logicflow/extension
Version:
LogicFlow Extensions
147 lines (146 loc) • 4.68 kB
TypeScript
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;