import { useState, useEffect } from 'react'; import { api } from '../lib/api.ts'; import { useServerStore } from '../stores/server.ts'; interface JoinServerModalProps { onClose: () => void; } interface JoinServerApiResponse { server_id: string; message: string; } export function JoinServerModal({ onClose }: JoinServerModalProps) { const [code, setCode] = 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 joinServer = async (e: React.FormEvent) => { e.preventDefault(); if (!code.trim()) return; setLoading(true); setError(null); try { const result = await api.post(`/invites/${code.trim()}/join`); await useServerStore.getState().fetchServers(); useServerStore.getState().setActiveServer(result.server_id); onClose(); } catch (err) { setError(err instanceof Error ? err.message : 'Failed to join server'); } finally { setLoading(false); } }; return (
e.stopPropagation()} >
JOIN SERVER
setCode(e.target.value)} placeholder="enter invite code" required className="terminal-input w-full" />
{error &&
{error}
}
); }