import { useState, useEffect } from 'react'; import { useParams, useSearchParams, Link } from 'react-router-dom'; import Layout from '../components/Layout'; export default function EntryDetail() { const { id } = useParams(); const [searchParams] = useSearchParams(); const returnDate = searchParams.get('date') || ''; const [entry, setEntry] = useState(null); const [loading, setLoading] = useState(true); const [darkMode, setDarkMode] = useState(true); useEffect(() => { setDarkMode(document.documentElement.classList.contains('dark')); }, []); useEffect(() => { async function load() { try { const res = await fetch('/api/entries'); const entries = await res.json(); const found = entries.find(e => String(e.id) === String(id)); setEntry(found); } catch (err) { console.error(err); } finally { setLoading(false); } } load(); }, [id]); async function handleDelete() { if (!confirm('Delete this entry?')) return; await fetch('/api/entries/' + id, { method: 'DELETE' }); window.location.href = returnDate ? '/?date=' + returnDate : '/'; } async function toggleFavorite() { try { const res = await fetch('/api/entries/' + id + '/favorite', { method: 'POST' }); const data = await res.json(); setEntry({ ...entry, favorite: data.favorite }); } catch (err) { console.error(err); } } const bgCard = darkMode ? 'bg-gray-800' : 'bg-white'; const textMain = darkMode ? 'text-white' : 'text-gray-900'; const textMuted = darkMode ? 'text-gray-400' : 'text-gray-500'; if (loading) return Loading...; if (!entry) return Entry not found; const returnUrl = returnDate ? '/?date=' + returnDate : '/'; return ( ← Back {entry.name} {entry.favorite ? '⭐' : '☆'} {entry.description && {entry.description}} {entry.image_url && ( )} Macros Cal {entry.calories || 0} Protein {entry.protein || 0}g Carbs {entry.carbs || 0}g Fat {entry.fat || 0}g {entry.notes && ( Notes {entry.notes} )} Delete Entry ); }
{entry.description}
{entry.notes}