Skip to content
Snippets Groups Projects
Unverified Commit 06a636db authored by tusooa's avatar tusooa :zap:
Browse files

Lazy-load emoji picker in post form

When clicking the reply button, we used to load the whole emoji picker.
This causes a considerable delay even if the user is not going to use
the emoji picker. Now the content of the emoji picker is loaded only
after the user has explicitly opened the emoji picker.

Ref: grouped-emoji-picker
parent 9aeffd76
No related branches found
No related tags found
2 merge requests!1711Update stable - 2.5.0 release,!1408Group emojis into packs in emoji picker
......@@ -19,6 +19,7 @@
v-if="enableEmojiPicker"
ref="picker"
:class="{ hide: !showPicker }"
:showing="showPicker"
:enable-sticker-picker="enableStickerPicker"
class="emoji-picker-panel"
@emoji="insert"
......
......@@ -39,6 +39,10 @@ const EmojiPicker = {
required: false,
type: Boolean,
default: false
},
showing: {
required: true,
type: Boolean
}
},
data () {
......@@ -48,7 +52,9 @@ const EmojiPicker = {
showingStickers: false,
groupsScrolledClass: 'scrolled-top',
keepOpen: false,
customEmojiTimeout: null
customEmojiTimeout: null,
// Lazy-load only after the first time `showing` becomes true.
contentLoaded: false
}
},
components: {
......@@ -115,6 +121,9 @@ const EmojiPicker = {
this.$lozad = lozad('img', {})
this.$lozad.observe()
},
waitForDomAndInitializeLazyLoad() {
this.$nextTick(() => this.initializeLazyLoad())
},
destroyLazyLoad () {
if (this.$lozad) {
if (this.$lozad.observer) {
......@@ -129,18 +138,23 @@ const EmojiPicker = {
watch: {
keyword () {
this.onScroll()
// Wait for the dom to change
this.$nextTick(() => this.initializeLazyLoad())
this.waitForDomAndInitializeLazyLoad()
},
allCustomGroups () {
this.$nextTick(() => this.initializeLazyLoad())
this.waitForDomAndInitializeLazyLoad()
},
showing (val) {
if (val) {
this.contentLoaded = true
this.waitForDomAndInitializeLazyLoad()
}
}
},
mounted () {
if (this.defaultGroup) {
this.highlight(this.defaultGroup)
}
this.initializeLazyLoad()
this.waitForDomAndInitializeLazyLoad()
},
destroyed () {
this.destroyLazyLoad()
......
<template>
<div class="emoji-picker panel panel-default panel-body">
<div
class="emoji-picker panel panel-default panel-body"
>
<div class="heading">
<span class="emoji-tabs">
<span
......@@ -45,7 +47,10 @@
</span>
</span>
</div>
<div class="content">
<div
v-if="contentLoaded"
class="content"
>
<div
class="emoji-content"
:class="{hidden: showingStickers}"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment