serverless-workflow-examples/serverless-workflow-loanbroker-showcase/loanbroker-js/components/Navbar.tsx (87 lines of code) (raw):
import Link from "next/link";
import { useRouter } from "next/router";
import routes, { Route } from "../routes";
const NavItem = ({ route }: { route: Route }) => {
const router = useRouter();
return (
<li className="nav-item">
<Link href={route.link}>
<a
className={
router.pathname === route.link ? "nav-link active" : "nav-link"
}
aria-current="page"
href="#"
>
{route.name}
</a>
</Link>
</li>
);
};
const NavDropdown = ({ route }: { route: Route }) => (
<li className="nav-item dropdown">
<a
className="nav-link dropdown-toggle"
href="#"
role="button"
data-bs-toggle="dropdown"
aria-expanded="false"
>
{route.name}
</a>
<ul className="dropdown-menu">
{route.items?.map((item) => (
<NavDropdownItem key={item.name} route={item}></NavDropdownItem>
))}
</ul>
</li>
);
const NavDropdownItem = ({ route }: { route: Route }) => (
<li>
<Link href={route.link}>
<a className="dropdown-item" href="#">
{route.name}
</a>
</Link>
</li>
);
const getNavItem = (route: Route) => {
if (route.items) {
return <NavDropdown key={route.name} route={route}></NavDropdown>;
} else {
return <NavItem key={route.name} route={route}></NavItem>;
}
};
const Navbar = () => (
<nav className="navbar navbar-expand-lg navbar-light bg-primary">
<div className="container">
<a className="navbar-brand" href="#">
<img
src="/capital-bank.png"
alt="Logo"
width="250"
height="40"
className="d-inline-block align-text-top"
/>
</a>
<button
className="navbar-toggler"
type="button"
data-bs-toggle="collapse"
data-bs-target="#navbarSupportedContent"
aria-controls="navbarSupportedContent"
aria-expanded="false"
aria-label="Toggle navigation"
>
<span className="navbar-toggler-icon"></span>
</button>
<div className="collapse navbar-collapse" id="navbarSupportedContent">
<ul className="navbar-nav me-auto mb-2 mb-lg-0">
{routes.map((r) => getNavItem(r))}
</ul>
</div>
</div>
</nav>
);
export default Navbar;