/* eslint-disable @next/next/no-img-element */ import { ImagesIcon, PlusIcon } from 'lucide-react'; import { useState } from 'react'; import Lightbox from 'yet-another-react-lightbox'; import 'yet-another-react-lightbox/styles.css'; import { Message } from './ChatWindow'; type Image = { url: string; img_src: string; title: string; }; const SearchImages = ({ query, chatHistory, }: { query: string; chatHistory: Message[]; }) => { const [images, setImages] = useState(null); const [loading, setLoading] = useState(false); const [open, setOpen] = useState(false); const [slides, setSlides] = useState([]); const handleSearch = async () => { setLoading(true); try { console.log("🖼️ Démarrage de la recherche d'images pour:", query); const chatModelProvider = localStorage.getItem('chatModelProvider'); const chatModel = localStorage.getItem('chatModel'); console.log("🖼️ Modèle configuré:", chatModelProvider, chatModel); const response = await fetch('/api/images', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ query: query, chatHistory: chatHistory, chatModel: { provider: chatModelProvider, model: chatModel, }, }), }); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } const data = await response.json(); console.log('🖼️ Résultats de la recherche:', data); if (data.images && data.images.length > 0) { setImages(data.images); setSlides( data.images.map((image: Image) => ({ src: image.img_src, })) ); console.log('🖼️ Images et slides mis à jour:', data.images.length); } else { console.log('🖼️ Aucune image trouvée'); } } catch (error) { console.error('🖼️ Erreur lors de la recherche:', error); } finally { setLoading(false); } }; return ( <> {!loading && images === null && ( )} {loading && (
{[...Array(4)].map((_, i) => (
))}
)} {images !== null && images.length > 0 && ( <>
{images.length > 4 ? images.slice(0, 3).map((image, i) => ( { setOpen(true); setSlides([ slides[i], ...slides.slice(0, i), ...slides.slice(i + 1), ]); }} key={i} src={image.img_src} alt={image.title} className="h-full w-full aspect-video object-cover rounded-lg transition duration-200 active:scale-95 hover:scale-[1.02] cursor-zoom-in" /> )) : images.map((image, i) => ( { setOpen(true); setSlides([ slides[i], ...slides.slice(0, i), ...slides.slice(i + 1), ]); }} key={i} src={image.img_src} alt={image.title} className="h-full w-full aspect-video object-cover rounded-lg transition duration-200 active:scale-95 hover:scale-[1.02] cursor-zoom-in" /> ))} {images.length > 4 && ( )}
setOpen(false)} slides={slides} /> )} ); }; export default SearchImages;