profile-dropdown.tsx 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import { Link } from '@tanstack/react-router'
  2. import useDialogState from '@/hooks/use-dialog-state'
  3. import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'
  4. import { Button } from '@/components/ui/button'
  5. import {
  6. DropdownMenu,
  7. DropdownMenuContent,
  8. DropdownMenuGroup,
  9. DropdownMenuItem,
  10. DropdownMenuLabel,
  11. DropdownMenuSeparator,
  12. DropdownMenuShortcut,
  13. DropdownMenuTrigger,
  14. } from '@/components/ui/dropdown-menu'
  15. import { SignOutDialog } from '@/components/sign-out-dialog'
  16. export function ProfileDropdown() {
  17. const [open, setOpen] = useDialogState()
  18. return (
  19. <>
  20. <DropdownMenu modal={false}>
  21. <DropdownMenuTrigger asChild>
  22. <Button variant='ghost' className='relative h-8 w-8 rounded-full'>
  23. <Avatar className='h-8 w-8'>
  24. <AvatarImage src='/avatars/01.png' alt='@shadcn' />
  25. <AvatarFallback>SN</AvatarFallback>
  26. </Avatar>
  27. </Button>
  28. </DropdownMenuTrigger>
  29. <DropdownMenuContent className='w-56' align='end' forceMount>
  30. <DropdownMenuLabel className='font-normal'>
  31. <div className='flex flex-col gap-1.5'>
  32. <p className='text-sm leading-none font-medium'>satnaing</p>
  33. <p className='text-xs leading-none text-muted-foreground'>
  34. satnaingdev@gmail.com
  35. </p>
  36. </div>
  37. </DropdownMenuLabel>
  38. <DropdownMenuSeparator />
  39. <DropdownMenuGroup>
  40. <DropdownMenuItem asChild>
  41. <Link to='/settings'>
  42. Profile
  43. <DropdownMenuShortcut>⇧⌘P</DropdownMenuShortcut>
  44. </Link>
  45. </DropdownMenuItem>
  46. <DropdownMenuItem asChild>
  47. <Link to='/settings'>
  48. Billing
  49. <DropdownMenuShortcut>⌘B</DropdownMenuShortcut>
  50. </Link>
  51. </DropdownMenuItem>
  52. <DropdownMenuItem asChild>
  53. <Link to='/settings'>
  54. Settings
  55. <DropdownMenuShortcut>⌘S</DropdownMenuShortcut>
  56. </Link>
  57. </DropdownMenuItem>
  58. <DropdownMenuItem>New Team</DropdownMenuItem>
  59. </DropdownMenuGroup>
  60. <DropdownMenuSeparator />
  61. <DropdownMenuItem variant='destructive' onClick={() => setOpen(true)}>
  62. Sign out
  63. <DropdownMenuShortcut className='text-current'>
  64. ⇧⌘Q
  65. </DropdownMenuShortcut>
  66. </DropdownMenuItem>
  67. </DropdownMenuContent>
  68. </DropdownMenu>
  69. <SignOutDialog open={!!open} onOpenChange={setOpen} />
  70. </>
  71. )
  72. }