import { FlowContextType, FlowNode, Menu } from "../type";
export declare class FlowEventService {
    loadFlowNode(node: FlowNode): FlowNode;
    /**
     * 保存节点，去除所有的menus数据内容
     */
    getSaveFlowNode(nodes: FlowNode): FlowNode;
    /**
     * 获取事件流打开动作里面的存储行为
     * @returns
     */
    getSaveDataBehaviorByAction(nodes: FlowNode): StorageDataBehaviorType[];
    private _getSaveDataBehaviorByAction;
    /**
     * 创建节点
     * @param curModel
     * @param key
     * @returns
     */
    createFlowNode(curModel: any, key: string): any;
    /**
     * 处理插入节点,对规则节点的处理逻辑有问题
     * @param curModel
     * @param newNode
     */
    InterpositionFlowNode(curModel: any, newNode: any): any;
    private createUUid;
    private updatedParentConfig;
    /**
     * 菜单配置
     * 1，模块下子模块都是条件/或者缺省条件 的情况下，是可以添加多个条件的，否则只能有一条线路
     * 2, 请求动作，成功，失败和成功或失败是互斥的
     * 3, 除条件以为的子模块不允许子啊添加动作
     * @param node
     * @returns
     */
    getMenusByNode(node: FlowNode, FlowCtx: FlowContextType): any;
    getMenusPosition(item: any, target: any, graph: any, refContainer: any): {
        top: any;
        left: any;
    };
    getDeleteMenus(model: any, graph: any): Menu[];
    /**
     * 判断节点是否是条件节点，并且有多个条件的情况下，应该过滤掉删除当前节点的方法
     * @param model
     * @param graph
     * @returns
     */
    private isHaveMultiCondition;
    updatedParentConfigs(data: FlowNode | undefined): FlowNode;
    /**
     * 除了判断是否是插入节点
     * 这里除了明确指出来的插入节点以外还需要注意类似
     * 动作突然修改成接口，添加节点的内容插入
     * @param key
     * @returns
     */
    isInsertNode(key: string, current?: FlowNode): boolean;
    /**
     * 校验所有的节点是否正确,不断扩充，暂时只校验请求接口
     * 1，请求动作节点后面必须是成功，失败，穿透
     * 2，规则节点必须绑定instanceId
     * 3，规则节点前置，后置，预制等必须有结束节点
     * 4, 只要存在一个结束节点或者异常结束节点就行
     */
    checkAllNode(newData: FlowNode): {
        code: number;
        msg: string;
    };
    /**
     * 检测至少含义一个结束节点
     * 1，结束节点
     * 2，公共事件流节点
     * 3，异常节点
     * @param node
     * @returns
     */
    checkAllEndNodeData(node: FlowNode): boolean;
    /**
     * 递归遍历修改树图数据
     * 1，规则节点和结束节点只要存在一个就行
     * 以遇到结束节点作为执行完成的标准
     * @param root 当前跟节点
     * @param option 更新类型： 删除节点  删除一整个子树 添加节点
     * @param targetId 要删除的节点 || 在那个节点下新增
     * @param newNode 新增节点
     * @param isInsertNode 判断是否插入节点
     * @returns
     */
    getNewTreeGraphData(root: any, option: string, targetId: string, newNode?: any, isInsertNode?: boolean): any;
    /**
     * 补充menus
     * @param node
     */
    private addInitNodeMenus;
    /**
     * 1，请求动作节点后面必须是成功，失败，穿透
     * @param nodeList
     * @returns
     */
    private checkAllRequestNodeData;
    /**
     * 2，规则节点必须绑定instanceId
     * 3，规则节点前置，后置，预制等必须有结束节点
     * @param nodeList
     */
    private checkAllRuleNodeData;
    /**
     * 补充插入菜单,
     * 暂时只支持条件，动作，插入其他节点
     */
    private addInterpositionMenus;
    /**
     * 可能是插入节点，应该转换成对应的节点内容
     * 用于去生成新的节点
     * @param key
     * @returns
     */
    private getNewKey;
    private handleSaveFlowNode;
    /**
     * 处理多条件节点，即某个节点下面可以有多个条件和一个缺省条件
     * @param node
     * @returns
     */
    private handleConditionMenus;
    /**
     * 处理动作节点下的请求动作
     * @param node
     * @param FlowCtx
     * @returns
     */
    private handleActionRequestMenus;
    private isHaveFinallyNode;
    private isSuccessOrErrorNode;
    private isSuccessAndErrorNode;
    /**
     * 暂时只针对menus中含有rule里面的menus，目的是保证整条链路只有一个规则
     *
     * @param menus
     * @param parentKeys
     */
    private handleParentKeysMenus;
    private isHaveRuleInParentKeys;
    private isHaveRuleInChildren;
    /**
     * 判断是否有除请求以外的任何数据
     * 主要是action节点之前不是请求，后来改成请求后要插入成功，失败或穿透的子模块
     * @param children
     */
    private isNoHaveActionRequestData;
    private _checkRequestChildren;
    /**
     * 校验请求动作
     * @param node
     */
    private checkActionRequestData;
    private checkRuleNodeData;
    private checkChildrenNode;
    private getOneFlowNode;
    /**
     * 判断子节点只能是条件或者缺省条件
     * @param children
     * @returns
     */
    private isHaveConditionAndElseInChildren;
    /**
     * 节点存在条件
     * @param children
     * @returns
     */
    private isHaveConditionInChildren;
    /**
     * 节点存在缺省条件
     * @param children
     * @returns
     */
    private isHaveConditionElseChildren;
    private _updateParentConfig;
}
