"use client"; import { useState, useEffect, useRef, type ChangeEvent } from "react"; import { Input, Button, Card } from "@/components/ui"; interface ImageSelectorProps { value: string; onChange: (url: string) => void; label: string; } export default function ImageSelector({ value, onChange, label, }: ImageSelectorProps) { const [availableImages, setAvailableImages] = useState([]); const [uploading, setUploading] = useState(false); const [urlInput, setUrlInput] = useState(""); const [showGallery, setShowGallery] = useState(false); const fileInputRef = useRef(null); useEffect(() => { fetchAvailableImages(); }, []); const fetchAvailableImages = async () => { try { const response = await fetch("/api/admin/images/list"); if (response.ok) { const data = await response.json(); setAvailableImages(data.images || []); } } catch (error) { console.error("Error fetching images:", error); } }; const handleFileUpload = async (e: ChangeEvent) => { const file = e.target.files?.[0]; if (!file) return; setUploading(true); try { const formData = new FormData(); formData.append("file", file); const response = await fetch("/api/admin/images/upload", { method: "POST", body: formData, }); if (response.ok) { const data = await response.json(); onChange(data.url); await fetchAvailableImages(); // Rafraîchir la liste } else { alert("Erreur lors de l'upload de l'image"); } } catch (error) { console.error("Error uploading image:", error); alert("Erreur lors de l'upload de l'image"); } finally { setUploading(false); if (fileInputRef.current) { fileInputRef.current.value = ""; } } }; const handleUrlSubmit = () => { if (urlInput.trim()) { onChange(urlInput.trim()); setUrlInput(""); } }; return (
{/* Colonne gauche - Image */}
{value ? (
Preview { const target = e.currentTarget; // Ne pas boucler si l'image de fallback échoue aussi const currentSrc = target.src; const fallbackSrc = "/got-2.jpg"; if (!currentSrc.includes(fallbackSrc)) { target.src = fallbackSrc; } else { target.style.display = "none"; } }} />
) : (
Aucune
)}
{/* Colonne droite - Contrôles */}
{/* Input URL */}
setUrlInput(e.target.value)} onKeyPress={(e) => e.key === "Enter" && handleUrlSubmit()} placeholder="https://example.com/image.jpg ou /image.jpg" className="flex-1 text-xs sm:text-sm px-3 py-2 min-w-0" />
{/* Upload depuis le disque */}
{/* Chemin de l'image */} {value && (

{value}

)}
{/* Galerie d'images */} {showGallery && (

Images disponibles

{availableImages.length === 0 ? (
Aucune image disponible
) : ( availableImages.map((imageUrl) => ( )) )}
)}
); }