import Link from "next/link"; import { notFound } from "next/navigation"; import { ArrowLeft, Trash2 } from "lucide-react"; import { getStudioBySlug, 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 { deleteStudio, renameStudio } from "@/app/actions/entities"; import { EntityRenameInline } from "@/components/entities/EntityRenameInline"; import { parseFilterCriteria, statusToFlags } from "@/lib/filters"; export const dynamic = "force-dynamic"; export default async function StudioPage({ 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 s = getStudioBySlug(decodeURIComponent(slug)); if (!s) notFound(); const items = listImages({ studioId: s.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, }); const remove = async () => { "use server"; await deleteStudio(s.id); }; const rename = async (name: string) => { "use server"; return await renameStudio(s.id, name); }; return (
All studios

{s.name}

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

i.id)} />
); }