appointments-software / frontend / app / src / components / common / Navbar.js
Navbar.js
Raw
import React, { useEffect, useCallback } from "react";
import { useDispatch, useSelector } from "react-redux";
import { Link, useLocation } from "react-router-dom";
import { logout } from "../../redux/actions/auth";
import { clearMessage } from "../../redux/actions/message";

const Navbar = () => {
  const { user: currentUser } = useSelector((state) => state.auth);
  const dispatch = useDispatch();
  let location = useLocation();

  useEffect(() => {
    if (["/login", "/register"].includes(location.pathname)) {
      dispatch(clearMessage()); // clear message when changing location
    }
  }, [dispatch, location]);

  const logOut = useCallback(() => {
    dispatch(logout());
  }, [dispatch]);

  return (
    <div className="nav-bar">
      <Link to={"/"} className="nav-bar-header">
        SCHEDULEPOINTE
      </Link>
      {currentUser ? (
        <div className="nav-bar-options">
          <Link to={"/user"} className="nav-bar-text">
            User
          </Link>
          <Link to={"/profile"} className="nav-bar-text">
            {currentUser.username}
          </Link>
          <a href="/login" className="nav-bar-text" onClick={logOut}>
            Log Out
          </a>
        </div>
      ) : (
        <div className="nav-bar-options">
          <Link to={"/login"} className="nav-bar-text">
            Login
          </Link>
          <Link to={"/register"} className="nav-bar-text">
            Register
          </Link>
        </div>
      )}
    </div>
  );
};

export default Navbar;