import { useState, useEffect } from 'react' import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter, } from '@/components/ui/dialog' import { Button } from '@/components/ui/button' import { MCPServerConfig } from '@/hooks/useMCPServers' import CodeEditor from '@uiw/react-textarea-code-editor' import '@uiw/react-textarea-code-editor/dist.css' import { useTranslation } from '@/i18n/react-i18next-compat' interface EditJsonMCPserverProps { open: boolean onOpenChange: (open: boolean) => void serverName: string | null // null means editing all servers initialData: MCPServerConfig | Record onSave: (data: MCPServerConfig | Record) => void } export default function EditJsonMCPserver({ open, onOpenChange, serverName, initialData, onSave, }: EditJsonMCPserverProps) { const { t } = useTranslation() const [jsonContent, setJsonContent] = useState('') const [error, setError] = useState(null) // Initialize the editor with the provided data useEffect(() => { if (open && initialData) { try { setJsonContent(JSON.stringify(initialData, null, 2)) setError(null) } catch { setError(t('mcp-servers:editJson.errorParse')) } } }, [open, initialData, t]) const handlePaste = () => { // Clear any existing errors when pasting setError(null) } const handleSave = () => { try { const parsedData = JSON.parse(jsonContent) onSave(parsedData) onOpenChange(false) setError(null) } catch { setError(t('mcp-servers:editJson.errorFormat')) } } return ( { e.preventDefault() }} > {serverName ? t('mcp-servers:editJson.title', { serverName }) : t('mcp-servers:editJson.titleAll')}
setJsonContent(e.target.value)} onPaste={handlePaste} style={{ fontFamily: 'ui-monospace', backgroundColor: 'transparent', wordBreak: 'break-all', overflowWrap: 'anywhere', whiteSpace: 'pre-wrap', }} className="w-full !text-sm overflow-hidden break-all" />
{error &&
{error}
}
) }