import Link from "next/link"; import { createClient } from "@/lib/supabase/server"; import { addDays, dishCodes, entriesFor, formatDateLong, formatPrice, mondayOf, todayISO, WEEKDAYS, } from "@/lib/menu"; import { logoUrl, SITE_TITLE } from "@/lib/types"; import type { CodeItem, MenuEntry, Section } from "@/lib/types"; import PublicMobileMenu from "@/components/PublicMobileMenu"; export default async function Home({ searchParams, }: { searchParams: Promise<{ woche?: string }>; }) { const { woche } = await searchParams; const monday = mondayOf(woche); const friday = addDays(monday, 4); const currentWeek = mondayOf(todayISO()); const days = WEEKDAYS.map((weekday, i) => ({ weekday, iso: addDays(monday, i), })); const supabase = await createClient(); const [sectionsRes, entriesRes, allergensRes, additivesRes, settingsRes] = await Promise.all([ supabase.from("sections").select("*").order("sort"), supabase .from("menu_entries") .select( "id, menu_date, section_key, position, dish:dishes(id, name, price, allergens, additives)" ) .gte("menu_date", monday) .lte("menu_date", friday) .order("position") .order("created_at"), supabase.from("allergens").select("*").order("sort"), supabase.from("additives").select("*").order("sort"), supabase.from("settings").select("logo_path").eq("id", 1).maybeSingle(), ]); const sections = (sectionsRes.data ?? []) as Section[]; const entries = (entriesRes.data ?? []) as unknown as MenuEntry[]; const allergens = (allergensRes.data ?? []) as CodeItem[]; const additives = (additivesRes.data ?? []) as CodeItem[]; const logo = logoUrl(settingsRes.data?.logo_path); return (
| {days.map((d) => ( |
{d.weekday}
{formatDateLong(d.iso)} |
))}
|---|---|
|
{s.label}
{s.time_range}
|
{days.map((d) => (
{entriesFor(entries, d.iso, s.key).map((e) => {
const codes = dishCodes(e.dish);
return (
{e.dish.name}
{codes && {codes}}
{" – "}
{formatPrice(e.dish.price)}
);
})}
|
))}