|
@@ -17,7 +17,7 @@ import {
|
|
|
faCode,
|
|
|
faFlag
|
|
|
} from '@fortawesome/free-solid-svg-icons'
|
|
|
-import { trim } from 'lodash'
|
|
|
+import { debounce, trim } from 'lodash'
|
|
|
|
|
|
library.add(
|
|
|
faBoxOpen,
|
|
@@ -86,7 +86,8 @@ const EmojiPicker = {
|
|
|
// Lazy-load only after the first time `showing` becomes true.
|
|
|
contentLoaded: false,
|
|
|
groupRefs: {},
|
|
|
- emojiRefs: {}
|
|
|
+ emojiRefs: {},
|
|
|
+ filteredEmojiGroups: []
|
|
|
}
|
|
|
},
|
|
|
components: {
|
|
@@ -206,6 +207,7 @@ const EmojiPicker = {
|
|
|
const oldContentLoaded = this.contentLoaded
|
|
|
this.contentLoaded = true
|
|
|
this.waitForDomAndInitializeLazyLoad()
|
|
|
+ this.filteredEmojiGroups = this.getFilteredEmojiGroups()
|
|
|
if (!oldContentLoaded) {
|
|
|
this.$nextTick(() => {
|
|
|
if (this.defaultGroup) {
|
|
@@ -213,15 +215,24 @@ const EmojiPicker = {
|
|
|
}
|
|
|
})
|
|
|
}
|
|
|
+ },
|
|
|
+ getFilteredEmojiGroups () {
|
|
|
+ return this.allEmojiGroups
|
|
|
+ .map(group => ({
|
|
|
+ ...group,
|
|
|
+ emojis: filterByKeyword(group.emojis, trim(this.keyword))
|
|
|
+ }))
|
|
|
+ .filter(group => group.emojis.length > 0)
|
|
|
}
|
|
|
},
|
|
|
watch: {
|
|
|
keyword () {
|
|
|
this.onScroll()
|
|
|
- this.waitForDomAndInitializeLazyLoad()
|
|
|
+ this.debouncedHandleKeywordChange()
|
|
|
},
|
|
|
allCustomGroups () {
|
|
|
this.waitForDomAndInitializeLazyLoad()
|
|
|
+ this.filteredEmojiGroups = this.getFilteredEmojiGroups()
|
|
|
},
|
|
|
showing (val) {
|
|
|
if (val) {
|
|
@@ -266,16 +277,14 @@ const EmojiPicker = {
|
|
|
.map(([_, v]) => v)
|
|
|
.concat(this.unicodeEmojiGroups)
|
|
|
},
|
|
|
- filteredEmojiGroups () {
|
|
|
- return this.allEmojiGroups
|
|
|
- .map(group => ({
|
|
|
- ...group,
|
|
|
- emojis: filterByKeyword(group.emojis, trim(this.keyword))
|
|
|
- }))
|
|
|
- .filter(group => group.emojis.length > 0)
|
|
|
- },
|
|
|
stickerPickerEnabled () {
|
|
|
return (this.$store.state.instance.stickers || []).length !== 0
|
|
|
+ },
|
|
|
+ debouncedHandleKeywordChange () {
|
|
|
+ return debounce(() => {
|
|
|
+ this.waitForDomAndInitializeLazyLoad()
|
|
|
+ this.filteredEmojiGroups = this.getFilteredEmojiGroups()
|
|
|
+ }, 500)
|
|
|
}
|
|
|
}
|
|
|
}
|