Files
sgemed/app/blog/[id]/[slug]/page.tsx
T

18 lines
1.5 KiB
TypeScript

import type {Metadata} from 'next';
import Link from 'next/link';
import { notFound, redirect } from 'next/navigation';
import { ApiError } from '../../../../lib/meshkee/api';
import { getBlog, titleSlug, blogHref, summary, cover, articleHtml } from '../../../../lib/meshkee/blog';
type Props={params:Promise<{id:string;slug:string}>};
export const dynamic='force-dynamic';
export async function generateMetadata({params}:Props):Promise<Metadata>{
try {const {id}=await params;const post=await getBlog(id);return {title:post.title,description:summary(post)||`${post.title}؛ مجله سلامت گستر اعتماد`,alternates:{canonical:`https://sgemed.com${blogHref(post)}`}}}catch{return {title:'مطلب',robots:{index:false}}}
}
export default async function Article({params}:Props){
const {id,slug}=await params;
let post;
try{post=await getBlog(id)}catch(error){if(error instanceof ApiError&&error.status===404)notFound();throw error}
if(slug!==titleSlug(post.title))redirect(blogHref(post));
return <><section className="pagehead"><div className="wrap"><Link className="eyebrow" href="/blog">مجله سلامت گستر ←</Link><h1>{post.title}</h1></div></section><article className="wrap section blog-article">{cover(post)&&<img className="article-cover" src={cover(post)} alt={post.title}/>}<div className="article-body" dangerouslySetInnerHTML={{__html:articleHtml(post)}}/><Link className="textlink" href="/blog">بازگشت به مجله ←</Link></article></>;
}