header.tsx 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. "use client";
  2. import Link from "next/link";
  3. import Image from "next/image";
  4. import { LoginLink, LogoutLink } from "@kinde-oss/kinde-auth-nextjs/server";
  5. import { useKindeBrowserClient } from "@kinde-oss/kinde-auth-nextjs";
  6. export default function Header() {
  7. const { isAuthenticated, getUser } = useKindeBrowserClient();
  8. const user = getUser();
  9. return (
  10. <header className="border-b border-gray-200 bg-white">
  11. <div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
  12. <div className="flex justify-between items-center py-4">
  13. <div className="flex items-center">
  14. <Link href="/" className="flex items-center">
  15. <img
  16. src="/vtorio.svg"
  17. alt="vtor.io"
  18. className="h-8 w-auto"
  19. />
  20. </Link>
  21. </div>
  22. <div className="flex items-center space-x-4">
  23. {!isAuthenticated &&
  24. <LoginLink
  25. className="rounded-full border border-solid border-transparent transition-colors flex items-center justify-center bg-foreground text-background gap-2 hover:bg-[#383838] dark:hover:bg-[#ccc] text-sm sm:text-base h-10 sm:h-12 px-4 sm:px-5">
  26. Login
  27. </LoginLink>
  28. }
  29. { user &&
  30. <>
  31. <Image
  32. className="rounded-full ml-auto"
  33. src={user.picture!}
  34. alt="User Avatar"
  35. width={35}
  36. height={35}
  37. />
  38. {user.email}
  39. </>
  40. }
  41. { isAuthenticated &&
  42. <LogoutLink
  43. className="rounded-full border border-solid border-black/[.08] dark:border-white/[.145] transition-colors flex items-center justify-center hover:bg-[#f2f2f2] dark:hover:bg-[#1a1a1a] hover:border-transparent text-sm sm:text-base h-10 sm:h-12 px-4 sm:px-5">
  44. Logout
  45. </LogoutLink>
  46. }
  47. </div>
  48. </div>
  49. </div>
  50. </header>
  51. );
  52. }