"use client"; import { useState } from "react"; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter, } from "@/components/ui/dialog"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Textarea } from "@/components/ui/textarea"; import { Checkbox } from "@/components/ui/checkbox"; import { parseISO, format } from "date-fns"; import { fr } from "date-fns/locale"; import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, } from "../ui/alert-dialog"; interface EventDialogProps { open: boolean; event?: any; onClose: () => void; onSave: (event: any) => void; onDelete?: (eventId: string) => void; } export function EventDialog({ open, event, onClose, onSave, onDelete, }: EventDialogProps) { const [title, setTitle] = useState(event?.title || ""); const [description, setDescription] = useState(event?.description || ""); const [location, setLocation] = useState(event?.location || ""); const [start, setStart] = useState(event?.start || ""); const [end, setEnd] = useState(event?.end || ""); const [allDay, setAllDay] = useState(event?.allDay || false); const [confirmDelete, setConfirmDelete] = useState(false); // Formater les dates pour l'affichage const formatDate = (dateStr: string) => { if (!dateStr) return ""; try { // @ts-ignore const date = parseISO(dateStr); // @ts-ignore return format(date, allDay ? "yyyy-MM-dd" : "yyyy-MM-dd'T'HH:mm", { // @ts-ignore locale: fr, }); } catch (e) { return dateStr; } }; // Gérer le changement de l'option "Toute la journée" const handleAllDayChange = (checked: boolean) => { setAllDay(checked); // Ajuster les dates si nécessaire if (checked && start) { // @ts-ignore const startDate = parseISO(start); // @ts-ignore setStart(format(startDate, "yyyy-MM-dd")); if (end) { // @ts-ignore const endDate = parseISO(end); // @ts-ignore setEnd(format(endDate, "yyyy-MM-dd")); } } }; // Enregistrer l'événement const handleSave = () => { onSave({ id: event?.id, title, description, location, start, end, isAllDay: allDay, }); }; // Supprimer l'événement const handleDelete = () => { if (onDelete && event?.id) { onDelete(event.id); } }; return ( <> {event?.id ? "Modifier l'événement" : "Nouvel événement"} Titre * setTitle(e.target.value)} placeholder='Ajouter un titre' required /> Description setDescription(e.target.value)} placeholder="Description de l'événement" className='min-h-[100px]' /> Lieu setLocation(e.target.value)} placeholder='Emplacement' /> Toute la journée Début * setStart(e.target.value)} required /> Fin * setEnd(e.target.value)} required /> {event?.id && onDelete && ( setConfirmDelete(true)} > Supprimer )} Annuler Enregistrer {/* Dialogue de confirmation de suppression */} Confirmer la suppression Êtes-vous sûr de vouloir supprimer cet événement ? Cette action est irréversible. Annuler Supprimer > ); }