"use client"; import { 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 { 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 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}
Ajustes Changelog v{version} {updateCheck.hasUpdate && ( Atualização {updateCheck.latestVersion} disponível )}
setFeedbackOpen(false)} />
); }