diff options
| author | Henry Jameson <me@hjkos.com> | 2019-06-07 00:17:49 +0300 |
|---|---|---|
| committer | Henry Jameson <me@hjkos.com> | 2019-06-07 00:17:49 +0300 |
| commit | 96f31716f94d0e7691b85ca90e7ea977ca3adb4d (patch) | |
| tree | c6b5ec36e7b02efad65e289edfa8d2b5bb70e2a0 /src/components/emoji-input/suggestor.js | |
| parent | 7ce9b7be079dfe46fa9a974fd7c54864156d57f8 (diff) | |
slot-based emoji input/autocomplete component
Diffstat (limited to 'src/components/emoji-input/suggestor.js')
| -rw-r--r-- | src/components/emoji-input/suggestor.js | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/components/emoji-input/suggestor.js b/src/components/emoji-input/suggestor.js new file mode 100644 index 00000000..f1a0d0da --- /dev/null +++ b/src/components/emoji-input/suggestor.js @@ -0,0 +1,38 @@ +export default function suggest (data) { + return input => { + const trimmed = input.trim() + const firstChar = trimmed[0] + console.log(`'${trimmed}'`, firstChar, firstChar === ':') + if (firstChar === ':' && data.emoji) { + return suggestEmoji(data.emoji)(trimmed) + } + if (firstChar === '@' && data.users) { + return suggestUsers(data.users)(trimmed) + } + return [] + } +} + +function suggestEmoji (emojis) { + return input => { + const shortcode = input.toLowerCase().substr(1) + console.log(shortcode) + return emojis.filter(emoji => emoji.shortcode.toLowerCase().startsWith(shortcode)) + } +} + +function suggestUsers (users) { + return input => { + const shortcode = input.toLowerCase().substr(1) + return users.filter( + user => + user.screen_name.toLowerCase().startsWith('@' + shortcode) || + user.name.toLowerCase().startsWith(shortcode) + ).map(({ screen_name, name, profile_image_url_original }) => ({ + shortcode: screen_name, + detail: name, + image_url: profile_image_url_original, + replacement: '@' + screen_name + })) + } +} |
