import {useState, useEffect, useCallback} from "react"; import { getEmailConfigsApi, createEmailConfigApi, updateEmailConfigApi, deleteEmailConfigApi, } from "@/api/email"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"; import {Card, CardContent, CardHeader, CardTitle} from "@/components/ui/card"; import {Button} from "@/components/ui/button"; import {Input} from "@/components/ui/input"; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter, } from "@/components/ui/dialog"; import {Loader2, Plus, Pencil, Trash, RefreshCw} from "lucide-react"; export default function EmailPage() { const [emails, setEmails] = useState([]); const [loading, setLoading] = useState(true); const [openModal, setOpenModal] = useState(false); const [editing, setEditing] = useState(null); const [searchText, setSearchText] = useState(""); const [form, setForm] = useState({ name: "", email: "", type: "APPOINTMENT", isActive: true, }); const fetchAll = useCallback(async () => { setLoading(true); try { const res = await getEmailConfigsApi(); setEmails(res?.data || []); } catch (err) { console.error(err); } finally { setLoading(false); } }, []); useEffect(() => { fetchAll(); }, [fetchAll]); const filtered = emails.filter( (e) => e.email.toLowerCase().includes(searchText.toLowerCase()) || e.name.toLowerCase().includes(searchText.toLowerCase()), ); function handleChange(e: any) { setForm({...form, [e.target.name]: e.target.value}); } function openAdd() { setEditing(null); setForm({ name: "", email: "", type: "APPOINTMENT", isActive: true, }); setOpenModal(true); } function openEdit(item: any) { setEditing(item); setForm(item); setOpenModal(true); } async function handleSubmit() { try { if (editing) { await updateEmailConfigApi(editing.id, form); } else { await createEmailConfigApi(form); } setOpenModal(false); fetchAll(); } catch (err) { console.error(err); } } async function handleDelete(id: number) { if (!confirm("Delete email config?")) return; await deleteEmailConfigApi(id); fetchAll(); } return (

Email Config

setSearchText(e.target.value)} className="w-[200px]" />
Email List ID Name Email Type Status Actions {loading ? ( ) : filtered.length === 0 ? ( No data ) : ( filtered.map((item) => ( {item.id} {item.name} {item.email} {item.type} {item.isActive ? "Active" : "Inactive"} )) )}
{editing ? "Edit Email" : "Add Email"}
); }