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