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'; 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 cancel = () => { handleCancel(); }; const onSelect = (value: any, node: any) => { if (node.key === selectedKey || !value) { 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.value}?path=${node.parent || ''}`) .then((data) => { setValue(data.data); }); }; const run = () => { setLog(''); request .put(`${config.apiPrefix}scripts/run`, { data: { filename: cNode.value, path: cNode.parent || '', }, }) .then((data) => { setIsRunning(true); }); }; const stop = () => { request .put(`${config.apiPrefix}scripts/stop`, { data: { filename: cNode.value, path: cNode.parent || '', }, }) .then((data) => { setIsRunning(false); }); }; useEffect(() => { if (!socketMessage) { return; } let { type, message: _message, references } = socketMessage; if (type !== 'manuallyRunScript') { return; } if (_message === '执行结束') { _message = ''; setTimeout(() => { setIsRunning(false); }, 300); } if (log) { _message = `\n${_message}`; } setLog(`${log}${_message}`); }, [socketMessage]); useEffect(() => { if (currentNode) { setCNode(currentNode); setValue(content as string); setSelectedKey(currentNode.key); } }, [content, currentNode]); return ( } width={'100%'} headerStyle={{ padding: '11px 24px' }} onClose={cancel} visible={visible} > { editorRef.current = editor; }} />
{log}
{ setSaveModalVisible(false); }} file={{ content: editorRef.current && editorRef.current.getValue().replace(/\r\n/g, '\n'), filename: cNode?.value, }} /> { setSettingModalVisible(false); }} />
); }; export default EditModal;