'use client'; import { motion } from 'framer-motion'; import { useInView } from 'framer-motion'; import { useRef, useMemo } from 'react'; import Link from 'next/link'; import { Card, CardContent, CardHeader, CardTitle, CardDescription } from '@/components/ui/card'; import { ArrowRight, Calendar } from 'lucide-react'; import { useNews } from '@/hooks/use-news'; interface NewsConfig { enabled?: boolean; displayCount?: number; categories?: string[]; sortOrder?: 'asc' | 'desc'; } interface NewsSectionProps { config?: NewsConfig; } export function NewsSection({ config }: NewsSectionProps) { const ref = useRef(null); const isInView = useInView(ref, { once: true, margin: '-100px' }); const { news, loading, error } = useNews(); const displayedNews = useMemo(() => { if (!news || news.length === 0) { return []; } let filtered = news; if (config?.categories && config.categories.length > 0) { filtered = filtered.filter(newsItem => config.categories?.includes(newsItem.category)); } if (config?.sortOrder === 'asc') { filtered = [...filtered].sort((a, b) => new Date(a.date).getTime() - new Date(b.date).getTime()); } else { filtered = [...filtered].sort((a, b) => new Date(b.date).getTime() - new Date(a.date).getTime()); } const count = config?.displayCount || 4; return filtered.slice(0, count); }, [news, config]); if (loading) { return (

加载中...

); } if (error) { return (

加载新闻信息失败,请稍后重试

); } return (

最新资讯

了解公司最新动态、行业资讯和技术分享

{displayedNews.length > 0 ? (
{displayedNews.map((newsItem, idx) => (
{newsItem.category} {newsItem.date}
{newsItem.title}
{newsItem.excerpt} 阅读更多
))}
) : (

暂无新闻信息

)} 查看全部新闻
); }