Sign in button
This commit is contained in:
+43
-13
@@ -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>
|
||||||
)}
|
)}
|
||||||
|
|||||||
Reference in New Issue
Block a user