Sign in button
This commit is contained in:
+43
-13
@@ -1,19 +1,35 @@
|
||||
'use client';
|
||||
import { useState } from 'react';
|
||||
import { useState, useEffect } from 'react';
|
||||
import Link from 'next/link';
|
||||
import Image from 'next/image';
|
||||
import { usePathname } from 'next/navigation';
|
||||
import { FaGoogle } from 'react-icons/fa';
|
||||
import logo from '@/assets/images/logo-white.png';
|
||||
import profileDefault from '@/assets/images/profile.png';
|
||||
import { signIn, signOut, useSession, getProviders } from 'next-auth/react';
|
||||
|
||||
const Navbar = () => {
|
||||
const { data: session } = useSession();
|
||||
const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false);
|
||||
const [isProfileMenuOpen, setIsProfileMenuOpen] = useState(false);
|
||||
const [isLoggedIn, setIsLoggedIn] = useState(false);
|
||||
const [providers, setProviders] = useState(null);
|
||||
|
||||
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 (
|
||||
<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'>
|
||||
@@ -88,19 +104,26 @@ const Navbar = () => {
|
||||
</div>
|
||||
|
||||
{/* <!-- Right Side Menu (Logged Out) --> */}
|
||||
{!isLoggedIn && (
|
||||
{!session && (
|
||||
<div className='hidden md:block md:ml-6'>
|
||||
<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'>
|
||||
<FaGoogle className='text-white mr-2' />
|
||||
<span>Login or Register</span>
|
||||
</button>
|
||||
{providers &&
|
||||
Object.values(providers).map((provider) => (
|
||||
<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>
|
||||
)}
|
||||
|
||||
{/* <!-- 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'>
|
||||
<Link href='/messages' className='relative group'>
|
||||
<button
|
||||
@@ -228,13 +251,20 @@ const Navbar = () => {
|
||||
>
|
||||
Add Property
|
||||
</Link>
|
||||
{!isLoggedIn && (
|
||||
{!session && (
|
||||
<div className='block md:ml-6'>
|
||||
<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'>
|
||||
<FaGoogle className='text-white mr-2' />
|
||||
<span>Login or Register</span>
|
||||
</button>
|
||||
{providers &&
|
||||
Object.values(providers).map((provider) => (
|
||||
<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>
|
||||
)}
|
||||
|
||||
Reference in New Issue
Block a user