import { useEffect, useRef, useState, type SyntheticEvent } from 'react' import { login } from '../api/connections' import type { LoginRequest } from '../types/connection' import './ConnectModal.scss' interface Props { serviceType: string label: string onClose: () => void onSuccess: () => void } export function ConnectModal({ serviceType, label, onClose, onSuccess }: Readonly) { const [appUrl, setAppUrl] = useState('') const [username, setUsername] = useState('') const [password, setPassword] = useState('') const [loading, setLoading] = useState(false) const [error, setError] = useState(null) const firstInputRef = useRef(null) const dialogRef = useRef(null) useEffect(() => { const dialog = dialogRef.current if (!dialog) return dialog.showModal() firstInputRef.current?.focus() const handleCancel = (e: Event) => { e.preventDefault() onClose() } dialog.addEventListener('cancel', handleCancel) return () => dialog.removeEventListener('cancel', handleCancel) }, [onClose]) const handleSubmit = async (e: SyntheticEvent) => { e.preventDefault() setError(null) setLoading(true) try { const req: LoginRequest = { appUrl, serviceType, username, password, stayLoggedIn: true } await login(req) onSuccess() } catch (err) { setError(err instanceof Error ? err.message : 'Login failed') } finally { setLoading(false) } } return (
setAppUrl(e.target.value)} required />
setUsername(e.target.value)} required />
setPassword(e.target.value)} required />
{error &&

{error}

}
) }