UNPKG

@xrenders/xflow

Version:

一款功能强大、易用灵活的流程编辑器框架,帮助你轻松构建复杂的工作流和流程产品

180 lines (179 loc) 4.88 kB
import { TabPaneProps } from 'antd'; import { Schema, useForm } from 'form-render'; import { ReactFlow } from '@xyflow/react'; import React, { ReactNode, ComponentProps } from 'react'; import SourceHandle, { HandleProps } from './components/CustomNode/sourceHandle'; type SourceHandleType = typeof SourceHandle; type ReactFlowProps = ComponentProps<typeof ReactFlow>; export interface TNodeItem { title: string; type: string; description?: string; hidden?: boolean; iconSvg?: string; icon: { type: string; bgColor: string; }; settingSchema?: Schema; settingWidget?: string; settingWidgetProps?: object; hideDesc?: boolean; nodePanel?: { width?: string | number; hideDesc?: boolean; }; nodeWidget?: string; renderHandle?: (sourceHandle: SourceHandleType, sourceHandleProps: ComponentProps<SourceHandleType>, nodeProps: { id: string; type: string; data: any; layout: 'LR' | 'TB'; isConnectable: boolean; readOnly: boolean; }) => React.JSX.Element; getSettingSchema?: (nodeId: string, nodeType: string, nodeItem: TNodeItem, nodeData: any, form: ReturnType<typeof useForm>) => Promise<Schema>; switchExtra: { hideElse: boolean; valueKey: string; titleKey: string; }; parallelExtra: { valueKey: string; titleKey: string; }; disabledCopy?: boolean; disabledDelete?: boolean; onTesting: (node: any, nodes: any) => void; showTestingBtn?: boolean; className?: string; disabledShortcutDelete?: boolean; } export interface TNodeGroup { title: string; type: '_group'; items: TNodeItem[]; } export interface TNodeMenu { ref: React.RefObject<any>; showSearch: boolean; items: (TNodeGroup | TNodeItem)[]; onClick: ({}: { type: string; }) => void; } export interface TNodePanel { width?: string | number; hideDesc?: boolean; onClose?: (activeNodeId: string) => void; showPanel?: boolean; } export interface TNodeSelector { showSearch: boolean; items?: (TNodeGroup | TNodeItem)[]; } export interface TLogListItem { statusPanel?: { status?: Array<{ label: string; value?: string; isBadge?: boolean; }>; extra?: string | ReactNode; }; codePanel?: Array<{ title: string; code: string; }>; nodeId: string; groupTitle?: string; showDetailLogWidget?: boolean; _status?: string | number; } export interface TLogPanel { logList: Array<TLogListItem>; loading?: boolean; logWidget?: string; width?: number; tabsProps?: TabPaneProps; detailLogWidget?: string; } export interface TNodeView { hideTitleTips?: boolean; status?: Array<{ name: string; color: string; }>; } export interface TEdge { hideEdgeAddBtn?: boolean; hideEdgeDelBtn?: boolean; deletable?: boolean; } export interface TControl { hideAddNode?: boolean; hideAnnotate?: boolean; hideUndoRedoBtns?: boolean; hideZoomInOutBtns?: boolean; hideControlBtns?: boolean; hideAutoLayout?: boolean; hideFullscreen?: boolean; hideInteractionMode?: boolean; } export interface THandle { isValidConnection?: HandleProps['isValidConnection']; } export interface FlowProps { initialValues?: { nodes: Array<{ id: string; type: string; data: Record<string, any>; position: { x: number; y: number; }; }>; edges: Array<{ id: string; source: string; target: string; }>; }; layout?: 'LR' | 'TB'; /** * 自定义组件 */ widgets?: any; /** * 节点配置 */ settings?: (TNodeGroup | TNodeItem)[]; nodeSelector?: TNodeSelector; iconFontUrl?: string; globalConfig?: { nodePanel?: TNodePanel; nodeView?: TNodeView; edge?: TEdge; controls?: TControl; handle?: THandle; deleteKeyCode?: string | string[] | null; }; logPanel?: TLogPanel; readOnly?: boolean; onNodeClick?: ReactFlowProps['onNodeClick']; onEdgeClick?: ReactFlowProps['onEdgeClick']; onMenuItemClick?: (itemInfo: ItemInfo, defaultAction: () => void) => void; clickAddNode?: (type: string, nodeItem: TNodeItem, addNode: (initData?: Record<string, any>) => void) => void; zoomOnScroll?: boolean; panOnScroll?: boolean; preventScrolling?: boolean; openColorfulMode?: boolean; connectionLineComponent?: ReactFlowProps['connectionLineComponent']; } interface ItemInfo { key: 'copy' | 'paste' | 'delete' | string; nodeId: string; sourceHandle?: string; } export default FlowProps;