mattermost-redux
Version:
Common code (API client, Redux stores, logic, utility functions) for building a Mattermost client
57 lines (44 loc) • 1.62 kB
text/typescript
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import {Client4} from 'client';
import {Emoji, SystemEmoji, CustomEmoji} from 'types/emojis';
export function isSystemEmoji(emoji: Emoji): emoji is SystemEmoji {
return 'batch' in emoji;
}
export function isCustomEmoji(emoji: Emoji): emoji is CustomEmoji {
return 'id' in emoji;
}
export function getEmojiImageUrl(emoji: Emoji): string {
if (isCustomEmoji(emoji)) {
return Client4.getEmojiRoute(emoji.id) + '/image';
}
const filename = emoji.filename || emoji.aliases[0];
return Client4.getSystemEmojiImageUrl(filename);
}
export function parseNeededCustomEmojisFromText(text: string, systemEmojis: Map<string, SystemEmoji>, customEmojisByName: Map<string, CustomEmoji>, nonExistentEmoji: Set<string>): Set<string> {
if (!text.includes(':')) {
return new Set();
}
const pattern = /:([A-Za-z0-9_-]+):/gi;
const customEmojis = new Set<string>();
let match;
while ((match = pattern.exec(text)) !== null) {
if (!match) {
continue;
}
if (systemEmojis.has(match[1])) {
// It's a system emoji, go the next match
continue;
}
if (nonExistentEmoji.has(match[1])) {
// We've previously confirmed this is not a custom emoji
continue;
}
if (customEmojisByName.has(match[1])) {
// We have the emoji, go to the next match
continue;
}
customEmojis.add(match[1]);
}
return customEmojis;
}