import React, { useState } from 'react'; import { MessageProps } from './props'; import { myStyles, theirStyles } from './styles'; import { Dot } from '../../../../Components/Dot'; import { Avatar } from '../../../../Components/Avatar'; import { DateTime } from './DateTime'; import { File } from '../../../../Components/File'; import { Image } from '../../../../Components/Image'; import { isImage, getFileName } from '../../../../util/file'; import { formatTime, getDateTime } from '../../../../util/dateTime'; export const Message: React.FC = (props: MessageProps) => { const { lastMessage = null, message, nextMessage = null, chat = null, isSending = false, isMyMessage = false, showDateTime = false, } = props; const [hovered, setHovered] = useState(false); const styles = isMyMessage ? myStyles : theirStyles; const topRadius = !lastMessage || lastMessage.sender_username !== message.sender_username ? '1.3em' : '0.3em'; const bottomRadius = !nextMessage || nextMessage.sender_username !== message.sender_username ? '1.3em' : '0.3em'; const borderStyle = { borderRadius: isMyMessage ? `1.3em ${topRadius} ${bottomRadius} 1.3em` : `${topRadius} 1.3em 1.3em ${bottomRadius}`, }; const sendingStyle = isSending ? { backgroundColor: '#40a9ff' } : {}; const isLastMessage = !nextMessage || nextMessage.sender_username !== message.sender_username; const paddingBottom = !nextMessage || nextMessage.sender_username !== message.sender_username ? '12px' : '2px'; const text: string = message.text !== null ? message.text.replace(/ { const attachments = message && message.attachments ? message.attachments : []; return attachments.map((attachment, index) => { const fileName = getFileName(attachment.file); if (renderImage && isImage(fileName)) { return ( ); } else if (!renderImage && !isImage(fileName)) { return ( ); } else { return
; } }); }; const renderReads = () => { const chatPeople = chat !== null ? chat.people : []; return chatPeople.map((chatPerson, index) => { return ( ); }); }; if (props.renderMessage) { return <>{props.renderMessage(props)}; } return (
{showDateTime && ( )} {(lastMessage === null || lastMessage.sender_username !== message.sender_username) && (
{message.sender_username}
)}
{renderAttachments(true)}
{renderAttachments(false)}
{message.text !== null && (
setHovered(true)} onMouseLeave={() => setHovered(false)} style={{ ...styles.bodyStyle, ...props.bodyStyle, }} > {isMyMessage && ( {formatTime( getDateTime(message.created, props.timezoneOffset) as Date )} )}
{!isMyMessage && ( {formatTime( getDateTime(message.created, props.timezoneOffset) as Date )} )}
)}
{renderReads()}
); };