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