"use client" import * as React from "react" import { SignInButton, useAuth, useUser } from "@clerk/nextjs" import { useAtom } from "jotai" import Link from "next/link" import { usePathname } from "next/navigation" import { icons } from "lucide-react" import { LaIcon } from "@/components/custom/la-icon" import { DiscordIcon } from "@/components/custom/discordIcon" import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger } from "@/components/ui/dropdown-menu" import { Avatar, AvatarImage } from "@/components/ui/avatar" import { Button } from "@/components/ui/button" import { cn } from "@/lib/utils" import { Feedback } from "./feedback" import { showShortcutAtom } from "@/components/custom/Shortcut/shortcut" import { ShortcutKey } from "@/components/minimal-tiptap/components/shortcut-key" import { useKeyboardManager } from "@/hooks/use-keyboard-manager" export const ProfileSection: React.FC = () => { const { user, isSignedIn } = useUser() const { signOut } = useAuth() const [menuOpen, setMenuOpen] = React.useState(false) const pathname = usePathname() const [, setShowShortcut] = useAtom(showShortcutAtom) const { disableKeydown } = useKeyboardManager("profileSection") React.useEffect(() => { disableKeydown(menuOpen) }, [menuOpen, disableKeydown]) if (!isSignedIn) { return (
) } return (
) } interface ProfileDropdownProps { user: any menuOpen: boolean setMenuOpen: (open: boolean) => void signOut: () => void setShowShortcut: (show: boolean) => void } const ProfileDropdown: React.FC = ({ user, menuOpen, setMenuOpen, signOut, setShowShortcut }) => (
) interface DropdownMenuItemsProps { signOut: () => void setShowShortcut: (show: boolean) => void } const DropdownMenuItems: React.FC = ({ signOut, setShowShortcut }) => ( <> setShowShortcut(true)}> Shortcut
Log out
) interface MenuLinkProps { href: string icon: keyof typeof icons | React.FC text: string iconClass?: string } const MenuLink: React.FC = ({ href, icon, text, iconClass = "" }) => { const IconComponent = typeof icon === "string" ? icons[icon] : icon return (
{text}
) } export default ProfileSection