content: PropTypes.string.isRequired,
};
-function MessageContent({ content, isMarkdown, isEdited }) {
+function MessageContent({
+ senderName,
+ content,
+ isMarkdown,
+ isEdited,
+ msgType,
+}) {
return (
<div className="message__content">
<div className="text text-b1">
+ { msgType === 'm.emote' && `* ${senderName} ` }
{ isMarkdown ? genMarkdown(content) : linkifyContent(content) }
</div>
{ isEdited && <Text className="message__content-edited" variant="b3">(edited)</Text>}
isEdited: false,
};
MessageContent.propTypes = {
+ senderName: PropTypes.string.isRequired,
content: PropTypes.node.isRequired,
isMarkdown: PropTypes.bool,
isEdited: PropTypes.bool,
+ msgType: PropTypes.string.isRequired,
};
function MessageEdit({ content, onSave, onCancel }) {
function Message({
avatar, header, reply, content, editContent, reactions, options,
+ msgType,
}) {
- const msgClass = header === null ? ' message--content-only' : ' message--full';
+ const className = [
+ 'message',
+ header === null ? ' message--content-only' : ' message--full',
+ ];
+ switch (msgType) {
+ case 'm.text':
+ className.push('message--type-text');
+ break;
+ case 'm.emote':
+ className.push('message--type-emote');
+ break;
+ case 'm.notice':
+ className.push('message--type-notice');
+ break;
+ default:
+ }
+
return (
- <div className={`message${msgClass}`}>
+ <div className={className.join(' ')}>
<div className="message__avatar-container">
{avatar !== null && avatar}
</div>
editContent: null,
reactions: null,
options: null,
+ msgType: 'm.text',
};
Message.propTypes = {
avatar: PropTypes.node,
editContent: PropTypes.node,
reactions: PropTypes.node,
options: PropTypes.node,
+ msgType: PropTypes.string,
};
export {
let content = mEvent.getContent().body;
if (typeof content === 'undefined') return null;
+ const msgType = mEvent.getContent()?.msgtype;
let reply = null;
let reactions = null;
let isMarkdown = mEvent.getContent().format === 'org.matrix.custom.html';
);
const userContent = (
<MessageContent
+ senderName={getUsernameOfRoomMember(mEvent.sender)}
isMarkdown={isMarkdown}
content={isMedia(mEvent) ? genMediaContent(mEvent) : content}
+ msgType={msgType}
isEdited={isEdited}
/>
);
header={userHeader}
reply={userReply}
content={editEvent !== null && isEditingEvent ? null : userContent}
+ msgType={msgType}
editContent={editEvent !== null && isEditingEvent ? (
<MessageEdit
content={content}