"use client"; // import { PortfolioImage } from "@/generated/prisma"; // Possibly unused: no references found in `src/app` or `src/components`. import { cn } from "@/lib/utils"; import type { ArtworkWithRelations } from "@/types/Artwork"; import Image from "next/image"; import Link from "next/link"; import { useSearchParams } from "next/navigation"; import type { CSSProperties } from "react"; import { useState } from "react"; import { Button } from "../ui/button"; // Client-side artwork gallery with incremental pagination. export default function ArtworkGallery({ initialArtworks, initialCursor, }: { initialArtworks: ArtworkWithRelations[]; initialCursor: string | null; }) { const searchParams = useSearchParams(); const published = searchParams.get("published") ?? "all"; const [artworks, setArtworks] = useState(initialArtworks); const [cursor, setCursor] = useState(initialCursor); const [loading, setLoading] = useState(false); const loadMore = async () => { if (!cursor || loading) return; setLoading(true); try { const qs = new URLSearchParams(); qs.set("published", published); qs.set("cursor", cursor); qs.set("take", "48"); const res = await fetch(`/api/artworks/page?${qs.toString()}`, { method: "GET", cache: "no-store", }); if (!res.ok) throw new Error("Failed to load more artworks"); const data: { items: ArtworkWithRelations[]; nextCursor: string | null } = await res.json(); setArtworks((prev) => [...prev, ...data.items]); setCursor(data.nextCursor); } finally { setLoading(false); } }; return (
{artworks.map((artwork) => (
{artwork.altText
))}
{cursor ? (
) : null}
); }