Skip to content
Snippets Groups Projects
CollectionReview.js 4.92 KiB
Newer Older
Raul Almeida's avatar
Raul Almeida committed
/*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/>.*/

Raul Almeida's avatar
Raul Almeida committed
import React, { useContext, useState, useEffect } from 'react';
Raul Almeida's avatar
Raul Almeida committed
import { Grid } from '@material-ui/core';
import Rating from '@material-ui/lab/Rating';
import IconButton from '@material-ui/core/IconButton';
import StarBorderIcon from '@material-ui/icons/StarBorder';
import FavoriteIcon from '@material-ui/icons/Favorite';
import InfoIcon from '@material-ui/icons/Info';
Raul Almeida's avatar
Raul Almeida committed
import { Store } from '../Store.js'
Raul Almeida's avatar
Raul Almeida committed
import ReportModal from './ReportModal.js';
Raul Almeida's avatar
Raul Almeida committed
import SignUpModal from './SignUpModal.js';
import LoginModal from './LoginModal.js';
lfr20's avatar
lfr20 committed
import { putRequest } from './HelperFunctions/getAxiosConfig.js'
import SnackBarComponent from './SnackbarComponent';
Raul Almeida's avatar
Raul Almeida committed

Raul Almeida's avatar
Raul Almeida committed
export default function CollectionReview(props) {
lfr20's avatar
lfr20 committed
	const { state } = useContext(Store);

	const [likes, setLikes] = useState();
	const [liked, setLiked] = useState();
	const [stars, setStars] = useState();
Raul Almeida's avatar
Raul Almeida committed
	const [reportOpen, setReportOpen] = useState(false);
Raul Almeida's avatar
Raul Almeida committed
	const [sign_up_open, setSignUpOpen] = useState(false);
	const [log_in_open, setLoginOpen] = useState(false);
lfr20's avatar
lfr20 committed
	const [snackInfo, setSnackInfo] = useState({
		open: false,
		text: '',
		severity: '',
		color: ''
	});
Raul Almeida's avatar
Raul Almeida committed

	const handleClickReport = () => {
lfr20's avatar
lfr20 committed
		if (state.currentUser.id)
			setReportOpen(true);
		else
			setSignUpOpen(true)
Raul Almeida's avatar
Raul Almeida committed
	}
	function handleSuccess(data) {
		setLiked(!liked)
		setLikes(data.count)
	}
Raul Almeida's avatar
Raul Almeida committed
	const handleLikeClick = () => {
Raul Almeida's avatar
Raul Almeida committed
		if (state.currentUser.id) {
			const url = `/collections/${props.id}/like`
			putRequest(url, {}, handleSuccess, (error) => { console.log(error) })
Raul Almeida's avatar
Raul Almeida committed
		} else
			setSignUpOpen(true);
Raul Almeida's avatar
Raul Almeida committed
	}

	const handleCloseModal = () => {
		setReportOpen(false);
	}
Raul Almeida's avatar
Raul Almeida committed

lfr20's avatar
lfr20 committed
	function handleOpenSnackSignIn() {
		const info = {
			open: true,
			text: 'Você foi logado com sucesso!',
			severity: 'success',
			color: '',
		}

		handleSnackInfo(info)
	}

	function handleSnackInfo(info) {
		setSnackInfo({
			...info
		})
	}

	function handleCloseSnack() {
		setSnackInfo({
			open: false,
			text: '',
			severity: '',
			color: '',
		})
	}

	function handleOpenSignUp() {
		setSignUpOpen(true)
	}

	useEffect(() => {
		setLiked(props.liked)
		setLikes(props.likes)
		setStars(props.stars)
	}, [props])

Raul Almeida's avatar
Raul Almeida committed
	return (
		<Grid container direction="column" style={props.contrast === "" ? {color: "#666"} : {color: "white"}}>
lfr20's avatar
lfr20 committed
			<SnackBarComponent
				snackbarOpen={snackInfo.open}
				handleClose={handleCloseSnack}
				severity={snackInfo.severity}
				text={snackInfo.text}
				color={snackInfo.color}
			/>
			<Grid sm={12} container direction="row" alignItems="center"
                style={{justifyContent: "center"}}
            >
                        style={props.contrast === "" ? {} : {color: "white"}}
						name="customized-empty"
lfr20's avatar
lfr20 committed
						value={Number(stars)}
						readOnly
						onClick={props.scrollToComment}
vgm18's avatar
vgm18 committed
						emptyIcon={<StarBorderIcon className={`${props.contrast}Text`} fontSize="inherit" />}
					/>
				</Grid>
				<Grid item justify="center" alignItems="center">
					<IconButton style={{color: "inherit"}} aria-label="like" onClick={handleLikeClick}>
						{likes}<FavoriteIcon style={props.contrast === "" ? {fill: liked ? "red" : null} : {fill: "yellow"}} />
Raul Almeida's avatar
Raul Almeida committed
			</Grid>
			<Grid item sm={12}>
				<IconButton
					aria-label="report"
					style={{ fontSize: 'medium' }}
Raul Almeida's avatar
Raul Almeida committed
					onClick={handleClickReport}>
					<InfoIcon style={props.contrast === "" ? {color: "#666"} : {color: "white"}}/><span style={props.contrast === "" ? {color: "#666"} : {color: "yellow", textDecoration: "underline"}}>Reportar erro ou abuso</span>
Raul Almeida's avatar
Raul Almeida committed
				</IconButton>
Raul Almeida's avatar
Raul Almeida committed
				<ReportModal
vgm18's avatar
vgm18 committed
                    contrast={props.contrast}
Raul Almeida's avatar
Raul Almeida committed
					open={reportOpen}
					handleClose={handleCloseModal}
					form="colecao"
					complainableId={props.id}
					complainableType="Collection"
				/>
Raul Almeida's avatar
Raul Almeida committed
			</Grid>
Raul Almeida's avatar
Raul Almeida committed
			<SignUpModal
vgm18's avatar
vgm18 committed
                contrast={props.contrast}
Raul Almeida's avatar
Raul Almeida committed
				open={sign_up_open}
				handleClose={() => setSignUpOpen(false)}
				openLogin={() => setLoginOpen(true)}
			/>
			<LoginModal
vgm18's avatar
vgm18 committed
                contrast={props.contrast}
lfr20's avatar
lfr20 committed
				openSnackbar={handleOpenSnackSignIn}
Raul Almeida's avatar
Raul Almeida committed
				open={log_in_open}
				handleClose={() => setLoginOpen(false)}
lfr20's avatar
lfr20 committed
				openSignUp={handleOpenSignUp}
Raul Almeida's avatar
Raul Almeida committed
			/>
Raul Almeida's avatar
Raul Almeida committed
		</Grid>
	);
}