import React, { useState, useEffect } from 'react'; import Background from './components/Background'; import HomeView from './views/HomeView'; import ResultsView from './views/ResultsView'; import FavoritesView from './views/FavoritesView'; import BookDetailsModal from './components/BookDetailsModal'; import Footer from './components/Footer'; function App() { const [popularBooks, setPopularBooks] = useState([]); const [recommendations, setRecommendations] = useState([]); const [selectedBook, setSelectedBook] = useState(null); const [loading, setLoading] = useState(false); const [view, setView] = useState('home'); // 'home' or 'results' or 'favorites' const [method, setMethod] = useState('hybrid'); const [bookTitle, setBookTitle] = useState(''); const [modalBook, setModalBook] = useState(null); // For book details modal const [isModalOpen, setIsModalOpen] = useState(false); useEffect(() => { fetch('/api/popular') .then(res => res.json()) .then(data => setPopularBooks(data)) .catch(err => console.error(err)); }, []); const handleRecommend = async (title, selectedMethod) => { setLoading(true); setMethod(selectedMethod); setBookTitle(title); try { const formData = new FormData(); formData.append('book_title', title); formData.append('method', selectedMethod); const resp = await fetch('/api/recommend', { method: 'POST', body: formData, }); const data = await resp.json(); setRecommendations(data.recommendations); setSelectedBook(data.selected_book); setView('results'); window.scrollTo({ top: 0, behavior: 'smooth' }); } catch (err) { console.error(err); } finally { setLoading(false); } }; const handleBack = () => { setView('home'); setRecommendations([]); setSelectedBook(null); window.scrollTo({ top: 0, behavior: 'smooth' }); }; const handleViewDetails = (book) => { setModalBook(book); setIsModalOpen(true); }; const handleCloseModal = () => { setIsModalOpen(false); setModalBook(null); }; return (
{loading && (

Finding matches...

)}
{view === 'home' ? ( setView('favorites')} /> ) : view === 'favorites' ? ( setView('home')} /> ) : ( )}
{isModalOpen && modalBook && ( )}
); } export default App;