import { identicon } from '@dicebear/collection'; import { createAvatar } from '@dicebear/core'; import { IconDotsVertical, IconLogout, } from '@tabler/icons-react'; import { isEmpty } from 'lodash-es'; import { useMemo } from 'react'; import { Avatar, AvatarImage, } from '@/components/ui/avatar'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu'; import { SidebarMenu, SidebarMenuButton, SidebarMenuItem, useSidebar, } from '@/components/ui/sidebar'; import { useUserInfo } from '@/hooks/data/useUserInfo'; import { logout } from '@/lib/token'; import { withFallback } from '../hoc/with-fallback'; import { Skeleton } from '../ui/skeleton'; export function NavUser_() { const { isMobile } = useSidebar(); const { data } = useUserInfo(); const user = data.data!; const IdentIcon = useMemo(() => { const avatar = createAvatar(identicon, { size: 128, seed: user.user_id, }).toDataUri(); return ; }, [user.user_id]); return ( {!isEmpty(user.avatar) ? : IdentIcon} {user.nickname} {user.email} {!isEmpty(user.avatar) ? : IdentIcon} {user.nickname} {user.email} logout()}> 登出 ); } function NavUserSkeleton() { return ( ); } export const NavUser = withFallback(NavUser_, );