import React, { useState, useRef, useEffect } from 'react'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import { faSearch, faPlus } from '@fortawesome/free-solid-svg-icons'; import { MockMangaRepository } from '../../../infrastructure/api/mockMangaRepository.js'; import { SearchMangas } from '../../../application/useCases/searchMangas.js'; const mangaRepository = new MockMangaRepository(); const searchMangas = new SearchMangas(mangaRepository); export function SearchBar({ onMangaClick, onAddMangaClick }) { const [query, setQuery] = useState(''); const [results, setResults] = useState([]); const [isOpen, setIsOpen] = useState(false); const [loading, setLoading] = useState(false); const [hasSearched, setHasSearched] = useState(false); const searchRef = useRef(null); useEffect(() => { const handleClickOutside = (event) => { if (searchRef.current && !searchRef.current.contains(event.target)) { setIsOpen(false); } }; document.addEventListener('mousedown', handleClickOutside); return () => document.removeEventListener('mousedown', handleClickOutside); }, []); useEffect(() => { const searchManga = async () => { if (!query.trim()) { setResults([]); setHasSearched(false); return; } setLoading(true); try { const searchResults = await searchMangas.execute(query); setResults(searchResults); setHasSearched(true); } catch (error) { console.error('Search error:', error); } finally { setLoading(false); } }; const timeoutId = setTimeout(searchManga, 300); return () => clearTimeout(timeoutId); }, [query]); return (