"use client"; import { useEffect, useRef, useState } from "react"; import { sendEmailAction, type ApiResponse, type EmailRequest } from "@/app/actions/sendEmail"; import { Button, Field, Input, Textarea } from "@/components/ui/form"; export default function SendEmailForm(): JSX.Element { const [result, setResult] = useState< ApiResponse | { error: string } | null >(null); const [submitting, setSubmitting] = useState(false); const [showSuccess, setShowSuccess] = useState(false); const successTimerRef = useRef | null>(null); useEffect(() => { return () => { if (successTimerRef.current) clearTimeout(successTimerRef.current); }; }, []); async function onSubmit(e: React.FormEvent): Promise { e.preventDefault(); setResult(null); setShowSuccess(false); if (successTimerRef.current) clearTimeout(successTimerRef.current); const form = new FormData(e.currentTarget); const recipient = String(form.get("recipient") ?? ""); const subject = String(form.get("subject") ?? ""); const body = String(form.get("body") ?? ""); try { setSubmitting(true); const data = await sendEmailAction({ recipient, subject, body }); setResult(data); if (data?.success === true) { setShowSuccess(true); successTimerRef.current = setTimeout(() => { setShowSuccess(false); setResult(null); // clear the response panel too }, 2000); } } catch (err) { const message = err instanceof Error ? err.message : "Unknown error"; setResult({ error: message }); } finally { setSubmitting(false); } } return (

Send Email

Compose a message and send it from the admin panel.

{result && "error" in result && (
{result.error}
)}