/** * @file app/(app)/member/list/MemberItem.tsx * @description Client component rendering an individual member item card displaying avatar initials, full name, role badge, email address, online status indicator, and last active timestamp. */ "use client"; import { getFullName, getInitials, getStatusColor, formatTimeAgo, capitalize, } from "@/lib/utils/user"; import { Mail } from "lucide-react"; import { UserListItem } from "@/lib/types/user"; import Link from "next/link"; /** * Properties for the MemberItem component. * * @interface MemberItemProps * @property {UserListItem} member - The member user object containing profile and status information. */ interface MemberItemProps { member: UserListItem; } /** * Renders a member list item displaying user credentials, email, dynamic color accent stripe based on online state, and activity status. * * @param {MemberItemProps} props - The component props. * @returns {JSX.Element} The rendered member item component. */ export default function MemberItem({ member }: MemberItemProps) { return ( {/* Dynamic colored accent stripe */}
{/* --- Left Side --- */}
{getInitials(member.firstName, member.lastName)}

{getFullName(member.firstName, member.lastName)}

{capitalize(member.role)}
{member.email}
{/* --- Right Side --- */}
{member.isOnline ? "Online" : "Offline"}
{formatTimeAgo(member.lastLogin)}
); }