18 lines
1.5 KiB
TypeScript
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></>;
|
|
}
|