Rev 3943 | Rev 3945 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
/* eslint-disable react/prop-types */
import axios from 'axios'
import React, { useState } from 'react'
import { useForm } from 'react-hook-form'
import { TbSend } from 'react-icons/tb'
import { connect } from 'react-redux'
import { addNotification } from '../../../../redux/notification/notification.actions'
import FormErrorFeedback from '../../../../shared/form-error-feedback/FormErrorFeedback'
import FeedCommentTemplate from './FeedCommentTemplate'
const FeedCommentSection = ({
image = '',
addUrl = '',
updateTotalComments = function () { },
comments = []
}) => {
const { register, handleSubmit, errors, reset } = useForm()
const [commentsState, setCommentsState] = useState(comments);
const submitCommentHandler = (data) => {
const currentFormData = new FormData(data);
Object.entries(data).forEach(([key, value])=> currentFormData.append(key, value))
axios.post(addUrl, currentFormData)
.then(({ data: response }) => {
const { data: newComment, success, total_comments } = response;
if (!success) {
return addNotification({ style: "danger", msg: data })
}
updateTotalComments(total_comments)
setCommentsState([newComment, ...commentsState]);
reset();
})
};
return (
<>
<form
className='form-comment-feed'
onSubmit={handleSubmit(submitCommentHandler)}
>
<div className='feedCommentContainer'>
<img src={image} alt="User profile image" />
<input
className='commentInput'
type="text"
name="comment"
maxLength="256"
placeholder="Escribe un comentario"
ref={register({ required: "El campo es requerido" })}
/>
<button className='shareIconContainer iconActive' >
<TbSend className='shareIcon' />
</button>
</div>
</form>
{errors.comment && <FormErrorFeedback>{errors.comment.message}</FormErrorFeedback>}
<FeedCommentSection.CommentsList
comments={commentsState}
updateTotalComments={updateTotalComments}
setComments={setCommentsState}
/>
</>
)
}
const CommentsList = ({ comments, updateTotalComments, setComments }) => {
const deleteCommentHandler = (commentUnique, deleteCommentUrl) => {
axios.post(deleteCommentUrl)
.then(({ data: response }) => {
const { success, data, total_comments } = response
if (!success) {
return addNotification({ style: "danger", msg: data })
}
updateTotalComments(total_comments)
setComments(prevComments => prevComments.filter((comment) => comment.unique !== commentUnique))
addNotification({ style: "success", msg: data });
})
.catch((error) => addNotification({ style: "danger", msg: error.message }))
};
return (
<div className='commentSection'>
<div className={`comment-sec comment-sec`}>
<ul>
{comments.reverse().map((comment) => {
return (
<FeedCommentTemplate
commentData={comment}
onDeleteHandler={deleteCommentHandler}
key={comment.unique}
/>
);
})}
</ul>
</div>
</div>
)
}
FeedCommentSection.CommentsList = CommentsList
const mapDispatchToProps = {
addNotification: (notification) => addNotification(notification),
};
export default connect(null, mapDispatchToProps)(FeedCommentSection)