13 lines
2.2 KiB
TypeScript
13 lines
2.2 KiB
TypeScript
import Link from 'next/link';
|
|
import { BookOpen, ArrowUpLeft } from 'lucide-react';
|
|
import { getBlogs, blogHref, summary, cover } from '../../lib/meshkee/blog';
|
|
export const metadata = {title:'مجله سلامت گستر',description:'مقالات و تازههای سلامت گستر اعتماد در زمینه استریلیزاسیون، تجهیزات پزشکی و کنترل عفونت.'};
|
|
export const dynamic = 'force-dynamic';
|
|
export default async function BlogPage({searchParams}:{searchParams:Promise<{page?:string}>}) {
|
|
const query=await searchParams; const page=Math.max(1,Math.min(10000,Number.parseInt(query.page||'1',10)||1));
|
|
let data;
|
|
try{data=await getBlogs(page)}catch{return <><Banner/><section className="wrap section backend-empty"><BookOpen size={32}/><h2>دریافت مطالب ممکن نشد</h2><p>لطفاً کمی بعد دوباره تلاش کنید.</p><a className="button" href="/blog">تلاش دوباره</a></section></>}
|
|
return <><Banner/><section className="wrap section">{data.items.length ? <div className="blog-grid">{data.items.map(post=><Link className="blog-card" href={blogHref(post)} key={post.id}>{cover(post)?<img src={cover(post)} alt={post.title}/>:<div className="blog-placeholder"><BookOpen size={38} strokeWidth={1}/></div>}<div className="blog-card-copy"><h2>{post.title}</h2><p>{summary(post)}</p><span>مطالعه مطلب <ArrowUpLeft size={18}/></span></div></Link>)}</div>:<div className="backend-empty"><BookOpen size={36} strokeWidth={1.3}/><h2>بهزودی با مطالب تازه همراه شما هستیم</h2><p>هنوز مطلبی منتشر نشده است.</p></div>}{data.total>12&&<nav className="blog-pagination" aria-label="صفحهبندی مجله">{page>1&&<Link href={`/blog?page=${page-1}`}>صفحه قبل</Link>}<span>صفحه {page.toLocaleString('fa-IR')}</span>{page*12<data.total&&<Link href={`/blog?page=${page+1}`}>صفحه بعد</Link>}</nav>}</section></>;
|
|
}
|
|
function Banner(){return <section className="pagehead"><div className="wrap"><span className="eyebrow">SGE JOURNAL</span><h1>مجله سلامت گستر</h1><p>دانش و تازههای استریلیزاسیون و کنترل عفونت</p></div></section>}
|