Sign in button

This commit is contained in:
Brad Traversy
2024-07-10 08:31:00 -04:00
parent a255f02cd2
commit 81d75e7bb9
+43 -13
View File
@@ -1,19 +1,35 @@
'use client'; 'use client';
import { useState } from 'react'; import { useState, useEffect } from 'react';
import Link from 'next/link'; import Link from 'next/link';
import Image from 'next/image'; import Image from 'next/image';
import { usePathname } from 'next/navigation'; import { usePathname } from 'next/navigation';
import { FaGoogle } from 'react-icons/fa'; import { FaGoogle } from 'react-icons/fa';
import logo from '@/assets/images/logo-white.png'; import logo from '@/assets/images/logo-white.png';
import profileDefault from '@/assets/images/profile.png'; import profileDefault from '@/assets/images/profile.png';
import { signIn, signOut, useSession, getProviders } from 'next-auth/react';
const Navbar = () => { const Navbar = () => {
const { data: session } = useSession();
const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false); const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false);
const [isProfileMenuOpen, setIsProfileMenuOpen] = useState(false); const [isProfileMenuOpen, setIsProfileMenuOpen] = useState(false);
const [isLoggedIn, setIsLoggedIn] = useState(false); const [providers, setProviders] = useState(null);
const pathname = usePathname(); const pathname = usePathname();
useEffect(() => {
const setAuthProviders = async () => {
const res = await getProviders();
setProviders(res);
};
setAuthProviders();
// NOTE: close mobile menu if the viewport size is changed
window.addEventListener('resize', () => {
setIsMobileMenuOpen(false);
});
}, []);
return ( return (
<nav className='bg-blue-700 border-b border-blue-500'> <nav className='bg-blue-700 border-b border-blue-500'>
<div className='mx-auto max-w-7xl px-2 sm:px-6 lg:px-8'> <div className='mx-auto max-w-7xl px-2 sm:px-6 lg:px-8'>
@@ -88,19 +104,26 @@ const Navbar = () => {
</div> </div>
{/* <!-- Right Side Menu (Logged Out) --> */} {/* <!-- Right Side Menu (Logged Out) --> */}
{!isLoggedIn && ( {!session && (
<div className='hidden md:block md:ml-6'> <div className='hidden md:block md:ml-6'>
<div className='flex items-center'> <div className='flex items-center'>
<button className='flex items-center text-white bg-gray-700 hover:bg-gray-900 hover:text-white rounded-md px-3 py-2'> {providers &&
<FaGoogle className='text-white mr-2' /> Object.values(providers).map((provider) => (
<span>Login or Register</span> <button
</button> key={provider.name}
onClick={() => signIn(provider.id)}
className='flex items-center text-white bg-gray-700 hover:bg-gray-900 hover:text-white rounded-md px-3 py-2 my-3'
>
<FaGoogle className='text-white mr-2' />
<span>Login or Register</span>
</button>
))}
</div> </div>
</div> </div>
)} )}
{/* <!-- Right Side Menu (Logged In) --> */} {/* <!-- Right Side Menu (Logged In) --> */}
{isLoggedIn && ( {session && (
<div className='absolute inset-y-0 right-0 flex items-center pr-2 md:static md:inset-auto md:ml-6 md:pr-0'> <div className='absolute inset-y-0 right-0 flex items-center pr-2 md:static md:inset-auto md:ml-6 md:pr-0'>
<Link href='/messages' className='relative group'> <Link href='/messages' className='relative group'>
<button <button
@@ -228,13 +251,20 @@ const Navbar = () => {
> >
Add Property Add Property
</Link> </Link>
{!isLoggedIn && ( {!session && (
<div className='block md:ml-6'> <div className='block md:ml-6'>
<div className='flex items-center'> <div className='flex items-center'>
<button className='flex items-center text-white bg-gray-700 hover:bg-gray-900 hover:text-white rounded-md px-3 py-2 my-3'> {providers &&
<FaGoogle className='text-white mr-2' /> Object.values(providers).map((provider) => (
<span>Login or Register</span> <button
</button> key={provider.name}
onClick={() => signIn(provider.id)}
className='flex items-center text-white bg-gray-700 hover:bg-gray-900 hover:text-white rounded-md px-3 py-2 my-3'
>
<FaGoogle className='text-white mr-2' />
<span>Login or Register</span>
</button>
))}
</div> </div>
</div> </div>
)} )}