UserMenuContent.tsx 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import { Link, router } from '@inertiajs/react';
  2. import { LogOut, Settings } from 'lucide-react';
  3. import { UserInfo } from '@/common/UserInfo';
  4. import { useMobileNavigation } from '@/common/hooks/useMobileNavigation';
  5. import { type User } from '@/common/types';
  6. import { logout } from '@/routes';
  7. import { edit } from '@/routes/profile';
  8. import { DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator } from '@/shadcn/dropdown-menu';
  9. interface UserMenuContentProps {
  10. user: User;
  11. }
  12. export function UserMenuContent({ user }: UserMenuContentProps) {
  13. const cleanup = useMobileNavigation();
  14. const handleLogout = () => {
  15. cleanup();
  16. router.flushAll();
  17. };
  18. return (
  19. <>
  20. <DropdownMenuLabel className="p-0 font-normal">
  21. <div className="flex items-center gap-2 px-1 py-1.5 text-left text-sm">
  22. <UserInfo user={user} showEmail={true} />
  23. </div>
  24. </DropdownMenuLabel>
  25. <DropdownMenuSeparator />
  26. <DropdownMenuGroup>
  27. <DropdownMenuItem asChild>
  28. <Link className="block w-full" href={edit()} as="button" prefetch onClick={cleanup}>
  29. <Settings className="mr-2" />
  30. Settings
  31. </Link>
  32. </DropdownMenuItem>
  33. </DropdownMenuGroup>
  34. <DropdownMenuSeparator />
  35. <DropdownMenuItem asChild>
  36. <Link className="block w-full" href={logout()} as="button" onClick={handleLogout}>
  37. <LogOut className="mr-2" />
  38. Log out
  39. </Link>
  40. </DropdownMenuItem>
  41. </>
  42. );
  43. }