|
|
@@ -1,32 +1,64 @@
|
|
|
import data from 'emoji-mart/data/all.json';
|
|
|
import { Emoji } from 'emoji-mart';
|
|
|
|
|
|
-const DEFAULT_SKIN_TONE = 1;
|
|
|
const DEFAULT_EMOJI_SIZE = 24;
|
|
|
|
|
|
-const getNativeEmoji = (emoji, skin = DEFAULT_SKIN_TONE) => {
|
|
|
+/**
|
|
|
+ *
|
|
|
+ * Get native emoji with skin tone
|
|
|
+ * @param emoji Emoji object
|
|
|
+ * @param skin number
|
|
|
+ * @returns emoji data with skin tone
|
|
|
+ */
|
|
|
+const emojiSkinTone = (emoji, skin) => {
|
|
|
const elem = Emoji({
|
|
|
set: 'apple',
|
|
|
emoji,
|
|
|
skin,
|
|
|
size: DEFAULT_EMOJI_SIZE,
|
|
|
});
|
|
|
- return elem ? elem.props['aria-label'].split(',')[0] : null;
|
|
|
+ if (elem && skin > 0) {
|
|
|
+ return elem.props['aria-label'].split(',')[0];
|
|
|
+ }
|
|
|
+
|
|
|
};
|
|
|
|
|
|
-export const emojiMartData = () => {
|
|
|
- const results = {};
|
|
|
- Object.entries(data.emojis).forEach((emoji) => {
|
|
|
- const name = emoji[0];
|
|
|
- if ('skin_variations' in emoji[1]) {
|
|
|
- [...Array(6).keys()].forEach((index) => {
|
|
|
- const emojWithiSkinTone = getNativeEmoji(name, index + 1);
|
|
|
- if (emojWithiSkinTone != null && index > 0) {
|
|
|
- results[`${name}::skin-tone-${index + 1}`] = emojWithiSkinTone;
|
|
|
- }
|
|
|
- });
|
|
|
+/**
|
|
|
+ * Get native emoji from emoji array
|
|
|
+ * @param emojis array of emoji
|
|
|
+ * @returns emoji data
|
|
|
+ */
|
|
|
+
|
|
|
+const getNativeEmoji = (emojis) => {
|
|
|
+ const emojiData = {};
|
|
|
+ emojis.forEach((emoji) => {
|
|
|
+ const elem = Emoji({
|
|
|
+ set: 'apple',
|
|
|
+ emoji: emoji[0],
|
|
|
+ size: DEFAULT_EMOJI_SIZE,
|
|
|
+ });
|
|
|
+ if (elem) {
|
|
|
+ emojiData[emoji[0]] = elem.props['aria-label'].split(',')[0];
|
|
|
+ if (emoji[1].skin_variations) {
|
|
|
+ [...Array(6).keys()].forEach((index) => {
|
|
|
+ if (index > 0) {
|
|
|
+ emojiData[`${emoji[0]}::skin-tone-${index + 1}`] = emojiSkinTone(emoji[0], index + 1);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
}
|
|
|
- results[name] = getNativeEmoji(name);
|
|
|
});
|
|
|
- return results;
|
|
|
+ return emojiData;
|
|
|
+};
|
|
|
+
|
|
|
+/**
|
|
|
+ * Get native emoji mart data
|
|
|
+ * @returns native emoji mart data
|
|
|
+ */
|
|
|
+
|
|
|
+export const emojiMartData = () => {
|
|
|
+ const emojis = Object.entries(data.emojis).map((emoji) => {
|
|
|
+ return emoji;
|
|
|
+ });
|
|
|
+ return getNativeEmoji(emojis);
|
|
|
};
|