FeedSuggestedFollows.tsx 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import Link from 'next/link';
  2. import { BadgeCheck } from 'lucide-react';
  3. import { fetchSuggestedFollows } from '@/lib/api/feed/post';
  4. import FollowButton from '@/app/component/FollowButton';
  5. import { Avatar, AvatarImage, AvatarFallback } from '@/components/ui/avatar';
  6. export default async function FeedSuggestedFollows()
  7. {
  8. const res = await fetchSuggestedFollows(5);
  9. const list = res.data?.list ?? [];
  10. if (list.length === 0) {
  11. return null;
  12. }
  13. return (
  14. <section className="feed__sidebar-section">
  15. <h2 className="feed__sidebar-title">추천 회원</h2>
  16. <ul className="feed__sidebar-follows">
  17. {list.map((member) => {
  18. const display = member.name || member.sid;
  19. return (
  20. <li key={member.sid} className="feed__sidebar-follow">
  21. <Link href={`/user/${member.sid}`} aria-label={`${display} 프로필`}>
  22. <Avatar className="feed__sidebar-follow-avatar">
  23. <AvatarImage src={member.thumb || undefined} alt={display} />
  24. <AvatarFallback className="feed__sidebar-follow-avatar-fallback">
  25. <img src="/icons/layout/avatar.svg" alt={display} />
  26. </AvatarFallback>
  27. </Avatar>
  28. </Link>
  29. <div className="feed__sidebar-follow-meta">
  30. <Link href={`/user/${member.sid}`} className="feed__sidebar-follow-name">
  31. {display}
  32. {member.isCreator && (
  33. <span className="feed__sidebar-follow-badge" title="회원">
  34. <BadgeCheck size={12} fill="currentColor" stroke="#fff" strokeWidth={2.5} />
  35. </span>
  36. )}
  37. </Link>
  38. <p className="feed__sidebar-follow-followers">팔로워 {member.followerCount.toLocaleString()}명</p>
  39. </div>
  40. <FollowButton memberSID={member.sid} className="feed__sidebar-follow-btn" />
  41. </li>
  42. );
  43. })}
  44. </ul>
  45. </section>
  46. );
  47. }