import Link from "next/link"; import { notFound } from "next/navigation"; import { ArrowLeft } from "lucide-react"; import { getLabelBySlug, listImages } from "@/lib/db/queries"; import { MasonryGrid } from "@/components/grid/MasonryGrid"; import { RegisterVisible } from "@/components/select/RegisterVisible"; import { FilterBar } from "@/components/grid/FilterBar"; import { resolveSort } from "@/lib/sortServer"; import { parseFilterCriteria, statusToFlags } from "@/lib/filters"; export const dynamic = "force-dynamic"; export default async function LabelPage({ params, searchParams, }: { params: Promise<{ slug: string }>; searchParams: Promise>; }) { const { slug } = await params; const sp = await searchParams; const sort = await resolveSort(typeof sp.sort === "string" ? sp.sort : undefined); const search = (typeof sp.q === "string" ? sp.q.trim() : "") || undefined; const criteria = parseFilterCriteria(sp); const label = getLabelBySlug(decodeURIComponent(slug)); if (!label) notFound(); const items = listImages({ labelId: label.id, sort, search, ...statusToFlags(criteria.status), marks: criteria.marks, actressIds: criteria.ids.actresses, actressMode: criteria.mode.actresses, studioIds: criteria.ids.studios, seriesIds: criteria.ids.series, genreIds: criteria.ids.genres, genreMode: criteria.mode.genres, collectionIds: criteria.ids.collections, collectionMode: criteria.mode.collections, tagIds: criteria.ids.tags, tagMode: criteria.mode.tags, categoryIds: criteria.ids.categories, categoryMode: criteria.mode.categories, }); return (
All labels

{label.name}

{items.length} cover{items.length === 1 ? "" : "s"}

i.id)} />
); }