Rev 7229 | AutorÃa | Comparar con el anterior | Ultima modificación | Ver Log |
import React, { useState } from 'react'import { useForm } from 'react-hook-form'import { useSelector } from 'react-redux'import { Avatar } from '@mui/material'import styled from 'styled-components'import SendIcon from '@mui/icons-material/Send'import Options from '../UI/Option'import ConfirmModal from '../modals/ConfirmModal'import FormErrorFeedback from '../UI/FormErrorFeedback'const StyledCommentForm = styled.form`display: flex;justify-content: flex-start;align-items: center;input {flex-grow: 1;padding: 0.5rem;background-color: var(--bg-color-secondary);border: 1px solid var(--border-primary);border-radius: var(--border-radius) 0 0 var(--border-radius);}button {border-radius: 0 var(--border-radius) var(--border-radius) 0;border: 1px solid var(--button-bg) !important;}`const StyledCommentList = styled.ul`display: flex;flex-direction: column;padding-right: 0.5rem;gap: 0.5rem;margin-top: 0.5rem;max-height: 300px;overflow-y: auto;width: 100%;`const StyledComment = styled.div`display: flex;gap: 0.5rem;align-items: flex-start;.content {background-color: var(--chat-send);border-radius: var(--border-radius);display: flex;flex-direction: column;flex-grow: 1;gap: 0.5rem;max-width: 100%;overflow: hidden;padding: 0.5rem;position: relative;p {max-width: 100%;overflow: hidden;text-overflow: ellipsis;}}.info {display: inline-flex;flex-direction: column;h3 {color: var(--title-color);font-weight: 600;}span {color: var(--subtitle-color);font-size: 0.9rem;}}`export const CommentForm = ({image = '/images/avatar.jpg',onSubmit = () => null,}) => {const { register, handleSubmit, errors, reset } = useForm()const labels = useSelector(({ intl }) => intl.labels)const submitHandler = handleSubmit(async (data) => {await onSubmit(data)reset()})return (<><StyledCommentForm onSubmit={submitHandler}>{image && (<Avatarsrc={image}alt="Profile image"sx={{ marginRight: '.5rem', width: '45px', height: '45px' }}/>)}<inputtype="text"name="comment"maxLength="256"placeholder={labels.write_a_comment}ref={register({ required: 'El campo es requerido' })}/><button className="btn btn-primary"><SendIcon /></button></StyledCommentForm>{errors.comment && (<FormErrorFeedback>{errors.comment.message}</FormErrorFeedback>)}</>)}export const CommentsList = ({ comments, onDelete }) => {return (<><StyledCommentList>{comments.map((comment) => {return (<li key={comment.unique}><CommentsList.Item comment={comment} onDelete={onDelete} /></li>)})}</StyledCommentList></>)}const Comment = ({ onDelete, comment }) => {const [showConfirmModal, setShowConfirmModal] = useState(false)const labels = useSelector(({ intl }) => intl.labels)const {unique,user_url,user_name,// user_image = '/images/avatar.jpg',time_elapsed,comment: content,link_delete,} = commentconst toggleModal = () => {setShowConfirmModal(!showConfirmModal)}return (<><StyledComment><div className="content"><div className="info"><a href={user_url}><h3>{user_name}</h3></a><span>{time_elapsed}</span></div>{link_delete && (<Optionsoptions={[{label: labels.delete,action: toggleModal,},]}right="0.5rem"top="1.5rem"/>)}<p>{content}</p></div></StyledComment><ConfirmModalshow={showConfirmModal}onClose={toggleModal}onAccept={() => onDelete(unique, link_delete)}acceptLabel={labels.accept}/></>)}CommentsList.Item = Comment