| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 | 
							- // @flow
 - 
 - import aliases from 'react-emoji-render/data/aliases';
 - import emojiAsciiAliases from 'react-emoji-render/data/asciiAliases';
 - 
 - import { escapeRegexp } from '../base/util';
 - 
 - /**
 -  * An ASCII emoticon regexp array to find and replace old-style ASCII
 -  * emoticons (such as :O) to new Unicode representation, so then devices
 -  * and browsers that support them can render these natively without
 -  * a 3rd party component.
 -  *
 -  * NOTE: this is currently only used on mobile, but it can be used
 -  * on web too once we drop support for browsers that don't support
 -  * unicode emoji rendering.
 -  */
 - const EMOTICON_REGEXP_ARRAY: Array<Array<Object>> = [];
 - 
 - (function() {
 -     for (const [ key, value ] of Object.entries(aliases)) {
 -         let escapedValues;
 -         const asciiEmojies = emojiAsciiAliases[key];
 - 
 -         // Adding ascii emoticons
 -         if (asciiEmojies) {
 -             escapedValues = asciiEmojies.map(v => escapeRegexp(v));
 -         } else {
 -             escapedValues = [];
 -         }
 - 
 -         // Adding slack-type emoji format
 -         escapedValues.push(escapeRegexp(`:${key}:`));
 - 
 -         const regexp = `(${escapedValues.join('|')})`;
 - 
 -         EMOTICON_REGEXP_ARRAY.push([ new RegExp(regexp, 'g'), value ]);
 -     }
 - })();
 - 
 - /**
 -  * Replaces ascii and other non-unicode emoticons with unicode emojis to let the emojis be rendered
 -  * by the platform native renderer.
 -  *
 -  * @param {string} message - The message to parse and replace.
 -  * @returns {string}
 -  */
 - export function replaceNonUnicodeEmojis(message: string) {
 -     let replacedMessage = message;
 - 
 -     for (const [ regexp, replaceValue ] of EMOTICON_REGEXP_ARRAY) {
 -         replacedMessage = replacedMessage.replace(regexp, replaceValue);
 -     }
 - 
 -     return replacedMessage;
 - }
 - 
 - /**
 -  * Selector for calculating the number of unread chat messages.
 -  *
 -  * @param {Object} state - The redux state.
 -  * @returns {number} The number of unread messages.
 -  */
 - export function getUnreadCount(state: Object) {
 -     const { lastReadMessage, messages } = state['features/chat'];
 -     const messagesCount = messages.length;
 - 
 -     if (!messagesCount) {
 -         return 0;
 -     }
 - 
 -     if (navigator.product === 'ReactNative') {
 -         // React native stores the messages in a reversed order.
 -         return messages.indexOf(lastReadMessage);
 -     }
 - 
 -     const lastReadIndex = messages.lastIndexOf(lastReadMessage);
 - 
 -     return messagesCount - (lastReadIndex + 1);
 - }
 
 
  |