import * as React from "react" import { useAtom } from "jotai" import { icons } from "lucide-react" import { LaIcon } from "@/components/custom/la-icon" import { DiscordIcon } from "@/components/icons/discord-icon" 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 { showShortcutAtom } from "@/components/shortcut/shortcut" import { useKeyboardManager } from "@/hooks/use-keyboard-manager" import { SignInButton, useAuth, useUser } from "@clerk/tanstack-start" import { Link, useLocation } from "@tanstack/react-router" import { ShortcutKey } from "@shared/minimal-tiptap/components/shortcut-key" import { Feedback } from "./feedback" import { useAccount } from "~/lib/providers/jazz-provider" export const ProfileSection: React.FC = () => { const { user, isSignedIn } = useUser() const [menuOpen, setMenuOpen] = React.useState(false) const { pathname } = useLocation() 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 setShowShortcut: (show: boolean) => void } const ProfileDropdown: React.FC = ({ user, menuOpen, setMenuOpen, setShowShortcut, }) => (
) interface DropdownMenuItemsProps { setShowShortcut: (show: boolean) => void } const DropdownMenuItems: React.FC = ({ setShowShortcut, }) => { const { signOut } = useAuth() const { logOut } = useAccount() const handleSignOut = React.useCallback(async () => { try { logOut() signOut(() => { window.location.href = "/" }) } catch (error) { console.error("Error signing out:", error) } }, [logOut, signOut]) return ( <> setShowShortcut(true)}> Shortcuts
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