"use client"; import { ChevronUp, LogOut, Settings } from "lucide-react"; import { useTranslations } from "next-intl"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip"; import { cn } from "@/lib/utils"; import type { User } from "../../types/layout.types"; interface SidebarUserProfileProps { user: User; onUserSettings?: () => void; onLogout?: () => void; isCollapsed?: boolean; } /** * Generates a consistent color based on email */ function stringToColor(str: string): string { let hash = 0; for (let i = 0; i < str.length; i++) { hash = str.charCodeAt(i) + ((hash << 5) - hash); } const colors = [ "#6366f1", "#8b5cf6", "#a855f7", "#d946ef", "#ec4899", "#f43f5e", "#ef4444", "#f97316", "#eab308", "#84cc16", "#22c55e", "#14b8a6", "#06b6d4", "#0ea5e9", "#3b82f6", ]; return colors[Math.abs(hash) % colors.length]; } /** * Gets initials from email */ function getInitials(email: string): string { const name = email.split("@")[0]; const parts = name.split(/[._-]/); if (parts.length >= 2) { return (parts[0][0] + parts[1][0]).toUpperCase(); } return name.slice(0, 2).toUpperCase(); } export function SidebarUserProfile({ user, onUserSettings, onLogout, isCollapsed = false, }: SidebarUserProfileProps) { const t = useTranslations("sidebar"); const bgColor = stringToColor(user.email); const initials = getInitials(user.email); const displayName = user.name || user.email.split("@")[0]; // Collapsed view - just show avatar with dropdown if (isCollapsed) { return (
{displayName}
{user.email}
{displayName}
{user.email}