Skip to content
Snippets Groups Projects
ContactCardOptions.js 7.92 KiB
Newer Older
/*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/>.*/

lfr20's avatar
lfr20 committed
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'
lfr20's avatar
lfr20 committed
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) {
lfr20's avatar
lfr20 committed
    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;
        }
lfr20's avatar
lfr20 committed
  
          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) })
    }

    const [reportModal, toggleReportModal] = useState(false)
    const handleModal = (value) => {
        toggleReportModal(value)
    }
    <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---------------------------------------*/}
vgm18's avatar
vgm18 committed
        <LoginModal contrast={props.contrast} open={loginOpen} handleClose={() => setLogin(false)} openSignUp={handleSignUp}
            openSnackbar={() => { handleSuccessfulLogin(true) }}
        />
vgm18's avatar
vgm18 committed
        <SignUpModal contrast={props.contrast} open={signUpOpen} handleClose={handleSignUp} openLogin={handleLogin} />
        {/*----------------------------------------------------------------------------*/}  
        <>
        {
            reportModal &&
vgm18's avatar
vgm18 committed
            <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}
            >
vgm18's avatar
vgm18 committed
                <StyledMenuItem className={`${props.contrast}LinkColor ${props.contrast}Text`} contrast={props.contrast} onClick={handleClose}>
                    <Link to={"/usuario-publico/" + props.followableID}>
vgm18's avatar
vgm18 committed
                        <ListItemIcon className={`${props.contrast}IconColor`}><OpenIcon /></ListItemIcon>Abrir
vgm18's avatar
vgm18 committed
                        <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 !== '' ? (
vgm18's avatar
vgm18 committed
                            <StyledMenuItem className={`${props.contrast}LinkColor ${props.contrast}Text`} contrast={props.contrast} onClick={() => {handleFollow(props.followableID)}}>
                                <ListItemIcon className={`${props.contrast}IconColor`}><PersonAddIcon /></ListItemIcon>Seguir
vgm18's avatar
vgm18 committed
                            <StyledMenuItem className={`${props.contrast}LinkColor ${props.contrast}Text`} contrast={props.contrast} onClick={() => {handleLogin(props.followableID)}}>
                                <ListItemIcon className={`${props.contrast}IconColor`}><PersonAddIcon /></ListItemIcon>Seguir
vgm18's avatar
vgm18 committed
                        <StyledMenuItem className={`${props.contrast}LinkColor ${props.contrast}Text`} contrast={props.contrast} onClick={() => {handleModal(true); handleClose()}}>
                            <ListItemIcon className={`${props.contrast}IconColor`}><ReportIcon /></ListItemIcon>Reportar
vgm18's avatar
vgm18 committed
                        <StyledMenuItem className={`${props.contrast}LinkColor ${props.contrast}Text`} contrast={props.contrast} onClick={() => {handleLogin(true)}}>
                            <ListItemIcon className={`${props.contrast}IconColor`}><ReportIcon /></ListItemIcon>Reportar
lfr20's avatar
lfr20 committed
                    )
                }
            </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 {
lfr20's avatar
lfr20 committed
        color : inherit !important;
lfr20's avatar
lfr20 committed
`