Rev 11394 | Rev 15853 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
import React, { useEffect, useRef } from "react";import parse from "html-react-parser";import styles from "./messages.module.scss";const Messages = (props) => {const { onScrollToBottom, oldMessages, newMessages, chatType } = props;const lastEl = useRef();const lastMessageEl = useRef();useEffect(() => {(lastEl.current);if (lastEl.current) {lastEl.current.onload = () => {("scrolled");onScrollToBottom();};}}, [lastEl.current]);useEffect(() => {if (lastMessageEl.current) {lastMessageEl.current.onload = () => {("scrolled");onScrollToBottom();};}}, [lastMessageEl.current]);useEffect(() => {onScrollToBottom();}, [newMessages]);const messageRenderer = (message, type) => {const { m, mtype, user_name, u } = message;switch (mtype) {case "text":return (<div className={styles.messageContainer}>{chatType === "group" && u !== 1 && (<span className={styles.userName}>{user_name}</span>)}<div ref={lastMessageEl}>{parse(emojione.shortnameToImage(m))}</div></div>);case "image":return (<React.Fragment><div className={styles.messageContainer}>{chatType === "group" && u !== 1 && (<span className={styles.userName}>{user_name}</span>)}<imgclassName={styles.chatImg}src={m}alt="chat_img"ref={type === "new" ? lastEl : undefined}/></div><a href={m} target="_blank" className={styles.downloadBtn}><i className="fa ti-arrow-circle-down"></i></a></React.Fragment>);case "video":return (<React.Fragment><div className={styles.messageContainer}>{chatType === "group" && u !== 1 && (<span className={styles.userName}>{user_name}</span>)}<videoclassName={styles.chatImg}src={m}preload="none"controlsref={type === "new" ? lastEl : undefined}></video></div><a href={m} target="_blank" className={styles.downloadBtn}><i className="fa ti-arrow-circle-down"></i></a></React.Fragment>);case "document":return (<React.Fragment><div className={styles.messageContainer}>{chatType === "group" && u !== 1 && (<span className={styles.userName}>{user_name}</span>)}<imgclassName={styles.pdfImage}src="/storage/type/default/filename/pdf.png"alt="pdf"ref={type === "new" ? lastEl : undefined}/></div><a href={m} target="_blank" className={styles.downloadBtn}><i className="fa ti-arrow-circle-down"></i></a></React.Fragment>);default:break;}};return (<React.Fragment>{oldMessages.map((message, index) => (<divclassName={`${styles.message} ${message.u === 1 ? styles.message_sent : styles.message_received}`}key={index}>{messageRenderer(message, "old")}<span className={styles.message__time}>{message.time}</span></div>))}{newMessages.map((message, index) => (<divclassName={`${styles.message} ${message.u === 1 ? styles.message_sent : styles.message_received}`}key={index}>{messageRenderer(message, "new")}<span className={styles.message__time}>{message.time}</span></div>))}</React.Fragment>);};export default Messages;