| import React, { useRef, useEffect, useState } from "react"; | 
| import { Button, Drawer, Input, Switch, AutoComplete } from 'antd'; | 
| import { CloseSquareFilled } from '@ant-design/icons'; | 
| import { initNodeData } from "../GraphConfig"; | 
|   | 
| const { TextArea } = Input; | 
|   | 
| export const GraphDrawerEdge = ({ graphRef, isReady }) => { | 
|   | 
|     const [open, setOpen] = useState(false); | 
|     const [init, setInit] = useState(false); | 
|     const [edgeData, setEdgeData] = useState(null); | 
|     const [codeContent, setCodeContent] = useState(null); | 
|   | 
|     const options = [ | 
|         { value: 'true' }, | 
|         { value: 'false' }, | 
|     ]; | 
|   | 
|     const showEdgeDrawer = (graph, edge) => { | 
|         setOpen(true); | 
|         setEdgeData(edge); | 
|         if (edge.data == null) { | 
|             edge.data = initNodeData; | 
|         } | 
|   | 
|         if (edge.data.codeContent != null) { | 
|             setCodeContent(edge.data.codeContent); | 
|         } | 
|   | 
|         if (edge.labels.length == 0) { | 
|             edge.appendLabel({ | 
|                 attrs: { | 
|                     label: { | 
|                         text: "" | 
|                     } | 
|                 } | 
|             }) | 
|         } | 
|   | 
|     } | 
|   | 
|     const onEdgeClose = (e) => { | 
|         setOpen(false); | 
|         setEdgeData(null); | 
|         setCodeContent(null); | 
|     }; | 
|   | 
|     const edgeTextAreaChange = (e) => { | 
|         setCodeContent(e.target.value); | 
|         edgeData.data.codeContent = e.target.value; | 
|     } | 
|   | 
|     const edgeDataInputChange = (value) => { | 
|         edgeData.removeLabelAt(0); | 
|         edgeData.appendLabel({ | 
|             attrs: { | 
|                 label: { | 
|                     text: value | 
|                 } | 
|             } | 
|         }) | 
|         edgeData.data.logicBool = value == 'true' ? true : false; | 
|     } | 
|   | 
|     useEffect(() => { | 
|         if (isReady) { | 
|             const graph = graphRef.current; | 
|   | 
|             if (!init) { | 
|                 graph.on("edge:dblclick", ({ edge }) => { | 
|                     showEdgeDrawer(graph, edge); | 
|                 }) | 
|                 setInit(true); | 
|             } | 
|         } | 
|     }) | 
|   | 
|     if (edgeData) { | 
|         return ( | 
|             <> | 
|                 <Drawer title={edgeData.label} onClose={onEdgeClose} open={open} size="large"> | 
|                     <div className="graphDrawerContainer"> | 
|                         <div>ID:{edgeData.id}</div> | 
|                         <div> | 
|                             属性详情: | 
|                             <AutoComplete | 
|                                 style={{ | 
|                                     width: 200, | 
|                                 }} | 
|                                 options={options} | 
|                                 filterOption={(inputValue, option) => | 
|                                     option.value.toUpperCase().indexOf(inputValue.toUpperCase()) !== -1 | 
|                                 } | 
|                                 allowClear={{ clearIcon: <CloseSquareFilled /> }} | 
|                                 defaultValue={edgeData.labels[0].attrs.label.text} | 
|                                 onChange={edgeDataInputChange} | 
|                             /> | 
|                         </div> | 
|                         <div>根节点:<Switch checkedChildren="是" unCheckedChildren="否" checked={edgeData.data.root} /></div> | 
|                         <div>可执行代码:</div> | 
|                         <TextArea value={codeContent} onChange={edgeTextAreaChange} rows={10} /> | 
|                     </div> | 
|                 </Drawer> | 
|             </> | 
|         ); | 
|     } | 
| } |