All files / components navbar.tsx

0% Statements 0/47
100% Branches 1/1
100% Functions 1/1
0% Lines 0/47

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                                                                                                                                 
'use client';
 
import { useContext } from 'react';
import Container from 'react-bootstrap/Container';
import Nav from 'react-bootstrap/Nav';
import NavDropdown from 'react-bootstrap/NavDropdown';
import Navbar from 'react-bootstrap/Navbar';
 
import { PageConfig } from '@/types/frontend/page';
import {
  DarkModeContext, LocationContext,
  LoggedInUserContext
} from '@/utils/frontend/clientContexts';
 
export default function CofrnNavbar({
  pageConfig,
}: Readonly<{
  pageConfig: PageConfig;
}>) {
  const colorModeName = useContext(DarkModeContext);
 
  const loc = useContext(LocationContext);
  const redirectTo = encodeURIComponent(loc ? `${loc?.pathname}${loc?.search}` : '');
  const loginLink = `/login?redirectTo=${redirectTo}`;
  const logoutLink = `/api/v2/logout/?redirectTo=${redirectTo}`;
 
  const user = useContext(LoggedInUserContext);
  if (user === null || colorModeName === null) {
    return null;
  }
 
  return (
    <Navbar
      fixed='top'
      expand='lg'
      bg={colorModeName}
    >
      <Container
        fluid={true}
      >
        <Navbar.Brand className='flex-grow-1'>COFRN {pageConfig?.navTitle || pageConfig?.title || ''}</Navbar.Brand>
        <Navbar.Toggle aria-controls='basic-navbar-nav' />
 
        <Navbar.Collapse id='basic-navbar-nav'>
          <Nav className='me-auto mb-2 mb-lg-0' activeKey={loc?.pathname || '/'}>
            <Nav.Link href='/'>Radio Traffic</Nav.Link>
            <Nav.Link href='/weather'>Weather</Nav.Link>
          </Nav>
 
          <Nav className='ms-auto mb-2 mb-lg-0' activeKey={loc?.pathname || '/'}>
            {!user.isUser && <Nav.Link href={loginLink}>Login</Nav.Link>}
            {user.isUser && <NavDropdown align='end' title={user.fName} id='nav-dropdown'>
              <NavDropdown.Item as={Nav.Link} className='px-3' href={logoutLink}>Logout</NavDropdown.Item>
              <NavDropdown.Item as={Nav.Link} className='px-3' href='/profile'>Edit Profile</NavDropdown.Item>
              {user.isAdmin && <NavDropdown.Item as={Nav.Link} className='px-3' href='/users'>Manage Users</NavDropdown.Item>}
              {user.isAdmin && <NavDropdown.Item as={Nav.Link} className='px-3' href='/texts'>View Texts</NavDropdown.Item>}
              {user.isAdmin && <NavDropdown.Item as={Nav.Link} className='px-3' href='/status'>System Status</NavDropdown.Item>}
            </NavDropdown>}
          </Nav>
        </Navbar.Collapse>
      </Container>
    </Navbar>
  );
}