JourneyPoint / journeypoint / frontend / src / Components / Navbar.js
Navbar.js
Raw
import React, { useState, useEffect } from 'react';
import { Link, useNavigate } from 'react-router-dom';
import { Dropdown } from 'react-bootstrap';

const Navbar = () => {
  const [username, setUsername] = useState('');
  const [isLoggedIn, setIsLoggedIn] = useState(false);
  const navigate = useNavigate();

  // Fetch username and login status from localStorage
  useEffect(() => {
    const storedUsername = localStorage.getItem('username');
    const storedLoginStatus = localStorage.getItem('login');

    if (storedUsername && storedLoginStatus === 'true') {
      setUsername(storedUsername);
      setIsLoggedIn(true);
    }
  }, []);

  // Logout function
  const handleLogout = () => {
    localStorage.removeItem('login');
    localStorage.removeItem('username');
    setIsLoggedIn(false);
    setUsername('');
    navigate('/login');
  };

  return (
    <nav className="navbar navbar-expand-lg bg-body-tertiary" data-bs-theme="dark">
      <div className="container-fluid">
        <Link className="navbar-brand" to="/">JourneyPoint</Link>
        <button className="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
          <span className="navbar-toggler-icon"></span>
        </button>
        <div className="collapse navbar-collapse" id="navbarNav">
          <ul className="navbar-nav me-auto mb-2 mb-lg-0">
            <li className="nav-item">
              <Link className="nav-link active" to="/">Home</Link>
            </li>
    
            {/* Always show the Visit and FAQ link */}
            <li className="nav-item">
              <Link className="nav-link active" to="/visit">Visit</Link>
            </li>

           <li className="nav-item">
              <Link className="nav-link active" to="/FAQ">FAQ</Link>
            </li>

            {/* Login and SignUp only visible if the user is not logged in */}
            {!isLoggedIn && (
              <>
                <li className="nav-item">
                  <Link className="nav-link active" to="/login">Login</Link>
                </li>
                <li className="nav-item">
                  <Link className="nav-link active" to="/accountcreation">Sign Up</Link>
                </li>
              </>
            )}
            {/* Blog link only visible when logged in */}
            {isLoggedIn && (
              <li className="nav-item">
                <Link className="nav-link active" to="/blog">Blog</Link>
              </li>
            )}
            {/* Profile link only visible when logged in */}
            {isLoggedIn && (
              <li className="nav-item">
                <Link className="nav-link active" to="/profile">Profile</Link>
              </li>
            )}

            {/* Profile link only visible when logged in */}
            {isLoggedIn && (
              <li className="nav-item">
                <Link className="nav-link active" to="/review">Review</Link>
              </li>
            )}
            {/* Profile link only visible when logged in */}
            {isLoggedIn && (
              <li className="nav-item">
                <Link className="nav-link active" to="/explore">Explore</Link>
              </li>
            )}

            
          </ul>

          {/* Dropdown only shows when logged in */}
          {isLoggedIn && (
            <ul className="navbar-nav ms-auto mb-2 mb-lg-0">
              <li className="nav-item">
                <Dropdown>
                  <Dropdown.Toggle variant="success" id="dropdown-custom-components">
                    {username ? username : 'More'}
                  </Dropdown.Toggle>

                  <Dropdown.Menu>
                    <Dropdown.Item onClick={handleLogout}>Logout</Dropdown.Item>
                  </Dropdown.Menu>
                </Dropdown>
              </li>
            </ul>
          )}
        </div>
      </div>
    </nav>
  );
};

export default Navbar;