import type { Metadata } from "next"; import { notFound } from "next/navigation"; import { headers } from "next/headers"; import { auth } from "@/lib/auth/server"; import { db, collections, eq, and, or } from "@epicure/db"; import { RecipeCard } from "@/components/recipe/recipe-card"; import { ForkCollectionButton } from "@/components/collections/fork-collection-button"; import { ShareCollectionButton } from "@/components/collections/share-collection-button"; type Params = { params: Promise<{ id: string }> }; export const metadata: Metadata = { title: "Collection" }; 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 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"}

{isOwner && } {!isOwner && col.isPublic && ( )}
{col.recipes.length === 0 ? (

No recipes in this collection yet.

) : (
{col.recipes.map(({ recipe }) => ( recipe && ))}
)}
); }