"use client"; import { useEffect, useState } from "react"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { RefreshCw, Calendar as CalendarIcon } from "lucide-react"; import { useRouter } from "next/navigation"; interface Event { id: string; title: string; start: string; end: string; allDay: boolean; calendar: string; calendarColor: string; } export function Calendar() { const [events, setEvents] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const router = useRouter(); const fetchEvents = async () => { setLoading(true); try { const response = await fetch('/api/calendars?refresh=true'); if (!response.ok) { throw new Error('Failed to fetch events'); } const calendarsData = await response.json(); console.log('Calendar Widget - Fetched calendars:', calendarsData); // Get current date at the start of the day const now = new Date(); now.setHours(0, 0, 0, 0); // Extract and process events from all calendars const allEvents = calendarsData.flatMap((calendar: any) => (calendar.events || []).map((event: any) => ({ id: event.id, title: event.title, start: event.start, end: event.end, allDay: event.isAllDay, calendar: calendar.name, calendarColor: calendar.color })) ); // Filter for upcoming events const upcomingEvents = allEvents .filter((event: any) => new Date(event.start) >= now) .sort((a: any, b: any) => new Date(a.start).getTime() - new Date(b.start).getTime()) .slice(0, 7); console.log('Calendar Widget - Processed events:', upcomingEvents); setEvents(upcomingEvents); setError(null); } catch (err) { console.error('Error fetching events:', err); setError('Failed to load events'); } finally { setLoading(false); } }; useEffect(() => { fetchEvents(); }, []); const formatDate = (dateString: string) => { const date = new Date(dateString); return new Intl.DateTimeFormat('fr-FR', { day: '2-digit', month: 'short' }).format(date); }; const formatTime = (dateString: string) => { const date = new Date(dateString); return new Intl.DateTimeFormat('fr-FR', { hour: '2-digit', minute: '2-digit', }).format(date); }; return ( Agenda {loading ? (
) : error ? (
{error}
) : events.length === 0 ? (
No upcoming events
) : (
{events.map((event) => (
{formatDate(event.start)} {formatTime(event.start)}

{event.title}

{!event.allDay && ( {formatTime(event.start)} - {formatTime(event.end)} )}
{event.calendar}
))}
)} ); }