import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { Badge } from "@/components/ui/badge"; import { Calendar as CalendarIcon, Plus, RefreshCw, Edit, ExternalLink } from "lucide-react"; import { CalendarEvent } from "@/services/CalendarService"; import CalendarService from "@/services/CalendarService"; import { showError, showSuccess } from "@/utils/toast"; interface CalendarSectionProps { calendarEvents: CalendarEvent[]; paginatedCalendarEvents: CalendarEvent[]; calendarPage: number; totalCalendarPages: number; onAddEvent: () => void; onEditEvent: (event: CalendarEvent) => void; onPageChange: (page: number) => void; onShowAdmin: () => void; loadCalendarEvents: () => Promise; } export const CalendarSection = ({ calendarEvents, paginatedCalendarEvents, calendarPage, totalCalendarPages, onAddEvent, onEditEvent, onPageChange, onShowAdmin, loadCalendarEvents }: CalendarSectionProps) => { const handleSync = async () => { try { const result = await CalendarService.sync(); showSuccess(`${result.syncedCount} événements synchronisés`); await loadCalendarEvents(); } catch (error) { showError("Erreur lors de la synchronisation"); } }; return (
Rendez-vous
{calendarEvents.length > 0 ? ( paginatedCalendarEvents.map(event => { const startDate = new Date(event.start_time); const endDate = new Date(event.end_time); const isToday = startDate.toDateString() === new Date().toDateString(); const isSoon = startDate.getTime() - new Date().getTime() < 30 * 60 * 1000 && startDate > new Date(); // Détecter les événements "toute la journée" const isAllDay = event.all_day || (startDate.getHours() === 0 && startDate.getMinutes() === 0) || (startDate.getHours() === 1 && startDate.getMinutes() === 0 && endDate.getHours() === 1); return (
event.html_link && window.open(event.html_link, '_blank')} >

{event.title}

{isToday ? "Aujourd'hui" : startDate.toLocaleDateString('fr-FR', { day: '2-digit', month: '2-digit', timeZone: 'Europe/Paris' })} {isAllDay ? ' - Toute la journée' : ` à ${startDate.toLocaleTimeString('fr-FR', { hour: '2-digit', minute: '2-digit', timeZone: 'Europe/Paris' })}`}

{event.location && (

📍 {event.location}

)} {isSoon && ( Dans moins de 30 min )}
event.html_link && window.open(event.html_link, '_blank')} />
); }) ) : (

Aucun rendez-vous à venir

)}
{totalCalendarPages > 1 && (
{calendarPage + 1}/{totalCalendarPages}
)}
); }; export default CalendarSection;