profile-dropdown.tsx 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  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-muted-foreground text-xs leading-none'>
  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 onClick={() => setOpen(true)}>
  62. Sign out
  63. <DropdownMenuShortcut>⇧⌘Q</DropdownMenuShortcut>
  64. </DropdownMenuItem>
  65. </DropdownMenuContent>
  66. </DropdownMenu>
  67. <SignOutDialog open={!!open} onOpenChange={setOpen} />
  68. </>
  69. )
  70. }