import Link from "next/link"; import Image from "next/image"; import { Card, CardHeader, CardTitle, CardContent, CardFooter, } from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { ArrowRight } from "lucide-react"; import { pb, getPbImage, type PBPost } from "@/lib/pb"; import { Dictionary } from "@/lib/IDict"; interface BlogPreviewProps { lang: string; dict: Dictionary["blog"]; } // Теперь это асинхронный серверный компонент export async function BlogPreview({ lang, dict }: BlogPreviewProps) { let posts: PBPost[] = []; try { // В Next.js App Router лучше использовать нативный fetch для контроля кэша, // либо передавать кастомный fetch в PB SDK. Здесь используем ISR на 3600 секунд (1 час). posts = await pb.collection(`posts_${lang}`).getFullList({ filter: "published = true", sort: "-created", perPage: 3, fetch: (url, config) => fetch(url, { ...config, next: { revalidate: 3600 } }), }); } catch (error) { console.error("Ошибка загрузки логов:", error); return null; // Тихо фейлимся без падения страницы } if (posts.length === 0) return null; return (
{dict.badge}

{dict.title}

{posts.map((post) => ( {post.image && (
// Внутри .map в BlogPreview.tsx: {post.title}
)}
{new Date(post.created).toLocaleDateString( lang === "ru" ? "ru-RU" : "en-US", )}
{post.title}

{post.excerpt}

))}
); }