| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- import { Link } from '@tanstack/react-router'
- import {
- BadgeCheck,
- Bell,
- ChevronsUpDown,
- CreditCard,
- LogOut,
- Sparkles,
- } from 'lucide-react'
- import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'
- import {
- DropdownMenu,
- DropdownMenuContent,
- DropdownMenuGroup,
- DropdownMenuItem,
- DropdownMenuLabel,
- DropdownMenuSeparator,
- DropdownMenuTrigger,
- } from '@/components/ui/dropdown-menu'
- import {
- SidebarMenu,
- SidebarMenuButton,
- SidebarMenuItem,
- useSidebar,
- } from '@/components/ui/sidebar'
- type NavUserProps = {
- user: {
- name: string
- email: string
- avatar: string
- }
- }
- export function NavUser({ user }: NavUserProps) {
- const { isMobile } = useSidebar()
- return (
- <SidebarMenu>
- <SidebarMenuItem>
- <DropdownMenu>
- <DropdownMenuTrigger asChild>
- <SidebarMenuButton
- size='lg'
- className='data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground'
- >
- <Avatar className='h-8 w-8 rounded-lg'>
- <AvatarImage src={user.avatar} alt={user.name} />
- <AvatarFallback className='rounded-lg'>SN</AvatarFallback>
- </Avatar>
- <div className='grid flex-1 text-start text-sm leading-tight'>
- <span className='truncate font-semibold'>{user.name}</span>
- <span className='truncate text-xs'>{user.email}</span>
- </div>
- <ChevronsUpDown className='ms-auto size-4' />
- </SidebarMenuButton>
- </DropdownMenuTrigger>
- <DropdownMenuContent
- className='w-(--radix-dropdown-menu-trigger-width) min-w-56 rounded-lg'
- side={isMobile ? 'bottom' : 'right'}
- align='end'
- sideOffset={4}
- >
- <DropdownMenuLabel className='p-0 font-normal'>
- <div className='flex items-center gap-2 px-1 py-1.5 text-start text-sm'>
- <Avatar className='h-8 w-8 rounded-lg'>
- <AvatarImage src={user.avatar} alt={user.name} />
- <AvatarFallback className='rounded-lg'>SN</AvatarFallback>
- </Avatar>
- <div className='grid flex-1 text-start text-sm leading-tight'>
- <span className='truncate font-semibold'>{user.name}</span>
- <span className='truncate text-xs'>{user.email}</span>
- </div>
- </div>
- </DropdownMenuLabel>
- <DropdownMenuSeparator />
- <DropdownMenuGroup>
- <DropdownMenuItem>
- <Sparkles />
- Upgrade to Pro
- </DropdownMenuItem>
- </DropdownMenuGroup>
- <DropdownMenuSeparator />
- <DropdownMenuGroup>
- <DropdownMenuItem asChild>
- <Link to='/settings/account'>
- <BadgeCheck />
- Account
- </Link>
- </DropdownMenuItem>
- <DropdownMenuItem asChild>
- <Link to='/settings'>
- <CreditCard />
- Billing
- </Link>
- </DropdownMenuItem>
- <DropdownMenuItem asChild>
- <Link to='/settings/notifications'>
- <Bell />
- Notifications
- </Link>
- </DropdownMenuItem>
- </DropdownMenuGroup>
- <DropdownMenuSeparator />
- <DropdownMenuItem>
- <LogOut />
- Log out
- </DropdownMenuItem>
- </DropdownMenuContent>
- </DropdownMenu>
- </SidebarMenuItem>
- </SidebarMenu>
- )
- }
|