"use client"; import React, { useState, useTransition } from 'react'; import { X, Calendar, MapPin, Link as LinkIcon, Image as ImageIcon, AlertTriangle, Loader2 } from 'lucide-react'; import { createEvent } from '@/app/actions/events'; import { uploadImage } from '@/app/actions/upload'; import { toast } from 'react-hot-toast'; interface CreateEventModalProps { isOpen: boolean; onClose: () => void; } export default function CreateEventModal({ isOpen, onClose }: CreateEventModalProps) { const [isPending, startTransition] = useTransition(); const [imagePreview, setImagePreview] = useState(null); const [uploading, setUploading] = useState(false); if (!isOpen) return null; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); const formData = new FormData(e.currentTarget); const data = { title: formData.get('title') as string, description: formData.get('description') as string, date: formData.get('date') as string, location: formData.get('location') as string, thumbnailUrl: imagePreview || "https://picsum.photos/800/400?random=event", link: formData.get('link') as string || undefined, }; if (!data.title || !data.description || !data.date || !data.location) { toast.error("Veuillez remplir tous les champs obligatoires"); return; } startTransition(async () => { const result = await createEvent(data); if (result.success) { toast.success("Événement soumis avec succès !"); onClose(); } else { toast.error(result.error || "Une erreur est survenue"); } }); }; const handleImageChange = async (e: React.ChangeEvent) => { const file = e.target.files?.[0]; if (!file) return; setUploading(true); const formData = new FormData(); formData.append('file', file); const result = await uploadImage(formData); if (result.success && result.url) { setImagePreview(result.url); } else { toast.error(result.error || "Erreur lors de l'upload"); } setUploading(false); }; return (

Publier un événement

Partagez votre actualité avec la communauté

{/* Warning */}

Information importante

Votre événement sera soumis à la validation de notre équipe de modération avant d'être publié sur la plateforme (généralement sous 24h).

{imagePreview ? (
Preview
) : ( <> {uploading ? ( ) : ( )}

Cliquez pour ajouter une image

PNG, JPG, JPEG jusqu'à 5Mo

)}
); }