"use client"; import { useEffect, useState } from "react"; import { AnnonceProps } from "@/lib/types/AnnonceProps"; import { useRouter } from "next/navigation"; import Dropzone from "react-dropzone"; export default function EditAnnonceMainImg({ annonce }: { annonce: AnnonceProps }) { if (!annonce) { return (

Annonce introuvable

); } const router = useRouter(); const [initialMainPhoto, setInitialMainPhoto] = useState(null); const [photoPrincipaleFile, setphotoPrincipaleFile] = useState(null); const [previewUrl, setPreviewUrl] = useState(null); const [uploading, setUploading] = useState(false); const [imgError, setImgError] = useState(null); useEffect(() => { if (annonce.mainImg) { setPreviewUrl(`data:image/jpeg;base64,${annonce.mainImg}`); setInitialMainPhoto(`data:image/jpeg;base64,${annonce.mainImg}`); } }, [annonce.mainImg]); async function handleUploadImage() { if (!photoPrincipaleFile) return; setImgError(null); setUploading(true); try { const fd = new FormData(); fd.append("imagePrincipale", photoPrincipaleFile); const res = await fetch(`/api/annonces/${annonce.id}`, { method: "PATCH", body: fd, }); if (!res.ok) { const err = await res.json().catch(() => ({})); throw new Error(err.message || "Échec de la mise à jour de l'image."); } } catch (e: any) { setImgError(e.message ?? "Erreur inconnue"); } finally { setUploading(false); } } function onDrop(files: File[]) { const f = files[0]; if (!f) return; setphotoPrincipaleFile(f); setPreviewUrl(URL.createObjectURL(f)); } return (

Image princpale

{previewUrl && ( Image principale )}{" "}
{({ getRootProps, getInputProps }) => (

Glissez-déposez votre photo, ou cliquez pour sélectionner.

PNG, JPG, JPEG, WEBP (max 5 Mo)

)}
{previewUrl && (
)} {imgError &&

{imgError}

}
); }