blob: 4afe125d3f631a0554261479539a93042f71adc3 [file] [log] [blame]
import React, { useState, useEffect } from 'react';
import { getFavorites } from '../api/api_ljc';
import { FaHeart } from 'react-icons/fa';
const FavoritePosts = ({ userId }) => {
const [favorites, setFavorites] = useState([]);
const [loading, setLoading] = useState(true);
useEffect(() => {
const fetchFavorites = async () => {
try {
setLoading(true);
const response = await getFavorites(userId);
setFavorites(response.data);
} catch (error) {
console.error('Failed to fetch favorites:', error);
} finally {
setLoading(false);
}
};
if (userId) {
fetchFavorites();
}
}, [userId]);
if (loading) {
return (
<div className="grid grid-cols-2 md:grid-cols-3 gap-4">
{[1, 2, 3, 4, 5, 6].map(item => (
<div key={item} className="bg-gray-100 rounded-xl aspect-square animate-pulse"></div>
))}
</div>
);
}
if (favorites.length === 0) {
return (
<div className="text-center py-16">
<div className="inline-flex items-center justify-center w-16 h-16 rounded-full bg-red-100 text-red-500 mb-4">
<FaHeart className="text-2xl" />
</div>
<h3 className="text-lg font-medium text-gray-900">暂无收藏内容</h3>
<p className="mt-1 text-gray-500">你还没有收藏任何笔记</p>
</div>
);
}
// 模拟瀑布流布局数据
const waterfallData = favorites.map(post => ({
...post,
height: Math.floor(Math.random() * 100) + 200 // 随机高度
}));
return (
<div className="grid grid-cols-2 md:grid-cols-3 gap-4">
{waterfallData.map(post => (
<div
key={post.id}
className="bg-white rounded-xl overflow-hidden shadow-sm hover:shadow-md transition-shadow"
>
<div
className="relative bg-gray-200"
style={{ height: `${post.height}px` }}
>
{/* 占位图片 */}
<div className="absolute inset-0 bg-gradient-to-br from-pink-100 to-orange-100"></div>
{/* 类型标签 */}
<div className="absolute top-2 right-2 bg-black bg-opacity-50 text-white text-xs px-2 py-1 rounded-full">
{post.type === 'image' ? '图文' :
post.type === 'video' ? '视频' : '文档'}
</div>
{/* 收藏标记 */}
<div className="absolute bottom-2 right-2 bg-red-500 rounded-full p-1">
<FaHeart className="text-white text-xs" />
</div>
</div>
<div className="p-3">
<h3 className="font-medium line-clamp-2">{post.title}</h3>
<div className="flex items-center mt-2 text-xs text-gray-500">
<span>❤️ 2.5k</span>
<span className="mx-2">•</span>
<span> 156</span>
</div>
</div>
</div>
))}
</div>
);
};
export default FavoritePosts;