File size: 1,966 Bytes
f332108 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
import React, { Component } from "react";
import { Link, useLocation } from "react-router-dom";
import astronautHelmet from "../assets/astronaut-helmet.png";
import deadEye from "../assets/dead-eye.png";
import stack from "../assets/stack.png";
import envelope from "../assets/envelope.png";
import "../styles/nav.css";
export default function Nav() {
const location = useLocation();
const getNavPositionClass = () => {
switch (location.pathname) {
case "/":
return "nav-about";
case "/skills":
return "nav-skills";
case "/projects":
return "nav-projects";
case "/contact":
return "nav-contact";
default:
return "";
}
};
const getPageTitle = () => {
switch (location.pathname) {
case "/":
return "ABOUT";
case "/skills":
return "SKILLS";
case "/projects":
return "PROJECTS";
case "/contact":
return "CONTACT";
default:
return "";
}
};
const navPositionClass = getNavPositionClass();
const pageTitle = getPageTitle();
const isCurrentPage = (navClass) => {
return navClass === navPositionClass;
};
const renderNavLink = (to, imgSrc, altText, navClass) => {
const isCurrent = isCurrentPage(navClass);
const linkClass = isCurrent ? "nav-link current" : "nav-link";
return (
<Link to={to} className={linkClass}>
<img src={imgSrc} alt={altText} />
{isCurrent && <h1 className="page-title">{pageTitle}</h1>}
</Link>
);
};
return (
<nav className={`nav ${navPositionClass}`}>
{renderNavLink(
"/",
astronautHelmet,
"astronaut helmet icon",
"nav-about"
)}
{renderNavLink("/skills", deadEye, "deadEye icon", "nav-skills")}
{renderNavLink("/projects", stack, "stack icon", "nav-projects")}
{renderNavLink("contact", envelope, "envelope icon", "nav-contact")}
</nav>
);
} |