|
|
|
import { useEffect, useState } from "react"; |
|
import { Link, useNavigate } from "react-router-dom"; |
|
import { useAuth } from "@/contexts/AuthContext"; |
|
import { Button } from "@/components/ui/button"; |
|
import { useToast } from "@/hooks/use-toast"; |
|
import { LogIn, LogOut, User } from "lucide-react"; |
|
import { useTranslation } from "@/hooks/useTranslation"; |
|
|
|
export const UserMenu = () => { |
|
const { user, signOut } = useAuth(); |
|
const navigate = useNavigate(); |
|
const { toast } = useToast(); |
|
const t = useTranslation(); |
|
const [mounted, setMounted] = useState(false); |
|
|
|
useEffect(() => { |
|
setMounted(true); |
|
}, []); |
|
|
|
if (!mounted) return null; |
|
|
|
const handleSignOut = async () => { |
|
await signOut(); |
|
toast({ |
|
title: t.auth.logoutSuccess.title, |
|
description: t.auth.logoutSuccess.description, |
|
}); |
|
navigate("/"); |
|
}; |
|
|
|
return ( |
|
<div className="flex items-center gap-4"> |
|
{user ? ( |
|
<div className="flex items-center gap-2"> |
|
<span className="text-sm hidden md:inline-block"> |
|
{user.email} |
|
</span> |
|
<Button |
|
variant="outline" |
|
size="sm" |
|
onClick={handleSignOut} |
|
className="flex items-center gap-2" |
|
> |
|
<LogOut className="h-4 w-4" /> |
|
<span className="hidden md:inline-block"> |
|
{t.auth.form.logout || "Logout"} |
|
</span> |
|
</Button> |
|
</div> |
|
) : ( |
|
<div className="flex items-center gap-2"> |
|
<Button |
|
variant="outline" |
|
size="sm" |
|
asChild |
|
className="flex items-center gap-2" |
|
> |
|
<Link to="/auth/login"> |
|
<LogIn className="h-4 w-4" /> |
|
<span className="hidden md:inline-block">{t.auth.login.linkText}</span> |
|
</Link> |
|
</Button> |
|
<Button |
|
variant="default" |
|
size="sm" |
|
asChild |
|
className="flex items-center gap-2" |
|
> |
|
<Link to="/auth/register"> |
|
<User className="h-4 w-4" /> |
|
<span className="hidden md:inline-block">{t.auth.register.linkText}</span> |
|
</Link> |
|
</Button> |
|
</div> |
|
)} |
|
</div> |
|
); |
|
}; |
|
|