import React, { useEffect, useState } from 'react'; import { Link } from 'react-router-dom'; import axios from 'axios'; import { API_URL } from '../config/api'; import { useTranslation } from '../i18n'; import { useLocalePath } from '../middleware'; interface Post { id: number; title: string; excerpt: string; coverImage: string | null; url: string; views: number; createdAt: string; publishedAt: string; author: { id: number; username: string; }; _count: { comments: number; }; } const Blog: React.FC = () => { const [posts, setPosts] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const { t, locale } = useTranslation(); const localePath = useLocalePath(); useEffect(() => { loadPosts(); }, []); const loadPosts = async () => { try { setLoading(true); const response = await axios.get(`${API_URL}/api/blog/posts`); setPosts(response.data.data); setError(null); } catch (err) { console.error('Error loading posts:', err); setError(locale === 'en' ? 'Failed to load articles' : 'Не удалось загрузить статьи'); } finally { setLoading(false); } }; const formatDate = (dateString: string) => { const date = new Date(dateString); return date.toLocaleDateString(locale === 'en' ? 'en-US' : 'ru-RU', { year: 'numeric', month: 'long', day: 'numeric' }); }; if (loading) { return (
{t('common.loading')}
); } return (
{/* Header */}

{t('blog.title')}

{t('blog.subtitle')}

{/* Error */} {error && (

{error}

)} {/* Posts Grid */} {posts.length === 0 ? (

📭 {t('blog.noPosts')}

) : (
{posts.map((post) => ( {/* Cover Image */} {post.coverImage ? (
{post.title}
) : (
{locale === 'en' ? 'Article' : 'Статья'}
)} {/* Content */}

{post.title}

{post.excerpt && (

{post.excerpt}

)} {/* Meta */}
{t('blog.author')}: {post.author.username} {locale === 'en' ? 'Views' : 'Просмотров'}: {post.views}
{formatDate(post.publishedAt || post.createdAt)}
))}
)}
); }; export default Blog;