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