Rev 3088 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
import React, { useState } from "react";import parse from "html-react-parser";import styled from "styled-components";import LikeButton from "../like-button/LikeButton";import { addNotification } from "../../../../redux/notification/notification.actions";import { useDispatch } from "react-redux";const StyledChatImgMessage = styled.div`display: flex;justify-content: center;align-items: center;position: initial !important;transform: initial !important;.chat_image_container {video {width: 100%;outline: none;}img {width: 150px;max-height: 200px;}.pdf {width: 40px;}}.chat_image__download_button {margin-left: 0.5rem;.fa {font-size: 1rem;color: gray;}}`;const ResponseMessageContainer = styled.div`display: flex;flex-direction: column;text-align: center;gap: 10px;align-items: ${props => props.isRight ? 'flex-end' : 'flex-start'};`function propsAreEqual(prevProp, nextProp) {return prevProp.time === nextProp.time}const MessageTemplate = ({ message, setResponseMessage, responseMessage, time }) => {const [isShow, setIsShow] = useState(false);const [isLiked, setIsLiked] = useState(false);const dispatch = useDispatch()const senderName = (message) => {if (message.type === "group") {return message.u === 1 ? "" : message.user_name;}};const handleLike = () => {setIsLiked(!isLiked)setIsShow(!isShow)}const handleResponse = (msg) => {setIsShow(false)setResponseMessage(msg)}const handleCopy = async () => {await navigator.clipboard.writeText(`${message.m}`)dispatch(addNotification({style: "success",msg: 'Mensaje copiado en el portapapeles',}))setIsShow(!isShow)}switch (message.mtype) {case "text":return (<likey={message.id}className={`clearfix ${message.u === 1 ? "odd" : ""} m-t-10 conversers${message.u}`}><div className="conversation-text"><div className="conversation_container w-100">{responseMessage&&<ResponseMessageContainer isRight={message.u === 1}><span>{`Respondiendo a ${responseMessage.user_name}`}</span><div className="ctext-wrap">{senderName(responseMessage)}<p className="">{parse(emojione.shortnameToImage(responseMessage.m))}<br /></p></div></ResponseMessageContainer>}<div className="conversation-text"><div className="ctext-wrap">{senderName(message)}<p className="">{parse(emojione.shortnameToImage(message.m))}<br /><div className="d-inline-flex align-items-center">{!message.not_received&&<i className={"fa fa-check text-right ellipsis "} style={message.seen ? { color: 'blue' } : { color: 'gray' }} />}<label>{time}</label></div></p>{isLiked&&<iclassName="fas fa-heart"style={{color: '#0961bf',position: 'absolute',top: '87%',left: '85%'}}/>}</div><iclassName="la la-ellipsis-v icon"style={{ position: 'relative' }}onClick={() => setIsShow(!isShow)}/>{isShow&&<div className="display-reactions" ><LikeButton onClick={handleLike} /><button type="button" onClick={() => handleResponse(message)}><i className="fa fa-reply" /></button><button type="button" onClick={() => handleCopy(message)}><i className="fa fa-copy" /></button></div>}</div></div></div></li>);case "image":return (<likey={message.id}className={`clearfix ${message.u === 1 ? "odd" : ""} m-t-10 conversers${message.u}`}><divclassName="conversation-text"data-toggle="tooltip"data-placement="left"data-html="true"><div className="ctext-wrap">{senderName(message)}<StyledChatImgMessage><div className="chat_image_container"><img src={message.m} alt="chat_image" /></div>{message.u !== 1&&<ahref={message.m}downloadclassName="chat_image__download_button"><i className="fa fa-arrow-circle-o-down" /></a>}</StyledChatImgMessage><br /><i className="text-right">{time}</i>{isLiked&&<iclassName="fas fa-heart"style={{color: '#0961bf',position: 'absolute',top: '87%',left: '85%'}}/>}</div><iclassName="la la-ellipsis-v icon"style={{ position: 'relative' }}onClick={() => setIsShow(!isShow)}/>{isShow&&<div className="display-reactions"><LikeButton onClick={handleLike} /><button type="button" onClick={() => handleResponse(message)}><i className="fa fa-reply" /></button></div>}</div></li>);case "video":return (<likey={message.id}className={`clearfix ${message.u === 1 ? "odd" : ""} m-t-10 conversers${message.u}`}><divclassName="conversation-text"data-toggle="tooltip"data-placement="left"data-html="true"><div className="ctext-wrap">{senderName(message)}<StyledChatImgMessage><ahref={message.m}target="_blank"className="chat_image__download_button" rel="noreferrer"><div className="chat_image_container"><video src={message.m} preload="none" controls></video></div></a>{message.u !== 1&&<ahref={message.m}downloadclassName="chat_image__download_button"><i className="fa fa-arrow-circle-o-down" /></a>}</StyledChatImgMessage><br /><i className="text-right">{time}</i>{isLiked&&<iclassName="fas fa-heart"style={{color: '#0961bf',position: 'absolute',top: '87%',left: '85%'}}/>}</div><iclassName="la la-ellipsis-v icon"style={{ position: 'relative' }}onClick={() => setIsShow(!isShow)}/>{isShow&&<div className="display-reactions"><LikeButton onClick={handleLike} /><button type="button" onClick={() => handleResponse(message)}><i className="fa fa-reply" /></button></div>}</div></li>);case "document":return (<likey={message.id}className={`clearfix ${message.u === 1 ? "odd" : ""} m-t-10 conversers${message.u}`}><divclassName="conversation-text"data-toggle="tooltip"data-placement="left"data-html="true"><div className="ctext-wrap">{senderName(message)}<StyledChatImgMessage><div className="chat_image_container"><imgclassName="pdf"src="/storage/type/default/filename/pdf.png"alt="pdf"/></div>{message.u !== 1&&<ahref={message.m}target="_blank"className="chat_image__download_button" rel="noreferrer"><i className="fa ti-arrow-circle-down"></i></a>}</StyledChatImgMessage><br /><i className="text-right">{time}</i>{isLiked&&<iclassName="fas fa-heart"style={{color: '#0961bf',position: 'absolute',top: '87%',left: '85%'}}/>}</div><iclassName="la la-ellipsis-v icon"style={{ position: 'relative' }}onClick={() => setIsShow(!isShow)}/>{isShow&&<div className="display-reactions"><LikeButton onClick={handleLike} /><button type="button" onClick={() => handleResponse(message)}><i className="fa fa-reply" /></button></div>}</div></li>);default:return (<likey={message.id}className={`clearfix ${message.u === 1 ? "odd" : ""} m-t-10 conversers${message.u}`}><divclassName="conversation-text"data-toggle="tooltip"data-placement="left"data-html="true"><div className="ctext-wrap">{senderName(message)}<p>{message.mtype}<br /><i className="text-right">{time}</i></p></div><iclassName="la la-ellipsis-v icon"style={{ position: 'relative' }}onClick={() => setIsShow(!isShow)}/>{isShow&&<div className="display-reactions"><LikeButton onClick={handleLike} /><button type="button" onClick={() => setResponseMessage(message)}><i className="fa fa-reply" /></button></div>}</div></li>);}};export default React.memo(MessageTemplate, propsAreEqual);