From e0d92fc8ee5e26b315cde670bb939c617ffe325c Mon Sep 17 00:00:00 2001 From: Lucas Schoenfelder <les17@inf.ufpr.br> Date: Thu, 19 Nov 2020 11:44:43 -0300 Subject: [PATCH] done --- src/Components/MobileDrawerMenu.js | 165 ++++++++++++++++++++++++++--- 1 file changed, 149 insertions(+), 16 deletions(-) diff --git a/src/Components/MobileDrawerMenu.js b/src/Components/MobileDrawerMenu.js index 117e5e08..82d708bd 100644 --- a/src/Components/MobileDrawerMenu.js +++ b/src/Components/MobileDrawerMenu.js @@ -1,3 +1,21 @@ +/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre +Departamento de Informatica - Universidade Federal do Parana + +This file is part of Plataforma Integrada MEC. + +Plataforma Integrada MEC is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Plataforma Integrada MEC is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with Plataforma Integrada MEC. If not, see <http://www.gnu.org/licenses/>.*/ + import React, {useContext, useState} from 'react' import { Store } from '../Store'; import Drawer from '@material-ui/core/Drawer'; @@ -12,9 +30,17 @@ import {ButtonStyled} from './MenuBar' import ExitToAppIcon from '@material-ui/icons/ExitToApp' import { Button } from '@material-ui/core'; import MenuItem from '@material-ui/core/MenuItem'; +import DefaultAvatar from '../img/default_profile0.png' +import {apiDomain} from '../env.js' +import CloudUploadIcon from '@material-ui/icons/CloudUpload'; +import CloudDoneIcon from '@material-ui/icons/CloudDone'; +import HistoryIcon from '@material-ui/icons/History'; +import FavoriteBorderIcon from '@material-ui/icons/FavoriteBorder'; +import FolderOpenIcon from '@material-ui/icons/FolderOpen'; +import SettingsIcon from '@material-ui/icons/Settings'; export default function MobileDrawerMenu (props) { - const {state} = useContext(Store) + const {state, dispatch} = useContext(Store) const menuSobre = [ { name : "Página Inicial", href : "/", icon : <HomeIcon/>}, @@ -23,14 +49,53 @@ export default function MobileDrawerMenu (props) { { name : "Central de Ajuda", href : "ajuda", icon : <HelpOutlineIcon/>}, { name : "Termos de Uso", href : "termos", icon : <AssignmentIcon/>}, ] - const [selectedIndex, setSelectedIndex] = React.useState(1); + + {/*used in dynamic css selection*/} + const [selectedIndex, setSelectedIndex] = React.useState(-1); const handleMenuItemClick = (event, index) => { setSelectedIndex(index); }; + const getUserAvatar = () => { + if (state.currentUser.userAvatar == '' || state.currentUser.userAvatar == null) { + return DefaultAvatar + } + else { + return apiDomain + state.currentUser.userAvatar + } + } + + {/*main user actions array */} + const minhaArea = [ + { name: "Publicar Recurso", href: "/termos-publicar-recurso", icon : <CloudUploadIcon/>}, + { name: "Recursos Publicados", href: "/perfil", icon : <CloudDoneIcon/>, value : '2'}, + { name: "Perfil e Atividades", href: "/perfil", icon : <HistoryIcon/>, value : '0'}, + { name: "Favoritos", href: "/perfil", icon : <FavoriteBorderIcon/>, value : '3'}, + { name: "Coleções", href: "/perfil", icon : <FolderOpenIcon/>, value : '4'}, + ] + + {/*dispatches log out actions to Store.js*/} + const handleLogout = () => { + sessionStorage.removeItem('@portalmec/username'); + sessionStorage.removeItem('@portalmec/uid'); + sessionStorage.removeItem('@portalmec/senha'); + dispatch( { + type: 'USER_LOGGED_OUT', + userLoggedOut: !state.userIsLoggedIn, + login: { + username : '', + email : '', + accessToken : '', + client : '' + } + } + ) + } + return ( <StyledDrawer anchor={props.anchor} open={props.open} onClose={props.onClose}> <MenuBody> + {/*Renders menuSobre array options*/} { menuSobre.map( (item, index) => <Link to={item.href} className={`menu-buttons ${selectedIndex === index ? 'selected' : ''}`} onClick={(event) => handleMenuItemClick(event, index)}> @@ -40,19 +105,45 @@ export default function MobileDrawerMenu (props) { ) } </MenuBody> + + + <div style={{borderTop : "1px solid #e5e5e5", borderBottom : "1px solid #e5e5e5", marginTop : "10px", paddingTop : "10px", marginBottom : "10px"}}> { + /*If user is logged in, render user actions menu; else render log in/sign in buttons*/ state.userIsLoggedIn ? ( - <React.Fragment> - <span>sim</span> - </React.Fragment> + <div style={{display : "flex", flexDirection : "column", color : "#666", paddingBottom : "10px"}}> + <MyArea> + <div className="user-avatar"> + <img alt="user-avatar" + src={getUserAvatar()} + /> + </div> + <span className="text">Minha área</span> + </MyArea> + + { + minhaArea.map( (item, index) => + <Link to={{ + pathname : item.href, + state: item.value + }} + className={`menu-buttons ${selectedIndex === (index + menuSobre.length) ? 'selected' : ''}`} + onClick={(event) => handleMenuItemClick(event, index + menuSobre.length)} + > + {item.icon} + {item.name} + </Link> + ) + } + + </div> ) : ( - <div style={{borderTop : "1px solid #e5e5e5", borderBottom : "1px solid #e5e5e5", marginTop : "10px"}}> - + <React.Fragment> <div style={{display : "flex", justifyContent : "center", marginTop : "10px"}}> - <ButtonPublicarRecurso onClick={() => {console.log('props.openLogin')}}> + <ButtonPublicarRecurso onClick={props.openLogin}> PUBLICAR RECURSO? </ButtonPublicarRecurso> </div> @@ -70,13 +161,55 @@ export default function MobileDrawerMenu (props) { </ButtonStyled> </div> </div> - </div> + </React.Fragment> ) } + </div> + { + /*Renders settings and log off buttons */ + state.userIsLoggedIn && + <React.Fragment> + <Link to={"/editarperfil"} className={`menu-buttons`}> + <SettingsIcon/> Configurações + </Link> + + <Link to={"/"} className={`menu-buttons`} onClick={handleLogout}> + <ExitToAppIcon/> Sair + </Link> + </React.Fragment> + } </StyledDrawer> ) } +const MyArea = styled.div` + margin : 0 16px; + display : flex; + flex-direction : row; + + .text { + font-size : 16px; + color : #666; + align-self : center; + } + + .user-avatar { + margin-right : 10px; + align-self : center; + border-radius : 50%; + border : 1px solid #fff; + max-width : 50px; + max-height : 50px; + overflow : hidden; + + img { + width : 100%; + height : 100%; + vertical-align : middle; + } + } +` + const ButtonPublicarRecurso = styled(Button)` font-weight : 500 !important; border : 1.5px #666 solid !important; @@ -91,13 +224,6 @@ const StyledDrawer = styled(Drawer)` .MuiPaper-root { width : 65% !important; } -` - -const MenuBody = styled.div` - margin-top : 20px; - display : flex; - flex-direction : column; - color : #666; .menu-buttons { padding : 10px 16px; @@ -135,3 +261,10 @@ const MenuBody = styled.div` } } ` + +const MenuBody = styled.div` + margin-top : 20px; + display : flex; + flex-direction : column; + color : #666; +` -- GitLab