import { useState, useEffect } from 'react'; import { api } from '../lib/api.ts'; import { useServerStore } from '../stores/server.ts'; interface CreateServerModalProps { onClose: () => void; } interface ServerApiResponse { id: string; name: string; icon: string | null; owner_id: string; } export function CreateServerModal({ onClose }: CreateServerModalProps) { const [name, setName] = useState(''); const [icon, setIcon] = useState(''); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); useEffect(() => { const handleKeyDown = (e: KeyboardEvent) => { if (e.key === 'Escape') { e.preventDefault(); onClose(); } }; window.addEventListener('keydown', handleKeyDown); return () => window.removeEventListener('keydown', handleKeyDown); }, [onClose]); const createServer = async (e: React.FormEvent) => { e.preventDefault(); if (!name.trim()) return; setLoading(true); setError(null); try { const result = await api.post('/servers', { name: name.trim(), icon: icon.trim() || undefined, }); const newServer = { id: result.id, name: result.name, icon: result.icon, ownerId: result.owner_id, }; useServerStore.getState().addServer(newServer); useServerStore.getState().setActiveServer(newServer.id); onClose(); } catch (err) { setError(err instanceof Error ? err.message : 'Failed to create server'); } finally { setLoading(false); } }; return (
e.stopPropagation()} >
CREATE SERVER
setName(e.target.value)} placeholder="server name" required className="terminal-input w-full" />
setIcon(e.target.value)} placeholder="https://..." className="terminal-input w-full" />
{error &&
{error}
}
); }