diff --git a/client/index.html b/client/index.html
new file mode 100644
index 0000000..c886e3a
--- /dev/null
+++ b/client/index.html
@@ -0,0 +1,16 @@
+
+
+
+
+
Add from Favorites
+ {favorites.length === 0 ? (
+
No favorites yet
+ ) : (
+
+ {favorites.map(fav => (
+ setShowFavList(false)}
+ className={"block p-2 rounded hover:bg-gray-700 " + textMuted}
+ >
+ {fav.name} • {fav.calories} cal
+
+ ))}
+
+ )}
+
+ )}
{children}
diff --git a/client/src/pages/AddEntry.jsx b/client/src/pages/AddEntry.jsx
index 180f358..751b21f 100644
--- a/client/src/pages/AddEntry.jsx
+++ b/client/src/pages/AddEntry.jsx
@@ -1,9 +1,10 @@
import { useState, useEffect } from 'react';
-import { useNavigate } from 'react-router-dom';
+import { useNavigate, useSearchParams } from 'react-router-dom';
import Layout from '../components/Layout';
export default function AddEntry() {
const navigate = useNavigate();
+ const [searchParams] = useSearchParams();
const [darkMode, setDarkMode] = useState(true);
const [foods, setFoods] = useState([]);
const [searchQuery, setSearchQuery] = useState('');
@@ -25,6 +26,24 @@ export default function AddEntry() {
setDarkMode(document.documentElement.classList.contains('dark'));
}, []);
+ // Pre-fill from query params (favorites)
+ useEffect(() => {
+ const name = searchParams.get('name');
+ if (name) {
+ setForm({
+ ...form,
+ name: name,
+ description: searchParams.get('description') || '',
+ notes: searchParams.get('notes') || '',
+ calories: searchParams.get('calories') || '',
+ protein: searchParams.get('protein') || '',
+ carbs: searchParams.get('carbs') || '',
+ fat: searchParams.get('fat') || '',
+ image: null
+ });
+ }
+ }, [searchParams]);
+
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';
diff --git a/client/src/pages/EntryDetail.jsx b/client/src/pages/EntryDetail.jsx
index 9c23302..c6c6d5e 100644
--- a/client/src/pages/EntryDetail.jsx
+++ b/client/src/pages/EntryDetail.jsx
@@ -36,6 +36,16 @@ export default function EntryDetail() {
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';
@@ -49,7 +59,17 @@ export default function EntryDetail() {
← Back
- {entry.name}
+
+
{entry.name}
+
+
+
{entry.description && {entry.description}
}
{entry.image_url && (
@@ -89,9 +109,11 @@ export default function EntryDetail() {
)}
-