Reac front end for psicometric app

AppBar.js 7.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. import React, { useEffect, useState, useRef } from 'react';
  2. import { styled, createTheme, ThemeProvider } from '@mui/material/styles';
  3. import useAuth from '../Auth/useAuth';
  4. import { Outlet, useNavigate} from "react-router-dom";
  5. import Typography from '@mui/material/Typography';
  6. import IconButton from '@mui/material/IconButton';
  7. import MenuIcon from '@mui/icons-material/Menu';
  8. import Menu from '@mui/material/Menu';
  9. // import Container from '@mui/material/Container';
  10. import Badge from '@mui/material/Badge';
  11. import Avatar from '@mui/material/Avatar';
  12. import FullscreenIcon from '@mui/icons-material/Fullscreen';
  13. import MenuItem from '@mui/material/MenuItem';
  14. import MailIcon from '@mui/icons-material/Mail';
  15. import ProfilePicture from '../Images/man.png';
  16. import MuiAppBar from '@mui/material/AppBar';
  17. import NotificationsIcon from '@mui/icons-material/Notifications';
  18. import Toolbar from '@mui/material/Toolbar';
  19. import Box from '@mui/material/Box';
  20. const drawerWidth = 240;
  21. const useCheckMobileScreen = () => {
  22. const [width, setWidth] = useState(window.innerWidth);
  23. const handleWindowSizeChange = () => {
  24. let size = window.innerWidth;
  25. setWidth(size);
  26. }
  27. useEffect(() => {
  28. window.addEventListener('resize', handleWindowSizeChange);
  29. return () => {
  30. window.removeEventListener('resize', handleWindowSizeChange);
  31. }
  32. }, []);
  33. let isMobile = width <= 1000
  34. return (isMobile);
  35. }
  36. const AppBar = styled(MuiAppBar, {
  37. shouldForwardProp: (prop) => prop !== 'open',
  38. })(({ theme, open }) => ({
  39. transition: theme.transitions.create(['margin', 'width'], {
  40. easing: theme.transitions.easing.sharp,
  41. duration: theme.transitions.duration.leavingScreen,
  42. }),
  43. ...(open && {
  44. width: `calc(100% - ${drawerWidth}px)`,
  45. marginLeft: `${drawerWidth}px`,
  46. transition: theme.transitions.create(['margin', 'width'], {
  47. easing: theme.transitions.easing.easeOut,
  48. duration: theme.transitions.duration.enteringScreen,
  49. }),
  50. }),
  51. }));
  52. export default function AppBarComponent (){
  53. const [open, setOpen] = React.useState(true);
  54. const elRef = useRef();
  55. const auth = useAuth();
  56. const navigate = useNavigate()
  57. const [anchorEl, setAnchorEl] = React.useState(null);
  58. const [anchorElMovil, setAnchorElMov] = React.useState(null);
  59. const toggleDrawer = () => setOpen(!open);
  60. const open_profile = Boolean(anchorEl);
  61. const handleClick = (event) => setAnchorEl(event.currentTarget);
  62. const handleClose = () => setAnchorEl(null)
  63. const openMov = Boolean(anchorElMovil);
  64. const handleCloseMov = () => {
  65. setAnchorElMov(null);
  66. };
  67. const MenuResponsive = () => {
  68. setAnchorElMov(elRef.current);
  69. }
  70. const CerrarSession = () => {
  71. console.log('cerrando session')
  72. // auth.logout();
  73. // navigate('/')
  74. }
  75. return(
  76. <AppBar
  77. style={{ backgroundColor : '#fff', boxShadow : 'None' }}
  78. position="fixed"
  79. open={useCheckMobileScreen() ? false : open} >
  80. <Toolbar sx={{ borderBottom : "1px solid #ec5e69"}} >
  81. <div ref={elRef}>
  82. <IconButton
  83. edge="start"
  84. color="inherit"
  85. aria-label="open drawer"
  86. onClick={ useCheckMobileScreen() ? MenuResponsive : toggleDrawer }
  87. sx={{ marginRight: '36px', ...( !useCheckMobileScreen() && open && { display: 'none' }), }} >
  88. <MenuIcon style={{
  89. background: '#ec5e69',
  90. fontSize: "40",
  91. color: "#fff"
  92. }}/>
  93. </IconButton>
  94. <Menu
  95. id="basic-menu"
  96. anchorEl={anchorElMovil}
  97. open={openMov}
  98. onClose={handleCloseMov}
  99. MenuListProps={{
  100. 'aria-labelledby': 'basic-button',
  101. }}>
  102. <MenuItem onClick={ () => navigate('/perfil') }>Perfil</MenuItem>
  103. <MenuItem onClick={handleCloseMov}>My account</MenuItem>
  104. <MenuItem onClick={handleCloseMov}>Logout</MenuItem>
  105. </Menu>
  106. </div>
  107. <Typography component="h1" variant="h6" color="inherit" noWrap sx={{ flexGrow: 1 }} >
  108. {
  109. !useCheckMobileScreen() && open ? (
  110. <React.Fragment>
  111. <IconButton onClick={toggleDrawer}>
  112. <MenuIcon />
  113. </IconButton>
  114. <IconButton onClick={ (event) => event.target.requestFullscreen() }>
  115. <FullscreenIcon style={{ paddinLeft : 15 }}/>
  116. </IconButton>
  117. </React.Fragment>
  118. ) : undefined
  119. }
  120. </Typography>
  121. <Box sx={{ display: { xs: 'none', md: 'flex' } }}>
  122. <IconButton size="large" aria-label="show 4 new mails" color="inherit">
  123. <Badge badgeContent={4} color="error">
  124. <MailIcon style={{ color : '#212529' }} />
  125. </Badge>
  126. </IconButton>
  127. <IconButton
  128. size="large"
  129. aria-label="show 17 new notifications"
  130. color="inherit">
  131. <Badge badgeContent={17} color="error">
  132. <NotificationsIcon style={{ color : '#212529' }}/>
  133. </Badge>
  134. </IconButton>
  135. <IconButton
  136. size="small"
  137. edge="end"
  138. aria-label="account of current user"
  139. aria-haspopup="true"
  140. aria-expanded={open_profile ? 'true' : undefined}
  141. onClick={handleClick}
  142. color="inherit"
  143. >
  144. <Avatar alt="Cindy Baker" src={ProfilePicture} />
  145. </IconButton>
  146. <Menu
  147. id="basic-menu"
  148. anchorEl={anchorEl}
  149. open={open_profile}
  150. onClose={handleClose}
  151. MenuListProps={{ 'aria-labelledby': 'basic-button', }}>
  152. <MenuItem onClick={() => navigate('perfil') }>Profile</MenuItem>
  153. <MenuItem onClick={() => console.log('opcion 2')}>My account</MenuItem>
  154. <MenuItem onClick={CerrarSession}>Logout</MenuItem>
  155. </Menu>
  156. </Box>
  157. </Toolbar>
  158. </AppBar>
  159. )
  160. }