All files / components/Nav AppNavbar.jsx

100% Statements 63/63
100% Branches 5/5
100% Functions 2/2
100% Lines 63/63

Press n or j to go to the next uncovered block, b, p or k for the previous block.

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 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 1021x 1x 1x 1x 1x 1x 1x   1x 148x 148x 148x 148x 148x 148x 148x 148x 1x 1x 1x 148x 148x 148x 148x 148x   148x 148x 148x 148x 148x 148x   148x 148x       148x   148x       148x 148x 148x 148x 148x     148x 148x 148x     148x 148x 148x 148x 148x   148x     148x     148x     148x     148x           148x 148x 148x 148x 148x       148x 148x 148x 148x 148x               148x  
import { Container, Nav, Navbar, NavDropdown } from "react-bootstrap";
import { Link, useLocation, useNavigate } from "react-router";
import { hasRole } from "main/utils/currentUser";
import AppNavbarLocalhost from "main/components/Nav/AppNavbarLocalhost";
import GoogleLogin from "main/components/Nav/GoogleLogin";
import GithubLogin from "main/components/Nav/GithubLogin";
import React from "react";
 
export default function AppNavbar({
  currentUser,
  systemInfo,
  doLogout,
  currentUrl = window.location.href,
}) {
  const navigation = useNavigate();
  const location = useLocation();
  const handleSignIn = () => {
    sessionStorage.setItem("redirect", location.pathname);
    navigation("/login");
  };
  return (
    <>
      {(currentUrl.startsWith("http://localhost:3000") ||
        currentUrl.startsWith("http://127.0.0.1:3000")) && (
        <AppNavbarLocalhost url={currentUrl} />
      )}
      <Navbar
        expand="md"
        variant="dark"
        bg="dark"
        sticky="top"
        data-testid="AppNavbar"
      >
        <Container>
          <Navbar.Brand as={Link} to="/">
            Frontiers
          </Navbar.Brand>
 
          <Navbar.Toggle />
 
          <>
            {/* be sure that each NavDropdown has a unique id and data-testid  */}
          </>
 
          <Navbar.Collapse className="justify-content-between">
            <Nav className="mr-auto">
              {systemInfo?.showSwaggerUILink && (
                <>
                  <Nav.Link href="/swagger-ui/index.html">Swagger</Nav.Link>
                </>
              )}
              {systemInfo?.springH2ConsoleEnabled && (
                <>
                  <Nav.Link href="/h2-console">H2Console</Nav.Link>
                </>
              )}
              {hasRole(currentUser, "ROLE_ADMIN") && (
                <NavDropdown
                  title="Admin"
                  id="appnavbar-admin-dropdown"
                  data-testid="appnavbar-admin-dropdown"
                >
                  <NavDropdown.Item as={Link} to="/admin/users">
                    Users
                  </NavDropdown.Item>
                  <NavDropdown.Item as={Link} to="/admin/admins">
                    Admins
                  </NavDropdown.Item>
                  <NavDropdown.Item as={Link} to="/admin/instructors">
                    Instructors
                  </NavDropdown.Item>
                  <NavDropdown.Item as={Link} to="/admin/courses">
                    Courses
                  </NavDropdown.Item>
                  <NavDropdown.Item as={Link} to="/admin/jobs">
                    Jobs
                  </NavDropdown.Item>
                </NavDropdown>
              )}
            </Nav>
            {hasRole(currentUser, "ROLE_GITHUB") && (
              <Nav className="ml-auto">
                <GithubLogin
                  currentUser={currentUser}
                  systemInfo={systemInfo}
                />
              </Nav>
            )}
            <Nav className="ml-auto">
              <GoogleLogin
                currentUser={currentUser}
                handleLogin={handleSignIn}
                doLogout={doLogout}
              />
            </Nav>
          </Navbar.Collapse>
        </Container>
      </Navbar>
    </>
  );
}