import type { Metadata } from "next"; import Link from "next/link"; import { notFound, redirect } from "next/navigation"; import SlotImage from "@/components/SlotImage"; import { plainText, sanitizeHtml } from "@/lib/format"; import { fetchPortfolioById, portfolioHref, portfolioImage, portfolioTitle, } from "@/lib/portfolios"; import { pageMetadata } from "@/lib/seo"; import { slugifyForUrl } from "@/lib/slug"; export const revalidate = 60; type Params = { id: string; slug: string }; export async function generateMetadata({ params, }: { params: Promise; }): Promise { const { id } = await params; const item = await fetchPortfolioById(id); if (!item) { return { title: "نمونه کار یافت نشد", description: "این نمونه کار در گالری پنجره فرخ موجود نیست.", robots: { index: false }, }; } const title = portfolioTitle(item); return pageMetadata({ title, description: item.abstract?.trim() || plainText(item.mainTextHtml).slice(0, 160) || `${title} | نمونه کارهای پنجره فرخ`, path: portfolioHref(item), image: portfolioImage(item), }); } export default async function PortfolioDetailPage({ params }: { params: Promise }) { const { id, slug } = await params; const item = await fetchPortfolioById(id); if (!item) notFound(); const title = portfolioTitle(item); if (decodeURIComponent(slug) !== slugifyForUrl(title)) { redirect(portfolioHref(item)); } const html = sanitizeHtml(item.mainTextHtml); return ( <>
PORTFOLIO

{title}

{item.abstract ?

{item.abstract}

: null} {html ?
: null} بازگشت به نمونه کارها
); }