import moment from 'moment'; import I18n from '../../i18n'; import database from '../../lib/realm'; import { DISCUSSION } from './constants'; export const formatLastMessage = (lm, customFormat) => { if (customFormat) { return moment(lm).format(customFormat); } return lm ? moment(lm).calendar(null, { lastDay: `[${ I18n.t('Yesterday') }]`, sameDay: 'h:mm A', lastWeek: 'dddd', sameElse: 'MMM D' }) : null; }; export const formatMessageCount = (count, type) => { const discussion = type === DISCUSSION; let text = discussion ? I18n.t('No_messages_yet') : null; if (count === 1) { text = `${ count } ${ discussion ? I18n.t('message') : I18n.t('reply') }`; } else if (count > 1 && count < 1000) { text = `${ count } ${ discussion ? I18n.t('messages') : I18n.t('replies') }`; } else if (count > 999) { text = `+999 ${ discussion ? I18n.t('messages') : I18n.t('replies') }`; } return text; }; export const BUTTON_HIT_SLOP = { top: 4, right: 4, bottom: 4, left: 4 }; export const SYSTEM_MESSAGES = [ 'r', 'au', 'ru', 'ul', 'uj', 'ut', 'rm', 'user-muted', 'user-unmuted', 'message_pinned', 'subscription-role-added', 'subscription-role-removed', 'room_changed_description', 'room_changed_announcement', 'room_changed_topic', 'room_changed_privacy', 'message_snippeted', 'thread-created' ]; export const getInfoMessage = ({ type, role, msg, author }) => { const { username } = author; if (type === 'rm') { return I18n.t('Message_removed'); } else if (type === 'uj') { return I18n.t('Has_joined_the_channel'); } else if (type === 'ut') { return I18n.t('Has_joined_the_conversation'); } else if (type === 'r') { return I18n.t('Room_name_changed', { name: msg, userBy: username }); } else if (type === 'message_pinned') { return I18n.t('Message_pinned'); } else if (type === 'ul') { return I18n.t('Has_left_the_channel'); } else if (type === 'ru') { return I18n.t('User_removed_by', { userRemoved: msg, userBy: username }); } else if (type === 'au') { return I18n.t('User_added_by', { userAdded: msg, userBy: username }); } else if (type === 'user-muted') { return I18n.t('User_muted_by', { userMuted: msg, userBy: username }); } else if (type === 'user-unmuted') { return I18n.t('User_unmuted_by', { userUnmuted: msg, userBy: username }); } else if (type === 'subscription-role-added') { return `${ msg } was set ${ role } by ${ username }`; } else if (type === 'subscription-role-removed') { return `${ msg } is no longer ${ role } by ${ username }`; } else if (type === 'room_changed_description') { return I18n.t('Room_changed_description', { description: msg, userBy: username }); } else if (type === 'room_changed_announcement') { return I18n.t('Room_changed_announcement', { announcement: msg, userBy: username }); } else if (type === 'room_changed_topic') { return I18n.t('Room_changed_topic', { topic: msg, userBy: username }); } else if (type === 'room_changed_privacy') { return I18n.t('Room_changed_privacy', { type: msg, userBy: username }); } else if (type === 'message_snippeted') { return I18n.t('Created_snippet'); } return ''; }; export const getCustomEmoji = (content) => { // search by name const data = database.objects('customEmojis').filtered('name == $0', content); if (data.length) { return data[0]; } // searches by alias // RealmJS doesn't support IN operator: https://github.com/realm/realm-js/issues/450 const emojis = database.objects('customEmojis'); const findByAlias = emojis.find((emoji) => { if (emoji.aliases.length && emoji.aliases.findIndex(alias => alias === content) !== -1) { return true; } return false; }); return findByAlias; };