From 9c1f814aca4504a6c896341dce470dd026ed591a Mon Sep 17 00:00:00 2001 From: alma Date: Wed, 23 Apr 2025 11:09:56 +0200 Subject: [PATCH] clean without courrier and calendar --- app/page.tsx | 4 + components/mail/courrier-widget.tsx | 138 ++++++++++++++++++++++++++++ 2 files changed, 142 insertions(+) create mode 100644 components/mail/courrier-widget.tsx diff --git a/app/page.tsx b/app/page.tsx index 81d22369..68eef8c5 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -5,6 +5,7 @@ import { CalendarWidget } from "@/components/calendar-widget"; import { News } from "@/components/news"; import { Duties } from "@/components/flow"; import { Parole } from "@/components/parole"; +import { CourrierWidget } from "@/components/mail/courrier-widget"; import { useSession } from "next-auth/react"; import { useEffect, useState } from "react"; @@ -46,6 +47,9 @@ export default function Home() {
+
+ +
diff --git a/components/mail/courrier-widget.tsx b/components/mail/courrier-widget.tsx new file mode 100644 index 00000000..a4f8a8ab --- /dev/null +++ b/components/mail/courrier-widget.tsx @@ -0,0 +1,138 @@ +"use client"; + +import { useEffect, useState } from "react"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; +import { Button } from "@/components/ui/button"; +import { RefreshCw, Mail } from "lucide-react"; +import { useRouter } from "next/navigation"; +import { useSession } from "next-auth/react"; + +interface Email { + id: string; + subject: string; + from: string; + fromName: string; + date: string; + read: boolean; + starred: boolean; + hasAttachments: boolean; +} + +export function CourrierWidget() { + const [emails, setEmails] = useState([]); + const [error, setError] = useState(null); + const [loading, setLoading] = useState(true); + const [refreshing, setRefreshing] = useState(false); + const router = useRouter(); + const { status } = useSession(); + + const fetchEmails = async (isRefresh = false) => { + try { + if (isRefresh) { + setRefreshing(true); + } + + const response = await fetch('/api/courrier'); + if (!response.ok) { + throw new Error('Failed to fetch emails'); + } + + const data = await response.json(); + if (Array.isArray(data.emails)) { + setEmails(data.emails.slice(0, 5)); + } else { + console.warn('Unexpected data format:', data); + setEmails([]); + } + setError(null); + } catch (err) { + console.error('Error fetching emails:', err); + const errorMessage = err instanceof Error ? err.message : 'Failed to fetch emails'; + setError(errorMessage); + } finally { + setLoading(false); + setRefreshing(false); + } + }; + + useEffect(() => { + if (status === 'authenticated') { + fetchEmails(); + } + }, [status]); + + const formatDate = (dateString: string) => { + const date = new Date(dateString); + const now = new Date(); + const diff = now.getTime() - date.getTime(); + const days = Math.floor(diff / (1000 * 60 * 60 * 24)); + + if (days === 0) { + return date.toLocaleTimeString('fr-FR', { hour: '2-digit', minute: '2-digit' }); + } else if (days === 1) { + return 'Hier'; + } else if (days < 7) { + return date.toLocaleDateString('fr-FR', { weekday: 'long' }); + } else { + return date.toLocaleDateString('fr-FR', { day: '2-digit', month: '2-digit', year: '2-digit' }); + } + }; + + return ( + router.push('/courrier')} + > + + + + Courrier + + + + + {loading ? ( +
+
+
+ ) : error ? ( +
{error}
+ ) : emails.length === 0 ? ( +
No emails found
+ ) : ( +
+ {emails.map((email) => ( +
+
+
+ {formatDate(email.date)} +
+

+ {email.subject} +

+

+ {email.fromName} +

+
+
+ ))} +
+ )} + + + ); +} \ No newline at end of file