import type { PortfolioFilters } from "@/actions/portfolio/getPortfolioArtworksPage"; import PortfolioFiltersBar from "@/components/portfolio/PortfolioFiltersBar"; import PortfolioGallery from "@/components/portfolio/PortfolioGallery"; import { prisma } from "@/lib/prisma"; type SearchParams = { year?: string; q?: string; }; function parseFilters(sp: SearchParams): PortfolioFilters { const filters: PortfolioFilters = {}; const yearRaw = sp.year?.trim(); if (yearRaw && yearRaw !== "all") { const y = Number(yearRaw); if (Number.isFinite(y) && y > 0) filters.year = y; } const qRaw = sp.q?.trim(); if (qRaw) filters.q = qRaw; return filters; } async function getExistingArtworkYears(): Promise { const rows = await prisma.artwork.findMany({ where: { published: true, year: { not: null }, }, select: { year: true }, distinct: ["year"], orderBy: { year: "desc" }, }); return rows .map((r) => r.year) .filter((y): y is number => typeof y === "number"); } export default async function PortfolioPage({ searchParams, }: { // Per your requirement: catch searchParams async searchParams: Promise; }) { const sp = await searchParams; const [years, filters] = await Promise.all([ getExistingArtworkYears().catch(() => []), // never let this break rendering Promise.resolve(parseFilters(sp)), ]); return (

Portfolio

Browse all published artworks.

); }