105 lines
2.2 KiB
TypeScript
105 lines
2.2 KiB
TypeScript
|
|
import { CompactEmoji } from 'emojibase';
|
||
|
|
import emojisData from 'emojibase-data/en/compact.json';
|
||
|
|
import joypixels from 'emojibase-data/en/shortcodes/joypixels.json';
|
||
|
|
import emojibase from 'emojibase-data/en/shortcodes/emojibase.json';
|
||
|
|
|
||
|
|
export type IEmoji = CompactEmoji & {
|
||
|
|
shortcode: string;
|
||
|
|
};
|
||
|
|
|
||
|
|
export enum EmojiGroupId {
|
||
|
|
People = 'People',
|
||
|
|
Nature = 'Nature',
|
||
|
|
Food = 'Food',
|
||
|
|
Activity = 'Activity',
|
||
|
|
Travel = 'Travel',
|
||
|
|
Object = 'Object',
|
||
|
|
Symbol = 'Symbol',
|
||
|
|
Flag = 'Flag',
|
||
|
|
}
|
||
|
|
|
||
|
|
export type IEmojiGroup = {
|
||
|
|
id: EmojiGroupId;
|
||
|
|
order: number;
|
||
|
|
emojis: IEmoji[];
|
||
|
|
};
|
||
|
|
|
||
|
|
export const emojiGroups: IEmojiGroup[] = [
|
||
|
|
{
|
||
|
|
id: EmojiGroupId.People,
|
||
|
|
order: 0,
|
||
|
|
emojis: [],
|
||
|
|
},
|
||
|
|
{
|
||
|
|
id: EmojiGroupId.Nature,
|
||
|
|
order: 1,
|
||
|
|
emojis: [],
|
||
|
|
},
|
||
|
|
{
|
||
|
|
id: EmojiGroupId.Food,
|
||
|
|
order: 2,
|
||
|
|
emojis: [],
|
||
|
|
},
|
||
|
|
{
|
||
|
|
id: EmojiGroupId.Activity,
|
||
|
|
order: 3,
|
||
|
|
emojis: [],
|
||
|
|
},
|
||
|
|
{
|
||
|
|
id: EmojiGroupId.Travel,
|
||
|
|
order: 4,
|
||
|
|
emojis: [],
|
||
|
|
},
|
||
|
|
{
|
||
|
|
id: EmojiGroupId.Object,
|
||
|
|
order: 5,
|
||
|
|
emojis: [],
|
||
|
|
},
|
||
|
|
{
|
||
|
|
id: EmojiGroupId.Symbol,
|
||
|
|
order: 6,
|
||
|
|
emojis: [],
|
||
|
|
},
|
||
|
|
{
|
||
|
|
id: EmojiGroupId.Flag,
|
||
|
|
order: 7,
|
||
|
|
emojis: [],
|
||
|
|
},
|
||
|
|
];
|
||
|
|
|
||
|
|
export const emojis: IEmoji[] = [];
|
||
|
|
|
||
|
|
function addEmojiToGroup(groupIndex: number, emoji: IEmoji) {
|
||
|
|
emojiGroups[groupIndex].emojis.push(emoji);
|
||
|
|
}
|
||
|
|
|
||
|
|
function getGroupIndex(emoji: IEmoji): number | undefined {
|
||
|
|
if (emoji.group === 0 || emoji.group === 1) return 0;
|
||
|
|
if (emoji.group === 3) return 1;
|
||
|
|
if (emoji.group === 4) return 2;
|
||
|
|
if (emoji.group === 6) return 3;
|
||
|
|
if (emoji.group === 5) return 4;
|
||
|
|
if (emoji.group === 7) return 5;
|
||
|
|
if (emoji.group === 8 || typeof emoji.group === 'undefined') return 6;
|
||
|
|
if (emoji.group === 9) return 7;
|
||
|
|
return undefined;
|
||
|
|
}
|
||
|
|
|
||
|
|
emojisData.forEach((emoji) => {
|
||
|
|
const myShortCodes = joypixels[emoji.hexcode] || emojibase[emoji.hexcode];
|
||
|
|
if (!myShortCodes) return;
|
||
|
|
if (Array.isArray(myShortCodes) && myShortCodes.length === 0) return;
|
||
|
|
|
||
|
|
const em: IEmoji = {
|
||
|
|
...emoji,
|
||
|
|
shortcode: Array.isArray(myShortCodes) ? myShortCodes[0] : myShortCodes,
|
||
|
|
shortcodes: Array.isArray(myShortCodes) ? myShortCodes : emoji.shortcodes,
|
||
|
|
};
|
||
|
|
|
||
|
|
const groupIndex = getGroupIndex(em);
|
||
|
|
if (groupIndex !== undefined) {
|
||
|
|
addEmojiToGroup(groupIndex, em);
|
||
|
|
emojis.push(em);
|
||
|
|
}
|
||
|
|
});
|