Spaces:
Running
Running
| 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> | |
| ); | |
| }; | |