"use client"; import { GalleryImg } from "@/lib/types/GalleryImgeProp"; import { useEffect, useState } from "react"; import Dropzone from "react-dropzone"; import { useRouter } from "next/navigation"; export default function EditAnnonceOtherImg({ annonceId, annonceGallery, }: { annonceId: number; annonceGallery: GalleryImg[] | undefined; }) { const [originalImages, setOriginalImages] = useState([]); const [previewImages, setPreviewImages] = useState([]); const [pendingFiles, setPendingFiles] = useState([]); const [uploading, setUploading] = useState(false); const [error, setError] = useState(null); const router = useRouter(); useEffect(() => { if (annonceGallery?.length) { const urls = annonceGallery.map((img) => `data:image/jpeg;base64,${img.imageData}`); setOriginalImages(urls); setPreviewImages(urls) } }, [annonceGallery]); function onDrop(files: File[]) { if (!files?.length) return; setPendingFiles((prev) => [...prev, ...files]); } async function handleUploadImages() { if (!pendingFiles.length) return; setUploading(true); setError(null); const fd = new FormData(); pendingFiles.forEach((f) => fd.append("files", f)); const dataUrls: string[] = pendingFiles.map((f) => URL.createObjectURL(f)); try { const res = await fetch(`/api/annonces/${annonceId}/gallery`, { method: "POST", body: fd, }); if (!res.ok) { const err = await res.json().catch(() => ({})); throw new Error(err.error || "Échec de l'upload des images."); } setPreviewImages((prev) => [...dataUrls, ...prev]); setPendingFiles([]); } catch (e: any) { console.error(e); setError(e.message ?? "Erreur lors de l'upload des images."); } finally { setUploading(false); } } return (

Galerie photo

{originalImages.length > 0 ? (
{previewImages.map((src, i) => (
{`Image
))}
) : (

Aucune image dans la galerie.

)} {({ getRootProps, getInputProps }) => (

Glissez-déposez vos photos, ou cliquez pour sélectionner. (max 10)

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

)}
{pendingFiles.length > 0 && (
{pendingFiles.map((file, i) => { const preview = URL.createObjectURL(file); return (
{`Preview
); })}
)} {error &&

{error}

}
{" "}
); }