From 1c7a5d6ec6b0591408426b1413fc4f7092063c27 Mon Sep 17 00:00:00 2001 From: Peder Johnsen Date: Thu, 29 Nov 2018 16:08:30 +0000 Subject: [PATCH] Add `getEmojiDataFromNative` util function to get emoji data from native --- src/index.js | 1 + src/utils/index.js | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/src/index.js b/src/index.js index 7df17f8..cb1c3e1 100644 --- a/src/index.js +++ b/src/index.js @@ -2,6 +2,7 @@ export { default as emojiIndex } from './utils/emoji-index/emoji-index' export { default as NimbleEmojiIndex } from './utils/emoji-index/nimble-emoji-index' export { default as store } from './utils/store' export { default as frequently } from './utils/frequently' +export { getEmojiDataFromNative } from './utils' export { default as Picker } from './components/picker/picker' export { default as NimblePicker } from './components/picker/nimble-picker' diff --git a/src/utils/index.js b/src/utils/index.js index 241b18b..3bbb118 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -1,5 +1,6 @@ import { buildSearch } from './data' import stringFromCodePoint from '../polyfills/stringFromCodePoint' +import { uncompress } from './data' const _JSON = JSON @@ -134,6 +135,40 @@ function getData(emoji, skin, set, data) { return emojiData } +function getEmojiDataFromNative(nativeString, set, data) { + if (data.compressed) { + uncompress(data); + } + + const skinTones = ['', '🏻', '🏼', '🏽', '🏾', '🏿'] + + let skin + let baseNativeString = nativeString + + skinTones.forEach((skinTone) => { + baseNativeString = baseNativeString.replace(skinTone, '') + if (nativeString.indexOf(skinTone) > 0) { + skin = skinTones.indexOf(skinTone) + 1 + } + }) + + const emojiData = Object.values(data.emojis).find((emoji) => { + if (emoji.variations && emoji.variations.length) { + emoji.unifed = emoji.variations.shift() + } + + return unifiedToNative(emoji.unified) === baseNativeString + }) + + if (!emojiData) { + return null + } + + emojiData.id = emojiData.short_names[0] + + return getSanitizedData(emojiData, skin, set, data) +} + function uniq(arr) { return arr.reduce((acc, item) => { if (acc.indexOf(item) === -1) { @@ -191,6 +226,7 @@ function measureScrollbar() { export { getData, + getEmojiDataFromNative, getSanitizedData, uniq, intersect,