verdnatura-chat/app/presentation/RoomItem/LastMessage.js

73 lines
1.9 KiB
JavaScript
Raw Normal View History

2019-04-18 20:57:35 +00:00
import React from 'react';
import PropTypes from 'prop-types';
import _ from 'lodash';
import I18n from '../../i18n';
import styles from './styles';
import Markdown from '../../containers/markdown';
2019-12-11 23:01:12 +00:00
import { themes } from '../../constants/colors';
2020-01-29 20:20:36 +00:00
import shortnameToUnicode from '../../utils/shortnameToUnicode';
2019-04-18 20:57:35 +00:00
const formatMsg = ({
lastMessage, type, showLastMessage, username
}) => {
if (!showLastMessage) {
return '';
}
2020-01-29 20:20:36 +00:00
if (!lastMessage || !lastMessage.u || lastMessage.pinned) {
2019-04-18 20:57:35 +00:00
return I18n.t('No_Message');
}
if (lastMessage.t === 'jitsi_call_started') {
const { u } = lastMessage;
return I18n.t('Started_call', { userBy: u.username });
}
2019-04-18 20:57:35 +00:00
let prefix = '';
const isLastMessageSentByMe = lastMessage.u.username === username;
if (!lastMessage.msg && lastMessage.attachments && Object.keys(lastMessage.attachments).length) {
2019-04-18 20:57:35 +00:00
const user = isLastMessageSentByMe ? I18n.t('You') : lastMessage.u.username;
return I18n.t('User_sent_an_attachment', { user });
}
if (isLastMessageSentByMe) {
prefix = I18n.t('You_colon');
} else if (type !== 'd') {
prefix = `${ lastMessage.u.username }: `;
}
let msg = `${ prefix }${ lastMessage.msg.replace(/[\n\t\r]/igm, '') }`;
if (msg) {
msg = shortnameToUnicode(msg);
2019-04-18 20:57:35 +00:00
}
return msg;
};
const arePropsEqual = (oldProps, newProps) => _.isEqual(oldProps, newProps);
const LastMessage = React.memo(({
2019-12-11 23:01:12 +00:00
lastMessage, type, showLastMessage, username, alert, theme
2019-04-18 20:57:35 +00:00
}) => (
<Markdown
msg={formatMsg({
2019-04-18 20:57:35 +00:00
lastMessage, type, showLastMessage, username
})}
2019-12-11 23:01:12 +00:00
style={[styles.markdownText, { color: alert ? themes[theme].bodyText : themes[theme].auxiliaryText }]}
customEmojis={false}
numberOfLines={2}
preview
2019-12-11 23:01:12 +00:00
theme={theme}
/>
2019-04-18 20:57:35 +00:00
), arePropsEqual);
LastMessage.propTypes = {
2019-12-11 23:01:12 +00:00
theme: PropTypes.string,
2019-04-18 20:57:35 +00:00
lastMessage: PropTypes.object,
type: PropTypes.string,
showLastMessage: PropTypes.bool,
username: PropTypes.string,
alert: PropTypes.bool
2019-04-18 20:57:35 +00:00
};
export default LastMessage;