Connect Meshkee backend, blog and shared account session

This commit is contained in:
Alireza Hassani
2026-09-05 19:41:56 +03:30
parent ee4b384238
commit de46b50e13
33 changed files with 803 additions and 11 deletions
+17
View File
@@ -0,0 +1,17 @@
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></>;
}