"use client"; import { RiCheckLine, RiFileCopyLine, RiHistoryLine, RiLogoutCircleLine, RiMegaphoneLine, RiMessageLine, RiSettings2Line, } from "@remixicon/react"; import Image from "next/image"; import Link from "next/link"; import { useRouter } from "next/navigation"; import { useState } from "react"; import { version } from "@/package.json"; import { FeedbackDialogBody } from "@/shared/components/navigation/navbar/feedback-dialog"; import { Badge } from "@/shared/components/ui/badge"; import { Dialog, DialogTrigger } from "@/shared/components/ui/dialog"; import { Tooltip, TooltipContent, TooltipTrigger, } from "@/shared/components/ui/tooltip"; import { DropdownMenu, DropdownMenuContent, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from "@/shared/components/ui/dropdown-menu"; import { Spinner } from "@/shared/components/ui/spinner"; import { authClient } from "@/shared/lib/auth/client"; import { getAvatarSrc } from "@/shared/lib/payers/utils"; import type { UpdateCheckResult } from "@/shared/lib/version/check-update"; import { cn } from "@/shared/utils/ui"; const itemClass = "flex w-full items-center gap-2 rounded-sm px-2 py-1.5 text-sm transition-colors hover:bg-accent"; type NavbarUserProps = { user: { id: string; name: string; email: string; image: string | null; }; pagadorAvatarUrl: string | null; updateCheck: UpdateCheckResult; }; export function NavbarUser({ user, pagadorAvatarUrl, updateCheck, }: NavbarUserProps) { const router = useRouter(); const [logoutLoading, setLogoutLoading] = useState(false); const [feedbackOpen, setFeedbackOpen] = useState(false); const [copied, setCopied] = useState(false); function handleCopyId() { navigator.clipboard.writeText(user.id); setCopied(true); setTimeout(() => setCopied(false), 2000); } const avatarSrc = pagadorAvatarUrl ? getAvatarSrc(pagadorAvatarUrl) : user.image || getAvatarSrc(null); async function handleLogout() { await authClient.signOut({ fetchOptions: { onSuccess: () => router.push("/login"), onRequest: () => setLogoutLoading(true), onResponse: () => setLogoutLoading(false), }, }); } return (
{updateCheck.hasUpdate && ( )}
{user.name}
{user.name}
{user.email} {copied ? "Copiado!" : "Copiar ID do usuário"}
Ajustes Changelog v{version} {updateCheck.hasUpdate && ( Atualização {updateCheck.latestVersion} disponível )}
setFeedbackOpen(false)} />
); }