diff --git a/src/Components/Comment.js b/src/Components/Comment.js index ad12516196b48b8e51503738229b1feeddb41b86..e7134dc7d6736abd081fc800ec81db845e413e2c 100644 --- a/src/Components/Comment.js +++ b/src/Components/Comment.js @@ -32,11 +32,14 @@ import axios from 'axios' import {apiUrl} from '../env'; import Menu from '@material-ui/core/Menu'; import MenuItem from '@material-ui/core/MenuItem'; +import ModalExcluir from './ModalExcluirComentario.js' export default function Comment (props) { /* Required props: + rerenderCallback = callback function to trigger re-render on parent component + reviewRatings = required to update comment even though the user cannot update their rating score... objectID = collection/learning object id reviewID = self-explanatory I hope authorID = author id; links to public user page @@ -48,18 +51,11 @@ export default function Comment (props) { createdAt recurso : boolean; determines whether to display orange or purple font */ - - const [editando, setEditando] = useState(false) - const {state} = useContext(Store) - var moment = require('moment') - const [comment, setComment] = useState(props.description) - const updateComment = () => { - {/*axios.put( (`${apiUrl}/learning_objects/` + props.objectID + '/reviews/' + props.reviewID))*/} - setEditando(false) - } - + const {state} = useContext(Store) + const [displayedComment, setDisplayedComment] = useState(props.description) + const [editando, setEditando] = useState(false) const [anchorEl, setAnchorEl] = React.useState(null); const handleClick = (event) => { setAnchorEl(event.currentTarget); @@ -67,9 +63,71 @@ export default function Comment (props) { const handleClose = () => { setAnchorEl(null); }; + const [modalOpen, toggleModal] = useState(false) + + const [comment, setComment] = useState({ + error : false, + value : props.description + }) + const handleChange = (e) => { + const userInput = e.target.value + const flag = (userInput.length === 0 ? true : false); + setComment({...comment, error : flag, value : userInput}) + } + + const updateComment = () => { + const finalComment = comment + if (!finalComment.error) { + let config = { + headers : { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + 'Access-Token': sessionStorage.getItem('@portalmec/accessToken'), + 'Client': sessionStorage.getItem('@portalmec/clientToken'), + 'Uid': sessionStorage.getItem('@portalmec/uid'), + } + } + let payload = { + "review" : { + "name":null, + "description":finalComment.value, + "pros":null, + "cons":null, + "review_ratings_attributes" : props.reviewRatings + } + } + + axios.put( (`${apiUrl}/learning_objects/` + props.objectID + '/reviews/' + props.reviewID),payload, config + ).then((response) => {console.log(response)}, (error) => {console.log(error)}) + setDisplayedComment(finalComment.value) + setEditando(false) + } + } + + const deleteComment = () => { + let config = { + headers : { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + 'Access-Token': sessionStorage.getItem('@portalmec/accessToken'), + 'Client': sessionStorage.getItem('@portalmec/clientToken'), + 'Uid': sessionStorage.getItem('@portalmec/uid'), + } + } + axios.delete( (`${apiUrl}/learning_objects/` + props.objectID + '/reviews/' + props.reviewID), config).then((response) => {props.rerenderCallback()}, (error) => {console.log(error)}) + + toggleModal(false) + + } return ( + <React.Fragment> + <ModalExcluir + open={modalOpen} handleClose={() => {toggleModal(false)}} + handleConfirm={deleteComment} + /> <Grid container style={{paddingLeft : "20px"}}> + <Grid item xs={1}> { props.authorID && @@ -111,10 +169,10 @@ export default function Comment (props) { id = "input-comentario" label = {"Editar Comentário"} margin = "normal" - value = {comment} + value = {comment.value} multiline={true} rows="5" - onChange = {(e) => {setComment(e.target.value)}} + onChange = {(e) => {handleChange(e)}} style={{width:"100%"}} /> </div> @@ -150,10 +208,10 @@ export default function Comment (props) { {props.authorName} </Link> } - : {props.description} + : {displayedComment} </p> { - props.authorID !== state.currentUser.userId && + props.authorID !== state.currentUser.id && <span className="date"> {moment(props.createdAt).format("DD/MM/YYYY")} </span> @@ -166,22 +224,26 @@ export default function Comment (props) { </Comentario> </Grid> - <Grid item xs={1}> - <StyledDiv> - <Button onClick={handleClick}><EditIcon/></Button> - <Menu - id="simple-menu" - anchorEl={anchorEl} - keepMounted - open={Boolean(anchorEl)} - onClose={handleClose} - > - <MenuItem onClick={() => {setEditando(true); handleClose()}}>Editar</MenuItem> - <MenuItem onClick={handleClose}>Excluir</MenuItem> - </Menu> - </StyledDiv> - </Grid> + { + props.authorID === state.currentUser.id && + <Grid item xs={1}> + <StyledDiv> + <Button onClick={handleClick}><EditIcon/></Button> + <Menu + id="simple-menu" + anchorEl={anchorEl} + keepMounted + open={Boolean(anchorEl)} + onClose={handleClose} + > + <MenuItem onClick={() => {setEditando(true); handleClose()}}>Editar</MenuItem> + <MenuItem onClick={() => {toggleModal(true);handleClose()}}>Excluir</MenuItem> + </Menu> + </StyledDiv> + </Grid> + } </Grid> + </React.Fragment> ) }