balibabu
feat: restrict classification operators cannot be connected to Answer and other classification #918 (#1294)
457b4e6
import { useCallback } from 'react'; | |
import ReactFlow, { | |
Background, | |
ConnectionMode, | |
Controls, | |
MarkerType, | |
NodeMouseHandler, | |
} from 'reactflow'; | |
import 'reactflow/dist/style.css'; | |
import { ButtonEdge } from './edge'; | |
import FlowDrawer from '../flow-drawer'; | |
import { | |
useHandleDrop, | |
useHandleKeyUp, | |
useSelectCanvasData, | |
useShowDrawer, | |
} from '../hooks'; | |
import { RagNode } from './node'; | |
import ChatDrawer from '../chat/drawer'; | |
import { isValidConnection } from '../utils'; | |
import styles from './index.less'; | |
import { BeginNode } from './node/begin-node'; | |
import { CategorizeNode } from './node/categorize-node'; | |
const nodeTypes = { | |
ragNode: RagNode, | |
categorizeNode: CategorizeNode, | |
beginNode: BeginNode, | |
}; | |
const edgeTypes = { | |
buttonEdge: ButtonEdge, | |
}; | |
interface IProps { | |
chatDrawerVisible: boolean; | |
hideChatDrawer(): void; | |
} | |
function FlowCanvas({ chatDrawerVisible, hideChatDrawer }: IProps) { | |
const { | |
nodes, | |
edges, | |
onConnect, | |
onEdgesChange, | |
onNodesChange, | |
onSelectionChange, | |
} = useSelectCanvasData(); | |
const { drawerVisible, hideDrawer, showDrawer, clickedNode } = | |
useShowDrawer(); | |
const onNodeClick: NodeMouseHandler = useCallback( | |
(e, node) => { | |
showDrawer(node); | |
}, | |
[showDrawer], | |
); | |
const { onDrop, onDragOver, setReactFlowInstance } = useHandleDrop(); | |
const { handleKeyUp } = useHandleKeyUp(); | |
return ( | |
<div className={styles.canvasWrapper}> | |
<ReactFlow | |
connectionMode={ConnectionMode.Loose} | |
nodes={nodes} | |
onNodesChange={onNodesChange} | |
edges={edges} | |
onEdgesChange={onEdgesChange} | |
fitView | |
onConnect={onConnect} | |
nodeTypes={nodeTypes} | |
edgeTypes={edgeTypes} | |
onDrop={onDrop} | |
onDragOver={onDragOver} | |
onNodeClick={onNodeClick} | |
onInit={setReactFlowInstance} | |
onKeyUp={handleKeyUp} | |
onSelectionChange={onSelectionChange} | |
nodeOrigin={[0.5, 0]} | |
isValidConnection={isValidConnection} | |
onChange={(...params) => { | |
console.info('params:', ...params); | |
}} | |
defaultEdgeOptions={{ | |
type: 'buttonEdge', | |
markerEnd: { | |
type: MarkerType.ArrowClosed, | |
}, | |
}} | |
> | |
<Background /> | |
<Controls /> | |
</ReactFlow> | |
<FlowDrawer | |
node={clickedNode} | |
visible={drawerVisible} | |
hideModal={hideDrawer} | |
></FlowDrawer> | |
<ChatDrawer | |
visible={chatDrawerVisible} | |
hideModal={hideChatDrawer} | |
></ChatDrawer> | |
</div> | |
); | |
} | |
export default FlowCanvas; | |