"use client"; import { useTransition, useState, useEffect } from 'react'; import { useRouter } from 'next/navigation'; import { createEvent, updateEvent } from '@/app/actions/event'; import { Loader2, ArrowLeft, Save, Calendar, MapPin, Link as LinkIcon, Send } from 'lucide-react'; import Link from 'next/link'; import { toast } from 'react-hot-toast'; import RichTextEditor from './RichTextEditor'; import ImageUploader from './ImageUploader'; import TagInput from './TagInput'; import { ContentStatus } from '@prisma/client'; import { getAllTags } from '@/app/actions/taxonomies'; interface Props { initialData?: any; } export default function EventForm({ initialData }: Props) { const router = useRouter(); const [isPending, startTransition] = useTransition(); const [description, setDescription] = useState(initialData?.description || ''); const [thumbnailUrl, setThumbnailUrl] = useState(initialData?.thumbnailUrl || ''); const [tags, setTags] = useState(initialData?.tags || []); const [allExistingTags, setAllExistingTags] = useState([]); const [publishedAtValue, setPublishedAtValue] = useState( initialData?.publishedAt ? new Date(initialData.publishedAt).toISOString().slice(0, 16) : new Date().toISOString().slice(0, 16) ); const isPublished = new Date(publishedAtValue) <= new Date(); useEffect(() => { getAllTags().then(setAllExistingTags); }, []); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); const formData = new FormData(e.currentTarget); const publishedAtStr = formData.get('publishedAt') as string; const data: any = { title: formData.get('title') as string, slug: formData.get('slug') as string, location: formData.get('location') as string, date: new Date(formData.get('date') as string), thumbnailUrl: thumbnailUrl, // Use state value link: formData.get('link') as string || null, description: description || '', tags: tags, // Use state metaTitle: formData.get('metaTitle') as string, metaDescription: formData.get('metaDescription') as string, publishedAt: publishedAtStr ? new Date(publishedAtStr) : undefined, status: formData.get('status') as ContentStatus, }; if (!data.thumbnailUrl) { toast.error("Une image est requise"); return; } startTransition(async () => { const result = initialData ? await updateEvent(initialData.id, data) : await createEvent(data); if (result.success) { toast.success(initialData ? "Événement mis à jour" : "Événement créé avec succès"); router.push('/actualites'); router.refresh(); } else { toast.error(result.error || "Une erreur est survenue"); } }); }; return (

{initialData ? 'Modifier l\'événement' : 'Nouvel Événement'}

Informations Générales

setPublishedAtValue(e.target.value)} className="w-full bg-slate-900 border border-slate-700 rounded-lg p-3 pl-10 text-white focus:outline-none focus:border-indigo-500" />
{/* SEO SECTION */}

Optimisation SEO

Laissez vide pour générer automatiquement à partir du titre.