import { Modal, ModalContent, ModalHeader } from '@heroui/modal'; import toast from 'react-hot-toast'; import useConfig from '@/hooks/use-config'; import HTTPClientForm from './http_client'; import HTTPServerForm from './http_server'; import HTTPServerSSEForm from './http_sse'; import WebsocketClientForm from './ws_client'; import WebsocketServerForm from './ws_server'; const modalTitle = { httpServers: 'HTTP Server', httpClients: 'HTTP Client', httpSseServers: 'HTTP SSE Server', websocketServers: 'Websocket Server', websocketClients: 'Websocket Client', }; export interface NetworkFormModalProps< T extends keyof OneBotConfig['network'] > { isOpen: boolean; field: T; data?: OneBotConfig['network'][T][0]; onOpenChange: (isOpen: boolean) => void; } const NetworkFormModal = ( props: NetworkFormModalProps ) => { const { isOpen, onOpenChange, field, data } = props; const { createNetworkConfig, updateNetworkConfig } = useConfig(); const isCreate = !data; const onSubmit = async (data: OneBotConfig['network'][typeof field][0]) => { try { if (isCreate) { await createNetworkConfig(field, data); } else { await updateNetworkConfig(field, data); } toast.success('保存配置成功'); } catch (error) { const msg = (error as Error).message; toast.error(`保存配置失败: ${msg}`); throw error; } }; const renderFormComponent = (onClose: () => void) => { switch (field) { case 'httpServers': return ( ); case 'httpClients': return ( ); case 'websocketServers': return ( ); case 'websocketClients': return ( ); case 'httpSseServers': return ( ); default: return null; } }; return ( {(onClose) => ( <> {modalTitle[field]} {renderFormComponent(onClose)} )} ); }; export default NetworkFormModal;