"use client"; import { useState, useEffect } from "react"; import { useRouter } from "next/navigation"; import { getSentMailList, updateDraft, deleteSentMail, bulkDeleteMails, type SentMailHistory } from "@/lib/api/mail"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; import { Checkbox } from "@/components/ui/checkbox"; import { Edit, Trash2, Loader2, Mail } from "lucide-react"; import { format } from "date-fns"; import { ko } from "date-fns/locale"; export default function DraftsPage() { const router = useRouter(); const [drafts, setDrafts] = useState([]); const [loading, setLoading] = useState(true); const [deleting, setDeleting] = useState(null); const [selectedIds, setSelectedIds] = useState([]); const [bulkDeleting, setBulkDeleting] = useState(false); useEffect(() => { loadDrafts(); }, []); const loadDrafts = async () => { try { setLoading(true); const response = await getSentMailList({ status: "draft", sortBy: "updatedAt", sortOrder: "desc", }); // console.log('πŸ“‹ μž„μ‹œ μ €μž₯ λͺ©λ‘ 쑰회:', response); // console.log('πŸ“‹ μž„μ‹œ μ €μž₯ 개수:', response.items.length); setDrafts(response.items); } catch (error) { // console.error("❌ μž„μ‹œ μ €μž₯ 메일 λ‘œλ“œ μ‹€νŒ¨:", error); } finally { setLoading(false); } }; const handleEdit = (draft: SentMailHistory) => { // μž„μ‹œ μ €μž₯ 메일을 메일 λ°œμ†‘ νŽ˜μ΄μ§€λ‘œ 전달 const params = new URLSearchParams({ draftId: draft.id, to: draft.to.join(","), cc: draft.cc?.join(",") || "", bcc: draft.bcc?.join(",") || "", subject: draft.subject, content: draft.htmlContent, accountId: draft.accountId, }); router.push(`/admin/automaticMng/mail/send?${params.toString()}`); }; const handleDelete = async (id: string) => { if (!confirm("이 μž„μ‹œ μ €μž₯ 메일을 μ‚­μ œν•˜μ‹œκ² μŠ΅λ‹ˆκΉŒ?")) return; try { setDeleting(id); await deleteSentMail(id); setDrafts(drafts.filter((d) => d.id !== id)); setSelectedIds(selectedIds.filter((selectedId) => selectedId !== id)); } catch (error) { // console.error("μž„μ‹œ μ €μž₯ 메일 μ‚­μ œ μ‹€νŒ¨:", error); alert("μ‚­μ œμ— μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€."); } finally { setDeleting(null); } }; const handleBulkDelete = async () => { if (selectedIds.length === 0) { alert("μ‚­μ œν•  메일을 μ„ νƒν•΄μ£Όμ„Έμš”."); return; } if (!confirm(`μ„ νƒν•œ ${selectedIds.length}개의 μž„μ‹œ μ €μž₯ 메일을 μ‚­μ œν•˜μ‹œκ² μŠ΅λ‹ˆκΉŒ?`)) return; try { setBulkDeleting(true); const result = await bulkDeleteMails(selectedIds); setDrafts(drafts.filter((d) => !selectedIds.includes(d.id))); setSelectedIds([]); alert(result.message); } catch (error) { // console.error("일괄 μ‚­μ œ μ‹€νŒ¨:", error); alert("일괄 μ‚­μ œμ— μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€."); } finally { setBulkDeleting(false); } }; const handleSelectAll = () => { if (selectedIds.length === drafts.length) { setSelectedIds([]); } else { setSelectedIds(drafts.map((d) => d.id)); } }; const handleSelectOne = (id: string) => { if (selectedIds.includes(id)) { setSelectedIds(selectedIds.filter((selectedId) => selectedId !== id)); } else { setSelectedIds([...selectedIds, id]); } }; if (loading) { return (
); } return (

μž„μ‹œλ³΄κ΄€ν•¨

μž‘μ„± 쀑인 메일이 μžλ™μœΌλ‘œ μ €μž₯λ©λ‹ˆλ‹€

{drafts.length === 0 ? (

μž„μ‹œ μ €μž₯된 메일이 μ—†μŠ΅λ‹ˆλ‹€

) : (
{drafts.map((draft) => (
{draft.subject || "(제λͺ© μ—†μŒ)"} λ°›λŠ” μ‚¬λžŒ: {draft.to.join(", ") || "(μ—†μŒ)"}
계정: {draft.accountName || draft.accountEmail} {draft.updatedAt ? format(new Date(draft.updatedAt), "yyyy-MM-dd HH:mm", { locale: ko }) : format(new Date(draft.sentAt), "yyyy-MM-dd HH:mm", { locale: ko })}
{draft.htmlContent && (
]*>/g, "").substring(0, 100), }} /> )} ))}
)}
); }