"use client"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { RefreshCw, Calendar as CalendarIcon, ChevronRight } from "lucide-react"; import { useRouter } from "next/navigation"; import Link from "next/link"; import { format, isToday, isTomorrow } from "date-fns"; import { fr } from "date-fns/locale"; import { useCalendarEvents, CalendarEvent } from "@/hooks/use-calendar-events"; interface CalendarProps { limit?: number; showMore?: boolean; showRefresh?: boolean; cardClassName?: string; } export function Calendar({ limit = 5, showMore = true, showRefresh = true, cardClassName = "transition-transform duration-500 ease-in-out transform hover:scale-105 bg-white/95 backdrop-blur-sm border-0 shadow-lg" }: CalendarProps) { const { events, loading, error, refresh } = useCalendarEvents({ limit }); const router = useRouter(); const formatEventDate = (date: Date | string, isAllDay: boolean) => { const eventDate = date instanceof Date ? date : new Date(date); let dateString = ""; if (isToday(eventDate)) { dateString = "Today"; } else if (isTomorrow(eventDate)) { dateString = "Tomorrow"; } else { dateString = format(eventDate, "EEEE d MMMM", { locale: fr }); } if (!isAllDay) { dateString += ` ยท ${format(eventDate, "HH:mm", { locale: fr })}`; } return dateString; }; return ( Calendar
{showRefresh && ( )} {showMore && ( )}
{loading ? (
) : error ? (
{error}
) : events.length === 0 ? (
No upcoming events
) : (
{events.map((event) => (
{format(event.start instanceof Date ? event.start : new Date(event.start), 'MMM', { locale: fr })} {format(event.start instanceof Date ? event.start : new Date(event.start), 'dd', { locale: fr })}

{event.title}

{!event.isAllDay && ( {format(event.start instanceof Date ? event.start : new Date(event.start), 'HH:mm', { locale: fr })} - {format(event.end instanceof Date ? event.end : new Date(event.end), 'HH:mm', { locale: fr })} )}
{event.calendarName || 'Calendar'}
))} {showMore && ( )}
)} ); }