"use client"; import { useState } from "react"; import { ChevronsUpDown, Loader2 } from "lucide-react"; import { Avatar, AvatarFallback, AvatarImage, } from "@/app/_components/ui/avatar"; import { DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from "@/app/_components/ui/dropdown-menu"; import { SidebarMenu, SidebarMenuButton, SidebarMenuItem, useSidebar, } from "@/app/_components/ui/sidebar"; import { IconLogout, IconSettings, IconSparkles } from "@tabler/icons-react"; import type { IUserSchema } from "@/src/entities/models/users/users.model"; // import { signOut } from "@/app/(pages)/(auth)/action"; import { SettingsDialog } from "../settings/setting-dialog"; import { AlertDialog, AlertDialogTrigger, AlertDialogContent, AlertDialogHeader, AlertDialogFooter, AlertDialogTitle, AlertDialogDescription, AlertDialogCancel, AlertDialogAction } from "@/app/_components/ui/alert-dialog"; import { useSignOutHandler } from "@/app/(pages)/(auth)/_handlers/use-sign-out"; import { useGetCurrentUserQuery } from "../../dashboard/user-management/_queries/queries"; import { useUserStore } from "@/app/_utils/zustand/stores/user"; interface NavUserProps { user: IUserSchema | null; isPending: boolean; } export function NavUser() { const { user, isPending } = useUserStore() const { isMobile } = useSidebar(); const [isDialogOpen, setIsDialogOpen] = useState(false); // Use profile data with fallbacks const firstName = user?.profile?.first_name || ""; const lastName = user?.profile?.last_name || ""; const userEmail = user?.email || ""; const userAvatar = user?.profile?.avatar || ""; const username = user?.profile?.username || ""; const getFullName = () => { return `${firstName} ${lastName}`.trim() || username || "User"; }; // Generate initials for avatar fallback const getInitials = () => { if (firstName && lastName) { return `${firstName[0]}${lastName[0]}`.toUpperCase(); } if (firstName) { return firstName[0].toUpperCase(); } if (userEmail) { return userEmail[0].toUpperCase(); } return "U"; }; const { handleSignOut, isPending: isSignOutPending, errors, error: isSignOutError } = useSignOutHandler(); function LogoutButton({ handleSignOut, isSignOutPending }: { handleSignOut: () => void; isSignOutPending: boolean }) { const [open, setOpen] = useState(false); return ( <> {/* Dropdown Item */} { e.preventDefault(); setOpen(true); // Buka dialog saat diklik }} disabled={isSignOutPending} className="space-x-2" > {isSignOutPending ? ( <> Logging out... ) : ( <> Log out )} {/* Alert Dialog */} Log out Are you sure you want to log out? setOpen(false)}>Cancel { handleSignOut(); if (!isSignOutPending) { setOpen(false); } }} className="btn btn-primary" disabled={isSignOutPending} > {isSignOutPending ? ( <> Logging You Out... ) : ( Log out )} ); } return ( {isPending ? (
) : ( <> {getInitials()}
{username} {userEmail}
)} {!isPending && (
{getInitials()}
{username} {userEmail}
Upgrade to Pro { e.preventDefault(); }} > Settings } />
)} ); }