export function normalizePoll(poll) {
const normalPoll = { ...poll };
+ const emojiMap = makeEmojiMap(normalPoll);
+
normalPoll.options = poll.options.map(option => ({
...option,
- title_emojified: emojify(escapeTextContentForBrowser(option.title)),
+ title_emojified: emojify(escapeTextContentForBrowser(option.title), emojiMap),
}));
return normalPoll;
return relativeTime;
};
+const makeEmojiMap = record => record.get('emojis').reduce((obj, emoji) => {
+ obj[`:${emoji.get('shortcode')}:`] = emoji.toJS();
+ return obj;
+}, {});
+
export default @injectIntl
class Poll extends ImmutablePureComponent {
const active = !!this.state.selected[`${optionIndex}`];
const showResults = poll.get('voted') || poll.get('expired');
+ let titleEmojified = option.get('title_emojified');
+ if (!titleEmojified) {
+ const emojiMap = makeEmojiMap(poll);
+ titleEmojified = emojify(escapeTextContentForBrowser(option.get('title')), emojiMap);
+ }
+
return (
<li key={option.get('title')}>
{showResults && (
{!showResults && <span className={classNames('poll__input', { checkbox: poll.get('multiple'), active })} />}
{showResults && <span className='poll__number'>{Math.round(percent)}%</span>}
- <span dangerouslySetInnerHTML={{ __html: option.get('title_emojified', emojify(escapeTextContentForBrowser(option.get('title')))) }} />
+ <span dangerouslySetInnerHTML={{ __html: titleEmojified }} />
</label>
</li>
);