"use client";
import {
ArrowPathIcon,
ClockIcon,
FireIcon,
PlusIcon,
ScaleIcon,
} from "@heroicons/react/24/outline";
import Link from "next/link";
import { useEffect, useMemo, useState } from "react";
import { useSession } from "@/lib/auth-client";
import {
RecipeRating,
loadHellthData,
recipeRatingSummary,
saveHellthData,
uid,
} from "@/lib/hellth-data";
const recipeId = "recipe-eggs";
function MacroBar() {
return (
);
}
export default function RecipePage() {
const { data: session } = useSession();
const userKey = session?.user?.id ?? session?.user?.email ?? null;
const displayName = session?.user?.name || session?.user?.email || "Du";
const [ratings, setRatings] = useState([]);
const [rating, setRating] = useState(5);
const [comment, setComment] = useState("");
const summary = useMemo(() => recipeRatingSummary(recipeId, ratings), [ratings]);
useEffect(() => {
if (!userKey) return;
const data = loadHellthData(userKey);
setRatings(data.recipeRatings);
const own = data.recipeRatings.find((item) => item.recipeId === recipeId && item.userKey === userKey);
if (own) {
setRating(own.rating);
setComment(own.comment ?? "");
}
}, [userKey]);
function saveRating() {
if (!userKey) return;
const data = loadHellthData(userKey);
const nextRating: RecipeRating = {
id: data.recipeRatings.find((item) => item.recipeId === recipeId && item.userKey === userKey)?.id ?? uid("rating"),
recipeId,
userKey,
displayName,
rating,
comment: comment.trim() || undefined,
createdAt: new Date().toISOString(),
};
const nextRatings = [
nextRating,
...data.recipeRatings.filter((item) => !(item.recipeId === recipeId && item.userKey === userKey)),
];
saveHellthData({ ...data, recipeRatings: nextRatings }, userKey);
setRatings(nextRatings);
}
return (
EM
Eier-Muffins mit Paprika
User-Bewertung
{summary.count ? `${summary.average}/5 aus ${summary.count} Bewertung(en)` : "Noch keine Bewertungen."}
{[1, 2, 3, 4, 5].map((value) => (
))}
Makros
Zutaten
{[
["Paprika", "150 g"],
["Eier", "3 Stück"],
["Hirtenkäse", "60 g"],
["Zwiebel", "1/2 Stück"],
].map(([name, amount]) => (
))}
);
}