import React, { useEffect, useState } from 'react' import { Link } from 'react-router-dom' import { FaCalendarAlt, FaUser, FaTag, FaSearch } from 'react-icons/fa' import dayjs from 'dayjs' import 'dayjs/locale/tr' import { BlogCategory, BlogPost } from '@/proxy/blog/blog' import { blogService } from '@/services/blog.service' import { useLocalization } from '@/utils/hooks/useLocalization' import { Helmet } from 'react-helmet' const Blog = () => { const { translate } = useLocalization() const [posts, setPosts] = useState([]) const [categories, setCategories] = useState([]) const [loading, setLoading] = useState(true) const [selectedCategory, setSelectedCategory] = useState('') const [searchQuery, setSearchQuery] = useState('') const [currentPage, setCurrentPage] = useState(1) const [totalPages, setTotalPages] = useState(1) dayjs.locale('tr') useEffect(() => { loadBlogData() }, [currentPage, selectedCategory]) const loadBlogData = async () => { try { setLoading(true) const postsData = await blogService.getPosts({ page: currentPage, pageSize: 10, categoryId: selectedCategory, search: searchQuery, }) if ( postsData.posts && postsData.posts.items && postsData.posts.totalCount && postsData.categories ) { setPosts(postsData.posts.items.filter((a) => a.isPublished)) setTotalPages(postsData.posts.totalCount / 10) setCategories(postsData.categories.filter((a) => a.isActive)) } } catch (error) { console.error('Blog verileri yüklenemedi:', error) setPosts([]) } finally { setLoading(false) } } const handleSearch = (e: React.FormEvent) => { e.preventDefault() setCurrentPage(1) loadBlogData() } const handleCategoryChange = (categoryId: string) => { setSelectedCategory(categoryId) setCurrentPage(1) } if (loading && posts.length === 0) { return (

Blog yazıları yükleniyor...

) } return (
{/* Hero Section */}

{translate('::Public.blog.title')}

{translate('::Public.blog.subtitle')}

{/* Search and Filter Section */}
{/* Search */}
setSearchQuery(e.target.value)} placeholder="Blog yazılarında ara..." className="w-full pl-10 pr-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500" />
{/* Category Filter */}
{categories.map((category) => ( ))}
{/* Blog Posts Grid */}
{!Array.isArray(posts) || posts.length === 0 ? (

Henüz blog yazısı bulunmuyor.

) : (
{posts.map((post) => (
{post.title}
{translate('::Public.' + post.category.name)}

{translate('::Public.' + post.title)}

{translate('::Public.' + post.summary)}

{/* Tags */} {post.tags.length > 0 && (
{post.tags.slice(0, 3).map((tag, index) => ( {tag} ))}
)}
{post.author.name}
{dayjs(post.publishedAt || post.creationTime).format('DD MMM YYYY')}
))}
)} {/* Pagination */} {totalPages > 1 && (
)}
{/* Newsletter Section */}

{translate('::Public.blog.subscribe')}

{translate('::Public.blog.subscribe.desc')}

) } export default Blog