/// import { IBaseGraphStateWithOmitProps, NodeDefinition } from ".."; import { Edge, InternalNode, Node, XYPosition } from '@xyflow/react'; import { RunningStatus } from "./constants/RunningStatus"; import { SelectionStrategy } from "./constants/SelectionStrategy"; export type WorkflowNode = Node & { subFlowKey?: string; }; export interface IWorkflowProps extends IBaseGraphStateWithOmitProps { readOnly?: boolean; loading?: boolean; sider?: { loading?: boolean; renderIcon?: (nodeDefinition: NodeDefinition) => React.ReactNode; }; /** * @description 限制链接规则,配合 connectionMode 和 isValidConnection一起使用,可以实现复杂的链接限制逻辑 */ connectionLimit?: { /** * @description 是否禁止循环链 */ preventCycle?: boolean; /** * @description 是否禁止并发,一个 handle 链接多个目标节点,通常根据工作流是否支持并发来配置 */ preventConcurrency?: boolean; /** * @description 禁止跨层级,比如从主工作流连接子工作流节点,或不同子工作流之间连接 */ preventCrossSubFlow?: boolean; }; selectionStrategy?: SelectionStrategy; /** * @description 侧边拖动节点到画布中,触发对应的新增回调 */ onNodeTypeDrop?: (parentFlow: InternalNode | undefined, positionInParent: XYPosition, nodeType: string) => Promise; } export type NodeRunningStatus = 'running' | 'success' | 'failed'; export type NodeRunState = { status?: NodeRunningStatus; timeSpent?: number; input?: any; output?: any; [key: string]: any; }; export type WorkflowRunState = { runningStatus?: RunningStatus; timeSpent?: number; activeEdges?: Set; nodeRunMap?: Record; nodePageIndexMap?: Record; runLogs?: any[]; }; export type WorkflowBaseState = { nodes: NodeType[]; edges: EdgeType[]; selectedNodes?: Array; selectedEdges?: Array; hoveredEdge?: string; dropTargetIds?: string[]; runState?: WorkflowRunState; }; export type WorkflowState = Record, NodeType extends WorkflowNode = WorkflowNode, EdgeType extends Edge = Edge> = ValidityState & WorkflowBaseState & ExtraState; export type WorkflowStateApi = Record> = {}; export type NodeErrors = Array; export type ValidityState = { errors?: Record; }; export type NodeTypeLookup = Map;