mirror of
https://github.com/FranP-code/create-better-t-stack.git
synced 2025-10-12 23:52:15 +00:00
63 lines
1.6 KiB
TypeScript
63 lines
1.6 KiB
TypeScript
import {
|
|
DropdownMenu,
|
|
DropdownMenuContent,
|
|
DropdownMenuItem,
|
|
DropdownMenuLabel,
|
|
DropdownMenuSeparator,
|
|
DropdownMenuTrigger,
|
|
} from "@/components/ui/dropdown-menu";
|
|
import { authClient } from "@/lib/auth-client";
|
|
import { useNavigate } from "@tanstack/react-router";
|
|
import { Button } from "./ui/button";
|
|
import { Skeleton } from "./ui/skeleton";
|
|
import { Link } from "@tanstack/react-router";
|
|
|
|
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 (
|
|
<Button variant="outline" asChild>
|
|
<Link to="/login">Sign In</Link>
|
|
</Button>
|
|
);
|
|
}
|
|
|
|
return (
|
|
<DropdownMenu>
|
|
<DropdownMenuTrigger asChild>
|
|
<Button variant="outline">{session.user.name}</Button>
|
|
</DropdownMenuTrigger>
|
|
<DropdownMenuContent className="bg-card">
|
|
<DropdownMenuLabel>My Account</DropdownMenuLabel>
|
|
<DropdownMenuSeparator />
|
|
<DropdownMenuItem>{session.user.email}</DropdownMenuItem>
|
|
<DropdownMenuItem asChild>
|
|
<Button
|
|
variant="destructive"
|
|
className="w-full"
|
|
onClick={() => {
|
|
authClient.signOut({
|
|
fetchOptions: {
|
|
onSuccess: () => {
|
|
navigate({
|
|
to: "/",
|
|
});
|
|
},
|
|
},
|
|
});
|
|
}}
|
|
>
|
|
Sign Out
|
|
</Button>
|
|
</DropdownMenuItem>
|
|
</DropdownMenuContent>
|
|
</DropdownMenu>
|
|
);
|
|
}
|