enzostvs's picture
enzostvs HF Staff
responsive user fullname + help button
b83ceb7
import {
ChartSpline,
CirclePlus,
FolderCode,
Import,
LogOut,
} from "lucide-react";
import Link from "next/link";
import {
DropdownMenu,
DropdownMenuContent,
DropdownMenuGroup,
DropdownMenuItem,
DropdownMenuLabel,
DropdownMenuSeparator,
DropdownMenuTrigger,
} from "@/components/ui/dropdown-menu";
import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar";
import { Button } from "@/components/ui/button";
import { useUser } from "@/hooks/useUser";
export const UserMenu = ({ className }: { className?: string }) => {
const { logout, user } = useUser();
return (
<DropdownMenu>
<DropdownMenuTrigger asChild>
<Button variant="ghost" className={`${className}`}>
<Avatar className="size-8 mr-1">
<AvatarImage src={user?.avatarUrl} alt="@shadcn" />
<AvatarFallback className="text-sm">
{user?.fullname?.charAt(0).toUpperCase() ?? "E"}
</AvatarFallback>
</Avatar>
<span className="max-lg:hidden">{user?.fullname}</span>
<span className="lg:hidden">
{user?.fullname.slice(0, 10)}
{(user?.fullname?.length ?? 0) > 10 ? "..." : ""}
</span>
</Button>
</DropdownMenuTrigger>
<DropdownMenuContent className="w-56" align="start">
<DropdownMenuLabel className="font-bold flex items-center gap-2 justify-center">
My Account
</DropdownMenuLabel>
<DropdownMenuSeparator />
<DropdownMenuGroup>
<Link href="/projects/new">
<DropdownMenuItem>
<CirclePlus className="size-4 text-neutral-100" />
New Project
</DropdownMenuItem>
</Link>
<Link href="/projects">
<DropdownMenuItem>
<Import className="size-4 text-neutral-100" />
Import Project
</DropdownMenuItem>
</Link>
<Link href="/projects">
<DropdownMenuItem>
<FolderCode className="size-4 text-neutral-100" />
View Projects
</DropdownMenuItem>
</Link>
<a href="https://huggingface.co/settings/billing" target="_blank">
<DropdownMenuItem>
<ChartSpline className="size-4 text-neutral-100" />
Usage Quota
</DropdownMenuItem>
</a>
</DropdownMenuGroup>
<DropdownMenuSeparator />
<DropdownMenuItem
onClick={() => {
if (confirm("Are you sure you want to log out?")) {
logout();
}
}}
>
<Button size="xs" variant="destructive" className="w-full">
<LogOut className="size-4" />
Log out
</Button>
</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>
);
};