import type { Metadata } from "next"; import { notFound } from "next/navigation"; import { headers } from "next/headers"; import Link from "next/link"; import { Printer, UtensilsCrossed } from "lucide-react"; import { auth } from "@/lib/auth/server"; import { db, collections, eq, and, or } from "@epicure/db"; import { RecipeCard } from "@/components/recipe/recipe-card"; import { CollectionRecipesGrid } from "@/components/collections/collection-recipes-grid"; import { ForkCollectionButton } from "@/components/collections/fork-collection-button"; import { ShareCollectionButton } from "@/components/collections/share-collection-button"; import { buttonVariants } from "@/components/ui/button"; import { cn } from "@/lib/utils"; import { ExportMarkdownButton } from "@/components/shared/export-markdown-button"; import { EmptyState } from "@/components/shared/empty-state"; import { collectionToMarkdown } from "@/lib/markdown/collection"; import { getMessages } from "@/lib/i18n/server"; type Params = { params: Promise<{ id: string }> }; export const metadata: Metadata = {}; export default async function CollectionPage({ params }: Params) { const { id } = await params; const session = await auth.api.getSession({ headers: await headers() }); if (!session) return null; const m = getMessages((session.user as { locale?: string }).locale); const col = await db.query.collections.findFirst({ where: and( eq(collections.id, id), or(eq(collections.userId, session.user.id), eq(collections.isPublic, true)) ), with: { recipes: { with: { recipe: { with: { photos: true } } } } }, }); if (!col) notFound(); const isOwner = col.userId === session.user.id; return (

{col.name}

{col.description &&

{col.description}

}

{col.recipes.length} recipe{col.recipes.length !== 1 ? "s" : ""} ยท {col.isPublic ? "Public" : "Private"}

{col.recipes.length > 0 && ( <> {m.collections.exportPdf} (r.recipe ? [r.recipe] : [])), })} filename={col.name} /> )} {isOwner && } {!isOwner && col.isPublic && ( )}
{col.recipes.length === 0 ? ( ) : isOwner ? ( (r.recipe ? [r.recipe] : []))} /> ) : (
{col.recipes.map(({ recipe }) => ( recipe && ))}
)}
); }