MainAppBar.js 4.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import AppBar from '@mui/material/AppBar';
  2. import Box from '@mui/material/Box';
  3. import Toolbar from '@mui/material/Toolbar';
  4. import Typography from '@mui/material/Typography';
  5. import Button from '@mui/material/Button';
  6. import IconButton from '@mui/material/IconButton';
  7. import MenuIcon from '@mui/icons-material/Menu';
  8. import { MyLink } from './MyLink';
  9. import { connect, useSelector } from 'react-redux';
  10. import { useTheme } from '@emotion/react';
  11. import { actionSetSidebar, getCartItemsCount, getIsSideBarOpen } from '../reducers';
  12. import { UserEntity } from '../Entities';
  13. import ShoppingCartIcon from '@mui/icons-material/ShoppingCart';
  14. import { AccountCircle } from '@mui/icons-material';
  15. import LogoutIcon from '@mui/icons-material/Logout';
  16. import LoginIcon from '@mui/icons-material/Login';
  17. import CategoryIcon from '@mui/icons-material/Category';
  18. import SupervisedUserCircleIcon from '@mui/icons-material/SupervisedUserCircle';
  19. import WorkHistoryIcon from '@mui/icons-material/WorkHistory';
  20. import { Badge, Tooltip } from '@mui/material';
  21. const MainAppBar = ({ token, openSidebar }) => {
  22. const theme = useTheme();
  23. const cartItemsCount = useSelector(state => getCartItemsCount(state) ?? 0);
  24. let currentUser = useSelector(state => new UserEntity(state.auth?.currentUser ?? { _id: null }));
  25. let isAdmin = currentUser?.isAdminRole === true;
  26. let isLoggedIn = token && true;
  27. return (
  28. <Box sx={{ flexGrow: 1 }}>
  29. <AppBar position="static">
  30. <Toolbar>
  31. <IconButton
  32. size="large"
  33. edge="start"
  34. color="inherit"
  35. aria-label="menu"
  36. onClick={() => openSidebar(true)}
  37. sx={{ mr: 2 }}
  38. >
  39. <MenuIcon />
  40. </IconButton>
  41. <Typography variant="h6" component="div" sx={{ flexGrow: 1 }}>
  42. </Typography>
  43. {
  44. !isLoggedIn &&
  45. <>
  46. <MyLink to="/login"><Button sx={{ color: "white" }}><Tooltip title="Login"><LoginIcon /></Tooltip></Button></MyLink>
  47. <MyLink to="/register"><Button sx={{ color: "white" }}>Register</Button></MyLink>
  48. </>
  49. }
  50. {
  51. isLoggedIn &&
  52. <>
  53. {isAdmin && (
  54. <>
  55. <MyLink to="/catree"><Button sx={{ color: "white" }}><Tooltip title="Categories"><CategoryIcon /></Tooltip></Button></MyLink>
  56. <MyLink to="/users"><Button sx={{ color: "white" }}><Tooltip title="Users"><SupervisedUserCircleIcon /></Tooltip></Button></MyLink>
  57. </>
  58. )}
  59. <MyLink to="/orders"><Button sx={{ color: "white" }}><Tooltip title="Orders"><WorkHistoryIcon /></Tooltip></Button></MyLink>
  60. <MyLink to="/user"><Button sx={{ color: "white" }}><Tooltip title="About Me"><AccountCircle /></Tooltip></Button></MyLink>
  61. </>
  62. }
  63. <Badge badgeContent={cartItemsCount} color="secondary">
  64. <MyLink to="/cart"><Button sx={{ color: "white" }}><Tooltip title="Cart"><ShoppingCartIcon /></Tooltip></Button></MyLink>
  65. </Badge>
  66. {
  67. isLoggedIn &&
  68. <>
  69. <MyLink to="/logout"><Button sx={{ color: "white" }}><Tooltip title="Logout"><LogoutIcon /></Tooltip></Button></MyLink>
  70. </>
  71. }
  72. </Toolbar>
  73. </AppBar>
  74. </Box>
  75. );
  76. }
  77. export const CMainAppBar = connect(state => ({ token: state.auth?.token, sidebarOpened: getIsSideBarOpen(state) }), { openSidebar: actionSetSidebar })(MainAppBar);