import type { Metadata } from "next"; import { getTranslations } from "next-intl/server"; import { redirect } from "next/navigation"; import { Container } from "@/components/layout/container"; import { PageHero } from "@/components/layout/page-hero"; import { PortfolioCategoryFilter } from "@/components/site/portfolio-category-filter"; import { PortfolioProjectGrid } from "@/components/site/portfolio-project-grid"; import { buildLocalizedMetadata } from "@/lib/metadata"; import { getLocalizedPath, resolveLocale } from "@/lib/locale"; import { getActivePortfolioCategories, getPublishedPortfolioProjects } from "@/lib/portfolio"; type PortfolioPageProps = { params: Promise<{ locale: string; }>; searchParams?: Promise<{ category?: string; }>; }; export const dynamic = "force-dynamic"; export async function generateMetadata({ params }: PortfolioPageProps): Promise { const { locale } = await params; const localeKey = resolveLocale(locale); const t = await getTranslations({ locale: localeKey, namespace: "portfolioPage" }); return await buildLocalizedMetadata({ locale: localeKey, pathname: "/portfolio", title: t("title"), description: t("intro"), }); } export default async function PortfolioPage({ params, searchParams, }: PortfolioPageProps) { const [{ locale }, resolvedSearchParams] = await Promise.all([ params, searchParams, ]); const localeKey = resolveLocale(locale); const t = await getTranslations({ locale: localeKey, namespace: "portfolioPage" }); const selectedCategory = resolvedSearchParams?.category ?? ""; if (selectedCategory) { redirect(getLocalizedPath(localeKey, `/portfolio/category/${selectedCategory}`)); } const [categories, projects] = await Promise.all([ getActivePortfolioCategories(), getPublishedPortfolioProjects(), ]); return ( <> ); }