// src/components/Navbar.jsx
import {
AccountCircle,
Notifications,
Search
} from "@mui/icons-material";
import {
AppBar,
Avatar,
Badge,
Button,
IconButton,
InputBase,
Menu,
MenuItem,
Toolbar,
Typography
} from "@mui/material";
import { alpha, styled } from "@mui/material/styles";
import React, { useEffect, useState } from "react";
import { Link, useNavigate } from "react-router-dom";
import NotificationIcon from "./Notifications";
const SearchBar = styled("div")(
({ theme }) => ({
position: "relative",
borderRadius: theme.shape.borderRadius,
backgroundColor:
alpha(theme.palette.common.white, 0.15),
"&:hover": {
backgroundColor:
alpha(theme.palette.common.white, 0.25),
},
marginRight: theme.spacing(2),
marginLeft: 0,
width: "100%",
[theme.breakpoints.up("sm")]: {
marginLeft: theme.spacing(3),
width: "auto",
},
}));
const SearchIconWrapper
= styled("div")(({ theme }) => ({
padding: theme.spacing(0, 2),
height: "100%",
position: "absolute",
pointerEvents: "none",
display: "flex",
alignItems: "center",
justifyContent: "center",
}));
const StyledInputBase = styled(InputBase)(
({ theme }) => ({
color: "inherit",
"& .MuiInputBase-input": {
padding: theme.spacing(1, 1, 1, 0),
// vertical padding + font size from searchIcon
paddingLeft: `calc(1em + ${theme.spacing(4)})`,
transition: theme.transitions.create("width"),
width: "100%",
[theme.breakpoints.up("md")]: {
width: "20ch",
},
},
}));
const Navbar = () => {
const [anchorEl, setAnchorEl] = useState(null);
const [user, setUser] = useState(null);
const navigate = useNavigate();
useEffect(() => {
const loggedUser = localStorage.getItem("user");
if (loggedUser) {
setUser(JSON.parse(loggedUser));
}
}, []);
const handleProfileMenuOpen = (event) => {
setAnchorEl(event.currentTarget);
};
const handleMenuClose = () => {
setAnchorEl(null);
};
const handleLogout = () => {
localStorage.removeItem("user"); // Remove user from localStorage
localStorage.removeItem("token"); // Remove token from localStorage
setUser(null); // Set user state to null
navigate("/login"); // Redirect to login page
};
const isMenuOpen = Boolean(anchorEl);
const menuId = "primary-search-account-menu";
return (
<AppBar position="static">
<Toolbar>
<Typography variant="h6" sx={{ flexGrow: 1 }}>
Social Media App
</Typography>
{/* Search Bar */}
<SearchBar>
<SearchIconWrapper>
<Search />
</SearchIconWrapper>
<StyledInputBase
placeholder="Search…"
inputProps={{ 'aria-label': 'search' }}
/>
</SearchBar>
{/* Navigation Links */}
<Button color="inherit" component={Link} to="/">Feed</Button>
<Button color="inherit" component={Link} to="/post">Create Post</Button>
<Button color="inherit" component={Link} to="/user-posts">My Posts</Button>
<Button color="inherit" component={Link} to="/saved-posts">Saved Posts</Button>
{/* Notifications */}
<IconButton color="inherit">
<Badge badgeContent={4} color="error">
<NotificationIcon />
</Badge>
</IconButton>
{user?.fullname ? (
<>
{/* User Profile Dropdown */}
<IconButton
edge="end"
aria-label="account of current user"
aria-controls={menuId}
aria-haspopup="true"
onClick={handleProfileMenuOpen}
color="inherit"
>
<AccountCircle />
</IconButton>
{/* Dropdown Menu */}
<Menu
anchorEl={anchorEl}
anchorOrigin={{ vertical: 'top', horizontal: 'right' }}
id={menuId}
keepMounted
transformOrigin={{ vertical: 'top', horizontal: 'right' }}
open={isMenuOpen}
onClose={handleMenuClose}
>
<MenuItem component={Link} to={`/user/${user._id}`}>Profile</MenuItem>
<MenuItem component={Link} to="/settings">Settings</MenuItem>
<MenuItem onClick={handleLogout}>Logout</MenuItem>
</Menu>
</>
) : (
<Button color="inherit" component={Link} to="/login">Login</Button>
)}
</Toolbar>
</AppBar>
);
};
export default Navbar;