TTMT.ManageWebGUI/src/components/avatar-dropdown.tsx

86 lines
2.7 KiB
TypeScript
Raw Normal View History

2026-03-04 14:41:34 +07:00
import {
DropdownMenu,
DropdownMenuContent,
DropdownMenuItem,
DropdownMenuLabel,
DropdownMenuSeparator,
DropdownMenuTrigger,
} from "@/components/ui/dropdown-menu";
import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar";
import { LogOut, Settings, User } from "lucide-react";
interface AvatarDropdownProps {
username: string;
role: {
roleName: string;
priority: number;
};
onLogOut: () => void;
onSettings?: () => void;
onProfile?: () => void;
}
export default function AvatarDropdown({
username,
role,
onLogOut,
onSettings,
onProfile,
}: AvatarDropdownProps) {
// Get initials from username
const getInitials = (name: string): string => {
if (!name) return "U";
const parts = name.split(" ");
if (parts.length >= 2) {
return `${parts[0][0]}${parts[1][0]}`.toUpperCase();
}
return name.substring(0, 2).toUpperCase();
};
return (
<DropdownMenu>
<DropdownMenuTrigger asChild>
<button className="flex items-center gap-2 rounded-full focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2">
<Avatar className="h-9 w-9 cursor-pointer">
<AvatarImage src="" alt={username} />
<AvatarFallback className="bg-primary text-primary-foreground text-sm font-medium">
{getInitials(username)}
</AvatarFallback>
</Avatar>
</button>
</DropdownMenuTrigger>
<DropdownMenuContent align="end" className="w-56">
<DropdownMenuLabel className="font-normal">
<div className="flex flex-col space-y-1">
<p className="text-sm font-medium leading-none">{username}</p>
<p className="text-xs leading-none text-muted-foreground">
{role.roleName || "Người dùng"}
</p>
</div>
</DropdownMenuLabel>
<DropdownMenuSeparator />
{onProfile && (
<DropdownMenuItem onClick={onProfile} className="cursor-pointer">
<User className="mr-2 h-4 w-4" />
<span>Tài khoản của tôi</span>
</DropdownMenuItem>
)}
{onSettings && (
<DropdownMenuItem onClick={onSettings} className="cursor-pointer">
<Settings className="mr-2 h-4 w-4" />
<span>Cài đt</span>
</DropdownMenuItem>
)}
{(onProfile || onSettings) && <DropdownMenuSeparator />}
<DropdownMenuItem
onClick={onLogOut}
className="cursor-pointer text-destructive focus:text-destructive"
>
<LogOut className="mr-2 h-4 w-4" />
<span>Đăng xuất</span>
</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>
);
}