"use client"; import { useState } from "react"; import { useRouter } from "next/navigation"; import Dropzone from "react-dropzone"; interface SessionUser { id: string; role: string; } export default function CreateAnnonceForm({ user }: { user: SessionUser }) { const router = useRouter(); const [codePostal, setCodePostal] = useState(""); const [country, setCountry] = useState(""); const [title, setTitle] = useState(""); const [address, setAddress] = useState(""); const [city, setCity] = useState(""); const [price, setPrice] = useState(""); const [description, setDescription] = useState(""); const [photoList, setPhotoList] = useState([]); const [error, setError] = useState(null); const [isSubmitting, setIsSubmitting] = useState(false); const handleSubmit = async (event: React.FormEvent) => { event.preventDefault(); setError(null); if (photoList.length === 0) { setError("Veuillez ajouter au moins une image pour l'annonce."); return; } setIsSubmitting(true); // On utilise FormData pour envoyer les champs et les fichiers dans la même requête const formData = new FormData(); formData.append("agentId", user.id); formData.append("title", title); formData.append("address", address); formData.append("pays", country); formData.append("ville", city); formData.append("codePostal", codePostal); formData.append("description", description); formData.append("prix", price); photoList.forEach((file) => { formData.append("images", file); }); try { const response = await fetch("/api/annonces", { method: "POST", body: formData, }); if (!response.ok) { const errorData = await response.json(); throw new Error(errorData.message || "Une erreur est survenue lors de la création de l'annonce."); } router.push("/"); } catch (error: any) { console.error("Erreur lors de la création de l'annonce:", error); setError(error.message); } finally { setIsSubmitting(false); } }; return (
{/* ... (tous vos inputs restent les mêmes) ... */}
setTitle(e.target.value)} className="mt-1 block w-full rounded-md border border-gray-300 px-3 py-2 text-gray-700 shadow-sm focus:border-gray-500 focus:ring-gray-500 focus:outline-none" />
setAddress(e.target.value)} className="mt-1 block w-full rounded-md border border-gray-300 px-3 py-2 text-gray-700 shadow-sm focus:border-gray-500 focus:ring-gray-500 focus:outline-none" />
setCountry(e.target.value)} className="mt-1 block w-full rounded-md border border-gray-300 px-3 py-2 text-gray-700 shadow-sm focus:border-gray-500 focus:ring-gray-500 focus:outline-none" />
setCity(e.target.value)} className="mt-1 block w-full rounded-md border border-gray-300 px-3 py-2 text-gray-700 shadow-sm focus:border-gray-500 focus:ring-gray-500 focus:outline-none" />
setCodePostal(e.target.value)} className="mt-1 block w-full rounded-md border border-gray-300 px-3 py-2 text-gray-700 shadow-sm focus:border-gray-500 focus:ring-gray-500 focus:outline-none" />
setPrice(e.target.value)} className="mt-1 block w-full rounded-md border border-gray-300 px-3 py-2 text-gray-700 shadow-sm focus:border-gray-500 focus:ring-gray-500 focus:outline-none" />