import React, { useState, useEffect, memo } from 'react'; import { BookOpen, Star, ChevronLeft, Search } from 'lucide-react'; interface BookSelectorProps { books: string[]; onBookSelect: (book: string) => void; formatBookName: (bookName: string) => string; user?: any; onFavoriteChange?: () => void; version?: string; onBack?: () => void; onSearchClick?: () => void; favorites?: Set; // Favorites passed from parent (centralized state) } const BookSelector: React.FC = memo(({ books, onBookSelect, formatBookName, user, onFavoriteChange, version = 'esv', onBack, onSearchClick, favorites = new Set() // Default to empty set if not provided }) => { const toggleFavorite = async (book: string, event: React.MouseEvent) => { event.stopPropagation(); // Prevent book selection when clicking star if (!user) return; const isFavorited = favorites.has(book); try { if (isFavorited) { // Remove favorite const response = await fetch('/api/favorites', { credentials: 'include' }); if (response.ok) { const data = await response.json(); const bookFavorite = data.favorites.find((fav: any) => fav.book === book && !fav.chapter); if (bookFavorite) { const deleteResponse = await fetch(`/api/favorites/${bookFavorite.id}`, { method: 'DELETE', credentials: 'include' }); if (deleteResponse.ok) { setFavorites(prev => { const newFavorites = new Set(prev); newFavorites.delete(book); return newFavorites; }); console.log('Removed book favorite:', book); onFavoriteChange?.(); // Notify parent to refresh favorites menu } } } } else { // Add favorite - simplified like ChapterSelector const response = await fetch('/api/favorites', { method: 'POST', headers: { 'Content-Type': 'application/json', }, credentials: 'include', body: JSON.stringify({ book: book, version: version }) }); if (response.ok) { setFavorites(prev => new Set(prev).add(book)); console.log('Added book favorite:', book); onFavoriteChange?.(); // Notify parent to refresh favorites menu } else { console.error('Failed to add favorite:', response.status, response.statusText); } } } catch (error) { console.error('Failed to toggle favorite:', error); } }; // Group books by testament const oldTestament = books.slice(0, 39); // First 39 books const newTestament = books.slice(39); // Remaining books const BookGroup: React.FC<{ title: string; books: string[] }> = ({ title, books }) => (

{title}

{books.map((book) => (
{/* Star button - only show for authenticated users */} {user && ( )}
))}
); return (
{/* Search Bar */}
{/* Breadcrumb */} {version && (
)}

{version.toUpperCase()} Bible

Select a book to begin reading

{user && (

Click the ★ to add books to your favorites

)}
); }); export default BookSelector;