From 4367d147f4550d7ce7354f0bebbab7c09161685d Mon Sep 17 00:00:00 2001 From: ngc2207 Date: Sat, 1 Feb 2025 10:04:01 +0800 Subject: [PATCH] feat(auth): add user button component --- src/features/auth/components/user-button.tsx | 74 ++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 src/features/auth/components/user-button.tsx diff --git a/src/features/auth/components/user-button.tsx b/src/features/auth/components/user-button.tsx new file mode 100644 index 0000000..121106f --- /dev/null +++ b/src/features/auth/components/user-button.tsx @@ -0,0 +1,74 @@ +"use client"; + +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuTrigger, +} from "@/components/ui/dropdown-menu"; +import { useLogout } from "../api/use-logout"; +import { Loader, LogOut } from "lucide-react"; +import { useCurrent } from "../api/use-current"; +import { Separator } from "@/components/ui/separator"; +import { Avatar, AvatarFallback } from "@/components/ui/avatar"; + +export const UserButton = () => { + const { mutate: logout } = useLogout(); + const { data: user, isLoading } = useCurrent(); + + if (isLoading) { + return ( +
+ +
+ ); + } + + if (!user) { + return null; + } + + const { name, email } = user; + + const avatarFallback = name + ? name.charAt(0).toUpperCase() + : email.charAt(0).toUpperCase() ?? "U"; + + return ( + + + + + {avatarFallback} + + + + +
+ + + {avatarFallback} + + +
+

{name || "User"}

+

{email}

+
+
+ + logout()} + className="h-10 flex items-center justify-center font-medium cursor-pointer" + > + + Log out + +
+
+ ); +};