"use client"; import { useEffect, useState } from "react"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { RefreshCw, MessageSquare, Mail, MailOpen, Loader2 } from "lucide-react"; import Link from 'next/link'; import { useSession } from "next-auth/react"; interface Email { id: string; subject: string; from: string; fromName?: string; date: string; read: boolean; starred: boolean; folder: string; } interface EmailProps { limit?: number; showTitle?: boolean; showRefresh?: boolean; showMoreLink?: boolean; folder?: string; cardClassName?: string; title?: string; } export function Email({ limit = 5, showTitle = true, showRefresh = true, showMoreLink = true, folder = "INBOX", cardClassName = "h-full", title = "Unread Emails" }: EmailProps) { const [emails, setEmails] = useState([]); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); const [mailUrl, setMailUrl] = useState(null); const { status } = useSession(); useEffect(() => { if (status === "authenticated") { fetchEmails(); } }, [status, folder, limit]); const fetchEmails = async (isRefresh = false) => { setLoading(true); setError(null); try { const response = await fetch(`/api/courrier?folder=${folder}&page=1&perPage=${limit}`); if (!response.ok) { throw new Error('Failed to fetch emails'); } const data = await response.json(); if (data.error) { setError(data.error); setEmails([]); } else { // Transform data format if needed const transformedEmails = data.emails.map((email: any) => ({ id: email.id, subject: email.subject || '(No subject)', from: email.from[0]?.address || '', fromName: email.from[0]?.name || '', date: email.date, read: email.flags.seen, starred: email.flags.flagged, folder: email.folder })).slice(0, limit); setEmails(transformedEmails); setMailUrl('/courrier'); } } catch (error) { setError('Failed to load emails'); setEmails([]); } finally { setLoading(false); } }; const formatDate = (dateString: string) => { try { const date = new Date(dateString); return new Intl.DateTimeFormat('fr-FR', { month: 'short', day: 'numeric' }).format(date); } catch (e) { return ''; } }; const renderContent = () => { if (error) { return (
{error}
); } if (loading && emails.length === 0) { return (

Loading emails...

); } if (emails.length === 0) { return (

No emails found

); } return (
{emails.map((email) => (
{email.read ? : }

{email.fromName || email.from.split('@')[0]}

{formatDate(email.date)}

{email.subject}

))} {showMoreLink && mailUrl && (
View all emails →
)}
); }; return ( {showTitle && ( {title} {showRefresh && ( )} )} {renderContent()} ); }