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.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}

)}
); }