import intl from 'react-intl-universal'; import React, { useEffect, useState, useRef } from 'react'; import { Drawer, Button, Tabs, Badge, Select, TreeSelect } from 'antd'; import { request } from '@/utils/http'; import config from '@/utils/config'; import SplitPane from 'react-split-pane'; import Editor from '@monaco-editor/react'; import SaveModal from './saveModal'; import SettingModal from './setting'; import { useTheme } from '@/utils/hooks'; import { logEnded } from '@/utils'; const { Option } = Select; const LangMap: any = { '.py': 'python', '.js': 'javascript', '.sh': 'shell', '.ts': 'typescript', }; const prefixMap: any = { python: '.py', javascript: '.js', shell: '.sh', typescript: '.ts', }; const EditModal = ({ treeData, currentNode, content, handleCancel, visible, socketMessage, }: { treeData?: any; content?: string; visible: boolean; socketMessage: any; currentNode: any; handleCancel: () => void; }) => { const [value, setValue] = useState(''); const [language, setLanguage] = useState('javascript'); const [cNode, setCNode] = useState(); const [selectedKey, setSelectedKey] = useState(''); const [saveModalVisible, setSaveModalVisible] = useState(false); const [settingModalVisible, setSettingModalVisible] = useState(false); const [log, setLog] = useState(''); const { theme } = useTheme(); const editorRef = useRef(null); const [isRunning, setIsRunning] = useState(false); const [currentPid, setCurrentPid] = useState(null); const cancel = () => { handleCancel(); }; const onSelect = (value: any, node: any) => { if (node.key === selectedKey || !value) { return; } if (node.type === 'directory') { return; } const newMode = LangMap[value.slice(-3)] || ''; setCNode(node); setLanguage(newMode); getDetail(node); setSelectedKey(node.key); }; const getDetail = (node: any) => { request .get(`${config.apiPrefix}scripts/${node.title}?path=${node.parent || ''}`) .then(({ code, data }) => { if (code === 200) { setValue(data); } }); }; const run = () => { setLog(''); const content = editorRef.current.getValue().replace(/\r\n/g, '\n'); request .put(`${config.apiPrefix}scripts/run`, { filename: cNode.title, path: cNode.parent || '', content, }) .then(({ code, data }) => { if (code === 200) { setIsRunning(true); setCurrentPid(data); } }); }; const stop = () => { if (!cNode || !cNode.title || !currentPid) { return; } request .put(`${config.apiPrefix}scripts/stop`, { filename: cNode.title, path: cNode.parent || '', pid: currentPid, }) .then(({ code, data }) => { if (code === 200) { setIsRunning(false); } }); }; useEffect(() => { if (!socketMessage) { return; } let { type, message: _message, references } = socketMessage; if (type !== 'manuallyRunScript') { return; } if (logEnded(_message)) { setTimeout(() => { setIsRunning(false); }, 300); } if (log) { _message = `\n${_message}`; } setLog(`${log}${_message}`); }, [socketMessage]); useEffect(() => { setLog(''); if (currentNode) { setCNode(currentNode); setValue(content as string); setSelectedKey(currentNode.key); const newMode = LangMap[currentNode.title.slice(-3)] || ''; setLanguage(newMode); } }, [content, currentNode]); return ( } width={'100%'} headerStyle={{ padding: '11px 24px' }} onClose={cancel} open={visible} > {/* @ts-ignore */} { editorRef.current = editor; }} />
          {log}
        
{ setSaveModalVisible(false); }} file={{ content: editorRef.current && editorRef.current.getValue().replace(/\r\n/g, '\n'), ...cNode, }} /> { setSettingModalVisible(false); }} />
); }; export default EditModal;