| import { Button } from "@pram/ui/components/button"; | |
| import { | |
| DropdownMenu, | |
| DropdownMenuContent, | |
| DropdownMenuGroup, | |
| DropdownMenuItem, | |
| DropdownMenuLabel, | |
| DropdownMenuSeparator, | |
| DropdownMenuTrigger, | |
| } from "@pram/ui/components/dropdown-menu"; | |
| import { Skeleton } from "@pram/ui/components/skeleton"; | |
| import { Link, useNavigate } from "@tanstack/react-router"; | |
| import { authClient } from "@/lib/auth-client"; | |
| export default function UserMenu() { | |
| const navigate = useNavigate(); | |
| const { data: session, isPending } = authClient.useSession(); | |
| if (isPending) { | |
| return <Skeleton className="h-9 w-24" />; | |
| } | |
| if (!session) { | |
| return ( | |
| <Link to="/login"> | |
| <Button variant="outline">Sign In</Button> | |
| </Link> | |
| ); | |
| } | |
| return ( | |
| <DropdownMenu> | |
| <DropdownMenuTrigger render={<Button variant="outline" />}> | |
| {session.user.name} | |
| </DropdownMenuTrigger> | |
| <DropdownMenuContent className="bg-card"> | |
| <DropdownMenuGroup> | |
| <DropdownMenuLabel>My Account</DropdownMenuLabel> | |
| <DropdownMenuSeparator /> | |
| <DropdownMenuItem>{session.user.email}</DropdownMenuItem> | |
| <DropdownMenuItem | |
| variant="destructive" | |
| onClick={() => { | |
| authClient.signOut({ | |
| fetchOptions: { | |
| onSuccess: () => { | |
| navigate({ | |
| to: "/", | |
| }); | |
| }, | |
| }, | |
| }); | |
| }} | |
| > | |
| Sign Out | |
| </DropdownMenuItem> | |
| </DropdownMenuGroup> | |
| </DropdownMenuContent> | |
| </DropdownMenu> | |
| ); | |
| } | |