import type { Metadata } from "next"; import Link from "next/link"; import { notFound, redirect } from "next/navigation"; import EntityTabs from "@/components/EntityTabs"; import PageHero from "@/components/PageHero"; import { blogHref, blogImage, blogTitleSlug, fetchBlogById, getLocalBlogPost } from "@/lib/blog"; import { fetchComments } from "@/lib/comments"; import { formatFaDateLong } from "@/lib/format"; import { pageMetadata } from "@/lib/seo"; export const revalidate = 60; export async function generateMetadata({ params, }: { params: Promise<{ id: string; slug: string }>; }): Promise { const { id } = await params; const apiPost = await fetchBlogById(id); if (apiPost) { return pageMetadata({ title: apiPost.title, description: apiPost.abstract ?? apiPost.title, path: blogHref(apiPost), image: blogImage(apiPost), }); } const local = getLocalBlogPost(id); if (!local) return { title: "مقاله" }; return pageMetadata({ title: local.title, description: local.abstract ?? local.title, path: blogHref(local), image: blogImage(local), }); } export default async function BlogPostPage({ params, }: { params: Promise<{ id: string; slug: string }>; }) { const { id, slug } = await params; const apiPost = await fetchBlogById(id); if (apiPost) { const canonical = blogTitleSlug(apiPost.title); if (decodeURIComponent(slug) !== canonical) { redirect(blogHref(apiPost)); } const comments = await fetchComments("blog", apiPost.id); const dateLabel = formatFaDateLong(apiPost.publishedAt || apiPost.createdAt); return ( <>
{dateLabel ?

{dateLabel}

: null} {apiPost.abstract ?

{apiPost.abstract}

: null} {apiPost.mainTextHtml ? (
) : null} بازگشت به مقالات
); } const local = getLocalBlogPost(id); if (!local) notFound(); const canonical = blogTitleSlug(local.title); if (decodeURIComponent(slug) !== canonical) { redirect(blogHref(local)); } return ( <>
{local.dateLabel ?

{local.dateLabel}

: null}
{local.title}
بازگشت به مقالات
); }