Files
reui-blocks/blocks/blog17.tsx
T

192 lines
8.3 KiB
TypeScript

"use client";
import React, { useState } from "react";
import { Badge } from "@/components/ui/badge";
import { Button } from "@/components/ui/button";
import { Separator } from "@/components/ui/separator";
import { cn } from "@/lib/utils";
const ALL_ARTICLES = "همه مطالب";
const data = [
{
id: 1,
title: "شروع کار با توسعه وب مدرن: راهنمای جامع",
description:
"با اصول توسعه وب مدرن آشنا شوید. ابزارها، فریم‌ورک‌ها و بهترین روش‌هایی که به ساخت اپلیکیشن‌های وب پایدار و مقیاس‌پذیر در محیط توسعه پرشتاب امروز کمک می‌کنند.",
author: "سارا احمدی",
date: "۲۵ اسفند ۱۴۲",
category: "توسعه وب",
link: "#",
},
{
id: 2,
title: "راهنمای جامع مدیریت state در اپلیکیشن‌های فرانت‌اند",
description:
"رویکردهای مختلف مدیریت state در اپلیکیشن‌های فرانت‌اند را بررسی کنید. از state محلی تا راه‌حل‌های سراسری چگونه استراتژی مناسب را برای نیاز و پیچیدگی پروژه انتخاب کنید.",
author: "امیر ویلسون",
date: "۲۲ اسفند ۱۴۲",
category: "فرانت‌اند",
link: "#",
},
{
id: 3,
title: "ساخت سیستم‌های سمت سرور مقیاس‌پذیر: بهترین روش‌ها و الگوها",
description:
"طراحی و پیاده‌سازی سیستم‌های بک‌اند را بیاموزید که با رشد اپلیکیشن شما گسترش می‌یابند. الگوهای معماری، تکنیک‌های بهینه‌سازی و ملاحظات زیرساخت برای توسعه مدرن.",
author: "محمد رضایی",
date: "۱۸ اسفند ۱۴۲",
category: "سمت سرور",
link: "#",
},
{
id: 4,
title: "تسلط بر معماری کامپوننت در توسعه فرانت‌اند",
description:
"ساخت کامپوننت‌های قابل نگهداری و استفاده مجدد را عمیق‌تر بررسی کنید. الگوهای طراحی کامپوننت، مدیریت state و بهترین روش‌ها برای معماری‌های مقیاس‌پذیر.",
author: "اما ژانگ",
date: "۱۵ اسفند ۱۴۲",
category: "فرانت‌اند",
link: "#",
},
{
id: 5,
title: "بهینه‌سازی کارایی اپلیکیشن: از تئوری تا عمل",
description:
"تکنیک‌های عملی بهبود کارایی اپلیکیشن را کشف کنید. از بهینه‌سازی در سطح کد تا تنظیم زیرساخت چگونه تجربه‌ای سریع‌تر و کارآمدتر ارائه دهید.",
author: "رضا پاک",
date: "۱۳ اسفند ۱۴۲",
category: "توسعه وب",
link: "#",
},
{
id: 6,
title: "بهترین روش‌های امنیت در توسعه سمت سرور",
description:
"مفاهیم امنیتی ضروری و استراتژی‌های پیاده‌سازی برای محافظت از سیستم‌های بک‌اند. آسیب‌پذیری‌های رایج، روش‌های احراز هویت و حفاظت از داده.",
author: "لیلا محمدی",
date: "۹ اسفند ۱۴۲",
category: "سمت سرور",
link: "#",
},
{
id: 7,
title: "استراتژی‌های مدرن تست فرانت‌اند",
description:
"رویکردهای جامع تست اپلیکیشن‌های فرانت‌اند را بیاموزید. از تست واحد کامپوننت‌ها تا تست end-to-end چگونه کد فرانت‌اند قابل اعتماد و نگهداری بماند.",
author: "علی کریمی",
date: "۶ اسفند ۱۴۲",
category: "فرانت‌اند",
link: "#",
},
{
id: 8,
title: "طراحی و بهینه‌سازی پایگاه داده برای سیستم‌های بک‌اند",
description:
"اصول طراحی و بهینه‌سازی پایگاه داده برای اپلیکیشن‌های سمت سرور. طراحی schema، استراتژی‌های ایندکس‌گذاری و بهینه‌سازی کوئری.",
author: "راحله مارتینز",
date: "۳ اسفند ۱۴۲",
category: "سمت سرور",
link: "#",
},
{
id: 9,
title: "ساخت رابط‌های وب واکنش‌گرا",
description:
"هنر ساخت رابط‌های وب واکنش‌گرا و تطبیقی را بیاموزید. تکنیک‌های مدرن استایل‌دهی، طراحی mobile-first و استراتژی‌های بهینه‌سازی کارایی.",
author: "کیوان اندرسون",
date: "۳۰ بهمن ۱۴۲",
category: "توسعه وب",
link: "#",
},
{
id: 10,
title: "طراحی اتصال هوشمند و الگوهای یکپارچه‌سازی",
description:
"بهترین روش‌های طراحی و یکپارچه‌سازی اتصال هوشمند در اپلیکیشن‌ها. اصول RESTful، استراتژی‌های احراز هویت و الگوهای مدیریت خطا.",
author: "نینا پاتیل",
date: "۲۶ بهمن ۱۴۲",
category: "سمت سرور",
link: "#",
},
];
interface Blog17Props {
className?: string;
}
const Blog17 = ({ className }: Blog17Props) => {
const [selectedCategory, setSelectedCategory] = useState(ALL_ARTICLES);
const categories = [
ALL_ARTICLES,
...Array.from(new Set(data.map((item) => item.category))),
];
const filteredData =
selectedCategory === ALL_ARTICLES
? data
: data.filter((item) => item.category === selectedCategory);
return (
<section dir="rtl" lang="fa" className={cn("py-32", className)}>
<div className="container">
<div className="flex flex-col items-center gap-6 text-center">
<Badge variant="secondary">وبلاگ</Badge>
<h1 className="text-xl font-bold lg:text-2xll">
جدیدترین مطالب و به‌روزرسانی‌ها
</h1>
<p className="text-balance lg:text-xl">
با جدیدترین روندها، آموزش‌ها و بهترین روش‌های توسعه نرم‌افزار به‌روز
بمانید. کارشناسان ما دانش خود را برای ساخت اپلیکیشن‌های بهتر به
اشتراک می‌گذارند.
</p>
</div>
<div className="mx-auto mt-20 grid max-w-7xl grid-cols-1 gap-20 lg:grid-cols-4">
<div className="hidden flex-col gap-2 lg:flex">
{categories.map((category) => (
<Button
variant="ghost"
key={category}
onClick={() => setSelectedCategory(category)}
className={cn(
"justify-start text-start",
selectedCategory === category &&
"bg-secondary text-secondary-foreground hover:bg-secondary/80",
)}
>
{category}
</Button>
))}
</div>
<div className="lg:col-span-3">
{filteredData.map((item) => (
<React.Fragment key={item.id}>
<a href={item.link} className="flex flex-col gap-3 text-start">
<p className="text-sm font-semibold text-muted-foreground">
{item.category}
</p>
<h3 className="text-xl font-semibold text-balance lg:text-3xl">
{item.title}
</h3>
<p className="text-muted-foreground">{item.description}</p>
<div className="mt-3 flex items-center gap-2 text-sm">
<span className="font-medium">{item.author}</span>
<span className="text-muted-foreground">
· {item.date}
</span>
</div>
</a>
<Separator className="my-8" />
</React.Fragment>
))}
</div>
</div>
</div>
</section>
);
};
export { Blog17 };