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> | |
); | |
}; | |