function ComposeModal({ open, onClose, onSend, addresses, defaultFrom, busy }) { const [from, setFrom] = React.useState(defaultFrom || ""); const [to, setTo] = React.useState(""); const [cc, setCc] = React.useState(""); const [bcc, setBcc] = React.useState(""); const [showCc, setShowCc] = React.useState(false); const [subject, setSubject] = React.useState(""); const [text, setText] = React.useState(""); const [error, setError] = React.useState(""); const [sent, setSent] = React.useState(""); React.useEffect(() => { if (!open) return; setError(""); setSent(""); setFrom((prev) => prev || defaultFrom || (addresses || [])[0] || ""); }, [open, defaultFrom, addresses]); if (!open) return null; const field = "w-full bg-paper border border-paper-line rounded px-3 py-2 text-sm text-ink placeholder:text-ink-dim focus:outline-none focus:border-accent"; const btn = "text-xs px-2.5 py-1 rounded border border-paper-line text-ink-muted hover:border-accent hover:text-accent"; const reset = () => { setTo(""); setCc(""); setBcc(""); setShowCc(false); setSubject(""); setText(""); }; const submit = (e) => { e.preventDefault(); if (busy) return; setError(""); setSent(""); if (!to.trim()) return setError("Add at least one recipient."); if (!subject.trim()) return setError("Subject is required."); if (!text.trim()) return setError("Message body is required."); onSend({ from, to: to.trim(), cc: cc.trim(), bcc: bcc.trim(), subject: subject.trim(), text }) .then((res) => { setSent("Sent to " + (Array.isArray(res?.to) ? res.to.join(", ") : to.trim())); reset(); }) .catch((err) => setError(String(err.message || err))); }; return (
{ if (e.target === e.currentTarget) onClose(); }} >
New message
{showCc ? (
) : ( )}