Files
Checkmate/Client/src/Components/NavBar/index.jsx
T

206 lines
5.7 KiB
React
Raw Normal View History

2024-06-06 12:27:36 +03:30
import "./index.css";
import { useState } from "react";
import AppBar from "@mui/material/AppBar";
import Box from "@mui/material/Box";
import Toolbar from "@mui/material/Toolbar";
import IconButton from "@mui/material/IconButton";
import Typography from "@mui/material/Typography";
import Menu from "@mui/material/Menu";
import MenuIcon from "@mui/icons-material/Menu";
import Container from "@mui/material/Container";
import Avatar from "@mui/material/Avatar";
import Tooltip from "@mui/material/Tooltip";
import MenuItem from "@mui/material/MenuItem";
import { useTheme } from "@mui/material/styles";
import ChevronDown from "../../assets/Images/Icon-chevron-down.png";
2024-06-24 11:21:30 -07:00
import { clearAuthState } from "../../Features/Auth/authSlice";
2024-06-24 12:00:49 -07:00
import { clearMonitorState } from "../../Features/Monitors/monitorsSlice";
2024-06-24 11:21:30 -07:00
import { useDispatch } from "react-redux";
import { useNavigate } from "react-router-dom";
2024-05-06 12:29:36 -04:00
2024-06-06 12:27:36 +03:30
const settings = ["Profile", "Team", "Invite Colleagues", "Logout"];
/**
* NavBar component
*
* A responsive navigation bar component with a user menu.
*
* @component
* @example
* return (
* <NavBar />
* )
*/
function NavBar() {
const theme = useTheme();
const [anchorElUser, setAnchorElUser] = useState(null);
2024-06-24 11:21:30 -07:00
const dispatch = useDispatch();
const navigate = useNavigate();
/**
* Handles opening the user menu.
*
* @param {React.MouseEvent<HTMLElement>} event - The event triggered by clicking the user menu button.
*/
const handleOpenUserMenu = (event) => {
setAnchorElUser(event.currentTarget);
};
2024-06-24 11:21:30 -07:00
/**
* Handles logging out the user
*
*/
const logout = () => {
// Clear auth state
dispatch(clearAuthState());
2024-06-24 12:00:49 -07:00
dispatch(clearMonitorState());
2024-06-24 11:21:30 -07:00
navigate("/");
};
/**
* Handles closing the user menu.
*/
2024-06-24 11:21:30 -07:00
const handleCloseUserMenu = (setting) => {
setAnchorElUser(null);
2024-06-24 11:21:30 -07:00
switch (setting) {
case "Profile":
console.log("Profile");
break;
case "Team":
console.log("Team");
break;
case "Invite Colleagues":
console.log("Invite Colleagues");
break;
case "Logout":
logout();
break;
default:
break;
}
};
return (
2024-06-06 12:27:36 +03:30
<AppBar
2024-06-18 19:17:21 -04:00
position="sticky"
2024-06-06 12:27:36 +03:30
sx={{
width: "100%",
backgroundColor: "white",
boxShadow: "var(--env-var-shadow-1)",
}}
>
<Container maxWidth="xxl" sx={{ width: "100%" }}>
<Toolbar disableGutters>
<Typography
variant="h6"
noWrap
component="a"
href="#"
sx={{
mr: 2,
2024-06-06 12:27:36 +03:30
display: { xs: "none", md: "flex" },
fontWeight: theme.typography.fontWeightBold,
letterSpacing: theme.spacing(0.3),
2024-06-06 12:27:36 +03:30
color: "var(--env-var-color-11)",
textDecoration: "none",
}}
>
2024-06-06 12:27:36 +03:30
Peak Watch
</Typography>
2024-06-06 12:27:36 +03:30
<Box sx={{ flexGrow: 1, display: { xs: "flex", md: "none" } }}>
<IconButton
size="large"
aria-label="account of current user"
aria-controls="menu-appbar"
aria-haspopup="true"
color="inherit"
>
<MenuIcon />
</IconButton>
</Box>
<Typography
variant="h5"
noWrap
component="a"
href="#"
sx={{
mr: 2,
2024-06-06 12:27:36 +03:30
display: { xs: "flex", md: "none" },
flexGrow: 1,
2024-06-06 12:27:36 +03:30
fontFamily: "monospace",
fontWeight: theme.typography.fontWeightBold,
letterSpacing: theme.spacing(0.3),
2024-06-06 12:27:36 +03:30
color: "inherit",
textDecoration: "none",
}}
>
UPTIME GENIE
</Typography>
<Box sx={{ flexGrow: 1 }} />
<Box sx={{ flexGrow: 0 }}>
<Tooltip title="Open settings">
2024-06-06 22:04:30 +03:30
<IconButton
id="icon-button"
onClick={handleOpenUserMenu}
sx={{ p: 0 }}
>
2024-06-06 12:27:36 +03:30
<div className="icon-button-toggle">
<Avatar
alt="Remy Sharp"
src="/static/images/avatar/2.jpg"
className="icon-button-avatar"
style={{ width: "25px", height: "25px" }}
/>
<div className="icon-button-toggle-title">Jackie Dawn</div>
<img
className="icon-button-toggle-pic"
src={ChevronDown}
alt="ChevronDown"
/>
</div>
</IconButton>
</Tooltip>
<Menu
sx={{ mt: theme.spacing(5.5) }}
id="menu-appbar"
anchorEl={anchorElUser}
anchorOrigin={{
2024-06-06 12:27:36 +03:30
vertical: "top",
horizontal: "right",
}}
keepMounted
transformOrigin={{
2024-06-06 12:27:36 +03:30
vertical: "top",
horizontal: "right",
}}
open={Boolean(anchorElUser)}
onClose={handleCloseUserMenu}
>
{settings.map((setting) => (
2024-06-06 22:04:30 +03:30
<MenuItem
id="menu-item"
key={setting}
2024-06-24 11:21:30 -07:00
onClick={() => handleCloseUserMenu(setting)}
2024-06-06 22:04:30 +03:30
>
<Typography
fontSize="var(--env-var-font-size-medium)"
textAlign="center"
>
{setting}
</Typography>
</MenuItem>
))}
</Menu>
</Box>
</Toolbar>
</Container>
</AppBar>
);
}
2024-05-06 12:29:36 -04:00
export default NavBar;