/*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 styled from 'styled-components' import Button from '@material-ui/core/Button'; import Menu from '@material-ui/core/Menu'; import ListItemIcon from '@material-ui/core/ListItemIcon'; import MenuItem from '@material-ui/core/MenuItem'; import MoreVertIcon from '@material-ui/icons/MoreVert'; import OpenIcon from '@material-ui/icons/OpenInNew'; import ReportIcon from '@material-ui/icons/Error'; import PersonAddIcon from '@material-ui/icons/PersonAdd'; import { putRequest } from './HelperFunctions/getAxiosConfig' import ReportModal from './ReportModal.js' import {Link} from 'react-router-dom' import LoginModal from './LoginModal.js' import Snackbar from '@material-ui/core/Snackbar'; import SignUpModal from './SignUpModal' import MuiAlert from '@material-ui/lab/Alert'; function Alert(props) { return <MuiAlert elevation={6} variant="filled" {...props} />; } export default function SimpleMenu(props) { const {state} = useContext(Store) const [anchorEl, setAnchorEl] = React.useState(null); const [loginOpen, setLogin] = useState(false) const [successfulLoginOpen, handleSuccessfulLogin] = useState(false) const [signUpOpen, setSignUp] = useState(false) const handleSignUp = () => { setSignUp(!signUpOpen) } const handleLogin = () => { setLogin(!loginOpen) } const toggleSnackbar = (event, reason) => { if (reason === 'clickaway') { return; } handleSuccessfulLogin(false); } function handleClick(event) { setAnchorEl(event.currentTarget); } function handleClose() { setAnchorEl(null); } const handleFollow = (followerID) => { putRequest(`/users/${followerID}/follow`, {}, (data) => { console.log(data); props.toggleFollowed() }, (error) => { console.log(error) }) handleClose(); } const [reportModal, toggleReportModal] = useState(false) const handleModal = (value) => { toggleReportModal(value) } return ( <React.Fragment> <Snackbar open={successfulLoginOpen} autoHideDuration={1000} onClose={toggleSnackbar} anchorOrigin={{ vertical: 'top', horizontal: 'center' }} > <Alert severity="success" style={{ backgroundColor: "#00acc1" }}>Você está conectado(a)!</Alert> </Snackbar> {/*-------------------------------MODALS---------------------------------------*/} <LoginModal contrast={props.contrast} open={loginOpen} handleClose={() => setLogin(false)} openSignUp={handleSignUp} openSnackbar={() => { handleSuccessfulLogin(true) }} /> <SignUpModal contrast={props.contrast} open={signUpOpen} handleClose={handleSignUp} openLogin={handleLogin} /> {/*----------------------------------------------------------------------------*/} <> { reportModal && <ReportModal contrast={props.contrast} open={reportModal} handleClose={() => handleModal(false)} form="user" complainableId={props.followableID} complainableType={"User"} {...props}/> } <div style={{fontSize: "12px", display : "flex", flexDirection : "column", justifyContent : "center"}}> <ButtonNoWidth aria-controls="simple-menu" aria-haspopup="true" onClick={handleClick}> <MoreVertIcon className={`${props.contrast}LinkColor ${props.contrast}Text`} /> </ButtonNoWidth> <Menu id="simple-menu" anchorEl={anchorEl} keepMounted open={Boolean(anchorEl)} onClose={handleClose} > <StyledMenuItem className={`${props.contrast}LinkColor ${props.contrast}Text`} contrast={props.contrast} onClick={handleClose}> <Link to={"/usuario-publico/" + props.followableID}> <ListItemIcon className={`${props.contrast}IconColor`}><OpenIcon /></ListItemIcon>Abrir </Link> </StyledMenuItem> { props.followed ? ( <StyledMenuItem className={`${props.contrast}LinkColor ${props.contrast}Text`} contrast={props.contrast} onClick={() => {handleFollow(props.followableID)}}> <ListItemIcon className={`${props.contrast}IconColor`}><ReportIcon /></ListItemIcon>Deixar de Seguir </StyledMenuItem> ) : ( state.currentUser.id !== '' ? ( <StyledMenuItem className={`${props.contrast}LinkColor ${props.contrast}Text`} contrast={props.contrast} onClick={() => {handleFollow(props.followableID)}}> <ListItemIcon className={`${props.contrast}IconColor`}><PersonAddIcon /></ListItemIcon>Seguir </StyledMenuItem> ) : ( <StyledMenuItem className={`${props.contrast}LinkColor ${props.contrast}Text`} contrast={props.contrast} onClick={() => {handleLogin(props.followableID)}}> <ListItemIcon className={`${props.contrast}IconColor`}><PersonAddIcon /></ListItemIcon>Seguir </StyledMenuItem> ) ) } { state.currentUser.id !== '' ? ( <StyledMenuItem className={`${props.contrast}LinkColor ${props.contrast}Text`} contrast={props.contrast} onClick={() => {handleModal(true); handleClose()}}> <ListItemIcon className={`${props.contrast}IconColor`}><ReportIcon /></ListItemIcon>Reportar </StyledMenuItem> ) : ( <StyledMenuItem className={`${props.contrast}LinkColor ${props.contrast}Text`} contrast={props.contrast} onClick={() => {handleLogin(true)}}> <ListItemIcon className={`${props.contrast}IconColor`}><ReportIcon /></ListItemIcon>Reportar </StyledMenuItem> ) } </Menu> </div> </> </React.Fragment> ); } const ButtonNoWidth = styled(Button)` width : 24px !important; min-width : 24px !important; max-height : 24px !important; padding : 0 !important; border : 0 !important; .MuiButton-root { width : 24px !important; min-width : 12px !important; } .MuiSvgIcon-root { padding-right : 0 !important; vertical-align : middle; } .MuiButton-label { padding-left : 4px !important; } ` const StyledMenuItem = styled(MenuItem)` background-color: ${props => props.contrast === "" ? "white" : "black"} !important; .MuiSvgIcon-root { vertical-align : middle !important; } a { color : inherit !important; } `