import { Avatar, AvatarFallback, AvatarImage } from '@thedaviddias/design-system/avatar' import { Badge } from '@thedaviddias/design-system/badge' import { Calendar } from 'lucide-react' import Link from 'next/link' import { Section } from '@/components/layout/section' import { Card, CardContent } from '@/components/ui/card' import { getMemberBadgeSync } from '@/lib/member-client-utils' import { getRoute } from '@/lib/routes' interface Member { id: string firstName?: string | null lastName?: string | null username?: string | null imageUrl?: string | null createdAt: string publicMetadata?: { github_username?: string | null migrated_from?: string | null } hasContributions?: boolean } interface LatestMembersSectionProps { members: Member[] } /** * Generates a URL slug from a member's username or ID */ function generateSlugFromUser(user: Member): string { if (!user) return '' const username = user.username || user.publicMetadata?.github_username // Use full user ID for email-only users (Clerk IDs start with 'user_') if (!username) return user.id return username } /** * Renders a section showcasing the most recently joined community members */ export function LatestMembersSection({ members }: LatestMembersSectionProps) { if (!members || members.length === 0) { return null } return (
{members.map(user => { const userSlug = generateSlugFromUser(user) const displayName = user.firstName && user.lastName ? `${user.firstName} ${user.lastName}` : user.firstName || user.lastName || user.username || `User ${user.id.slice(-6).toUpperCase()}` const username = user.username || user.publicMetadata?.github_username const badge = getMemberBadgeSync(user.hasContributions) // Parse the date - it might be a timestamp number as string or ISO string let joinDate = 'Member' if (user.createdAt) { // Try parsing as number first (timestamp) const timestamp = Number(user.createdAt) const date = !Number.isNaN(timestamp) ? new Date(timestamp) : new Date(user.createdAt) if (!Number.isNaN(date.getTime())) { joinDate = date.toLocaleDateString('en-US', { month: 'short', year: 'numeric' }) } } return ( {user.imageUrl ? ( ) : ( {displayName.charAt(0).toUpperCase()} )}

{displayName}

{username && (

@{username}

)}
{badge.label}
{joinDate}
) })}
) }