"use client"; import { useCallback, useEffect, useState } from "react"; import { fetchEmailRequests, createEmailRequest, updateEmailRequest, deleteEmailRequest, type EmailRequest, type CreateEmailRequestDto, type UpdateEmailRequestDto, } from "@/lib/api/emailRequests"; import { Pencil, Trash2, Plus, X } from "lucide-react"; import { formatDate } from "@/lib/dateFormattingUtility"; export default function AdminEmailPage() { const [emails, setEmails] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [showModal, setShowModal] = useState(false); const [modalMode, setModalMode] = useState<"create" | "edit">("create"); const [selectedEmail, setSelectedEmail] = useState(null); const [formData, setFormData] = useState({ email: "", status: "", }); const [submitting, setSubmitting] = useState(false); const loadEmails = useCallback(async () => { try { setLoading(true); const data = await fetchEmailRequests(); setEmails(data); setError(null); } catch (e: any) { console.error(e); setError(e?.message ?? "Failed to load email requests"); } finally { setLoading(false); } }, []); useEffect(() => { loadEmails(); }, [loadEmails]); const handleCreate = () => { setModalMode("create"); setFormData({ email: "", status: "" }); setSelectedEmail(null); setShowModal(true); }; const handleEdit = (email: EmailRequest) => { setModalMode("edit"); setFormData({ email: email.email, status: email.status }); setSelectedEmail(email); setShowModal(true); }; const handleDelete = async (id: number) => { if (!confirm("Are you sure you want to delete this email request?")) return; try { await deleteEmailRequest(id); await loadEmails(); } catch (e: any) { alert(e?.message ?? "Failed to delete email request"); } }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); try { setSubmitting(true); if (modalMode === "create") { await createEmailRequest(formData); } else if (selectedEmail) { const updateData: UpdateEmailRequestDto = {}; if (formData.email !== selectedEmail.email) updateData.email = formData.email; if (formData.status !== selectedEmail.status) updateData.status = formData.status; await updateEmailRequest(selectedEmail.id, updateData); } setShowModal(false); await loadEmails(); } catch (e: any) { alert(e?.message ?? "Failed to save email request"); } finally { setSubmitting(false); } }; return (
{/* Header */}

Processed E-mail

Manage email requests and their statuses.

{/* Error */} {error && (
{error}
)} {/* Table */} {loading ? (
Loading…
) : (
{emails.map((email) => ( ))} {emails.length === 0 && ( )}
ID Email Status Created At Updated At Actions
{email.id} {email.recipient} {email.status} {new Date(email.createdAt).toLocaleString()} {formatDate(email.updatedAt)}
No email requests found.
)} {/* Modal */} {showModal && (

{modalMode === "create" ? "Create Email Request" : "Edit Email Request"}

setFormData({ ...formData, email: e.target.value })} className="w-full rounded-md border border-zinc-800 bg-zinc-900 px-3 py-2 text-sm text-zinc-100 placeholder-zinc-500 focus:border-emerald-500 focus:outline-none focus:ring-1 focus:ring-emerald-500" placeholder="user@example.com" required />
setFormData({ ...formData, status: e.target.value })} className="w-full rounded-md border border-zinc-800 bg-zinc-900 px-3 py-2 text-sm text-zinc-100 placeholder-zinc-500 focus:border-emerald-500 focus:outline-none focus:ring-1 focus:ring-emerald-500" placeholder="pending" />
)}
); }