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/>.*/
import Button from '@material-ui/core/Button';
import CheckIcon from '@material-ui/icons/Check';
import AddIcon from '@material-ui/icons/Add';
import styled from 'styled-components';
import SignUpModal from './SignUpModal.js';
import axios from 'axios';
import {apiUrl} from '../env';
export default function FollowCollectionButton(props) {
const [icon, setIcon] = useState(<AddIcon fontSize="large"/>);
const [button_text, setButtonText] = useState("Seguir Coleção");
const [variant, setVariant] = useState("outlined");
const [sign_up_open, setSignUpOpen] = useState(false);
const [following, setFollowing] = useState(false); //user following collection
useEffect(() => {
axios.get(apiUrl+'/users/'+props.user_id+'/following/Collection')
.then(res => {
for (const element in res.body)
if (element.id == props.collection_id)
setFollowing(true);
});
}, [])
//handleMouse{Enter, Leave} only do anything when user follows given collection:
const handleMouseEnter = () => {
if (following) {
setVariant("outlined");
setButtonText("Deixar de seguir");
setIcon(null);
}
}
const handleMouseLeave = () => {
if (following) {
setVariant("contained");
setButtonText("Seguindo");
setIcon(<CheckIcon fontSize="large" />);
}
}
const handleClick = () => {
if (!props.user_id)
setSignUpOpen(true);
else if (!following) {
setVariant("contained");
setButtonText("Seguindo");
setIcon(<CheckIcon fontSize="large"/>)
setFollowing(true);
axios.post(apiUrl+'/collections/'+props.collection_id+'/follow')
if (Number(res.status) != 201)
setFollowing(false);
setIcon(<AddIcon fontSize="large"/>);
setButtonText("Seguindo");
setVariant("contained");
});
} else {
setVariant("outlined");
setButtonText("Deixar de seguir");
setIcon(<AddIcon fontSize="large"/>);
setFollowing(false);
axios.delete(apiUrl+'/collections/'+props.collection_id+'/follow')
setFollowing(true);
setIcon(<CheckIcon fontSize="large"/>);
setButtonText("Deixar de seguir");
setVariant("outlined");
if (props.user_is_owner)
return (
<div>
<FollowButton
variant={variant}
color="primary"
startIcon={icon}
size="large"
onMouseEnter={handleMouseEnter}
onMouseLeave={handleMouseLeave}
onClick={handleClick}
>
<ButtonText>{button_text}</ButtonText>
</FollowButton>
<SignUpModal open={sign_up_open} handleClose={() => setSignUpOpen(false)} />
</div>
);
else return (<div></div>);
}
const Title=styled.h1`
font-size: 3em;
color: rgb(102, 102, 102);
float: left;
`
const ButtonText=styled.span`
font-weight: bolder;
font-size: 1.2em;
`
const FollowButton=styled(Button)`
padding-left: 10;
padding-right: 10;
width: 250px;