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 React, { useRef, useState, useEffect } from 'react';
import Card from '@material-ui/core/Card';
import Button from '@material-ui/core/Button';
import EditIcon from '@material-ui/icons/Edit';
import CommentForm from './ResourcePageComponents/CommentForm.js';
import Comment from './Comment.js';
import Snackbar from '@material-ui/core/Snackbar';
import MuiAlert from '@material-ui/lab/Alert';
import {axiosGetRequest} from '../Components/HelperFunctions/getAxiosConfig'
export default function CollectionCommentSection(props) {
const [post_snack_open, setPostSnackOpen] = useState(false);
const [delete_snack_open, setDeleteSnackOpen] = useState(false);
const [render_state, setRenderState] = useState(false);
const [reviews, setReviews] = useState([]);

Lucas Eduardo Schoenfelder
committed
const forceUpdate = () => { setRenderState(!render_state); }

Lucas Eduardo Schoenfelder
committed
const handlePostSnackbar = () => {
setPostSnackOpen(!post_snack_open);
}
const handleDeleteSnackbar = () => {
setDeleteSnackOpen(!delete_snack_open);
}
const handleScrollToCommentForm = () => {
window.scrollTo(0, comment_ref.current.offsetTop);
}
function Alert(props) {
return <MuiAlert elevation={6} variant="filled" {...props} />;
}
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
const NoCommentsMessage = () => {
const NoCommentsContainer=styled.div`
text-align: center;
margin-left: 9vw;
margin-right: 9vw;
`
const BlueTitle=styled.h2`
color: #673ab7;
`
const Secondary=styled.h3`
font-weight: 100;
`
const ButtonText=styled.span`
font-weight: 900;
`
const Image=styled.img`
`
return (
<NoCommentsContainer>
<Image src={Comentario} />
<BlueTitle>Compartilhe sua opinião com a rede!</BlueTitle>
<Secondary>Gostou desta coleção? Comente e compartilhe com a rede sua opinião. Interagindo com a rede, você contribui para que mais coleções como esta sejam criadas.</Secondary>
<Button
variant="contained"
color="primary"
startIcon={<EditIcon />}
onClick={handleScrollToCommentForm}
>
<ButtonText>Relatar experiência</ButtonText>
</Button>
</NoCommentsContainer>
);
}
const CollectionComments = () => {
return (
<div>
<Title>{reviews.length} {reviews.length === 1 ? "Relato" : "Relatos"} sobre a Coleção</Title>
{reviews.map(r => {
return (
<Comment
rerenderCallback={forceUpdate}
objectID={props.id}
reviewID={r.id}
reviewRatings={r.review_ratings}
authorID={r.user.id}
rating={r.rating_average}
authorName={r.user.name}
authorAvatar={r.user.avatar}
description={r.description}
createdAt={r.created_at}
handleSnackbar={handleDeleteSnackbar}
recurso={false}
/>
);})}
</div>
);
}
axiosGetRequest(`/collections/${props.id}/reviews`, (data) => {setReviews(data)}, (error) => {console.log(error)})
<CommentAreaContainer container xs={12} direction="row" justify="center" alignItems="center">
<CommentAreaCard>
<Title>Conte sua experiência com a coleção</Title>
<CommentForm colecao recursoId={props.id}
handleSnackbar={handlePostSnackbar}
rerenderCallback={forceUpdate}
/>
{reviews.length ? CollectionComments() : NoCommentsMessage()}
</CommentAreaCard>
</Grid>
<Snackbar
open={post_snack_open}
autoHideDuration={6000}
onClose={handlePostSnackbar}
anchorOrigin={{vertical: 'top', horizontal: 'right'}}
>
<Alert onClose={handlePostSnackbar} severity="info">
Seu comentário foi publicado com sucesso!
</Alert>
</Snackbar>
<Snackbar
open={delete_snack_open}
autoHideDuration={6000}
onClose={handleDeleteSnackbar}
anchorOrigin={{vertical: 'top', horizontal: 'right'}}
>
<Alert onClose={handleDeleteSnackbar} severity="info">
Comentário deletado com sucesso.
</Alert>
</Snackbar>
</CommentAreaContainer>