Просмотр исходного кода

feat: code improvement

https://youtrack.weseek.co.jp/issue/GW-7732
- Add function to get emoji with skin tone
- Split function of get native emoji and native emoji with skin tone
- Modify function of emojiMartData to process emoji data at once
I Komang Mudana 4 лет назад
Родитель
Сommit
0269e9ccc0
1 измененных файлов с 48 добавлено и 16 удалено
  1. 48 16
      packages/app/src/client/util/markdown-it/emoji-mart-data.ts

+ 48 - 16
packages/app/src/client/util/markdown-it/emoji-mart-data.ts

@@ -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);
 };