///
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;