aboutsummaryrefslogtreecommitdiff
path: root/src/components/emoji_picker/emoji_picker.vue
diff options
context:
space:
mode:
authorHJ <30-hj@users.noreply.git.pleroma.social>2023-01-03 18:57:26 +0000
committerHJ <30-hj@users.noreply.git.pleroma.social>2023-01-03 18:57:26 +0000
commita7387332ed3a3a26de1f818d0bf6b967ab778d4a (patch)
tree832dd89b1145b844e3537ff9340dcca1096ee079 /src/components/emoji_picker/emoji_picker.vue
parent3e8aa0a3984574d7ab191efd837dfa245e328968 (diff)
parent47af5419b13688893a38c34fd55f4edf58dad6b2 (diff)
Merge branch 'from/develop/tusooa/emoji-picker-lazy' into 'develop'
Remove lozad, use virtual scrolling See merge request pleroma/pleroma-fe!1717
Diffstat (limited to 'src/components/emoji_picker/emoji_picker.vue')
-rw-r--r--src/components/emoji_picker/emoji_picker.vue77
1 files changed, 44 insertions, 33 deletions
diff --git a/src/components/emoji_picker/emoji_picker.vue b/src/components/emoji_picker/emoji_picker.vue
index ff56d637..453ecdfc 100644
--- a/src/components/emoji_picker/emoji_picker.vue
+++ b/src/components/emoji_picker/emoji_picker.vue
@@ -74,45 +74,56 @@
@input="$event.target.composing = false"
>
</div>
- <div
+ <DynamicScroller
ref="emoji-groups"
class="emoji-groups"
:class="groupsScrolledClass"
- @scroll="onScroll"
+ :min-item-size="minItemSize"
+ :items="emojiItems"
+ :emit-update="true"
+ @update="onScroll"
+ @visible="recalculateItemPerRow"
>
- <div
- v-for="group in filteredEmojiGroups"
- :key="group.id"
- class="emoji-group"
- >
- <h6
+ <template #default="{ item: group, index, active }">
+ <DynamicScrollerItem
:ref="setGroupRef('group-' + group.id)"
- class="emoji-group-title"
- >
- {{ group.text }}
- </h6>
- <span
- v-for="emoji in group.emojis"
- :key="group.id + emoji.displayText"
- :title="maybeLocalizedEmojiName(emoji)"
- class="emoji-item"
- @click.stop.prevent="onEmoji(emoji)"
+ :item="group"
+ :active="active"
+ :data-index="index"
+ :size-dependencies="[group.emojis.length]"
>
- <span
- v-if="!emoji.imageUrl"
- class="emoji-picker-emoji -unicode"
- >{{ emoji.replacement }}</span>
- <still-image
- v-else
- :ref="setEmojiRef(group.id + emoji.displayText)"
- class="emoji-picker-emoji -custom"
- :data-src="emoji.imageUrl"
- :data-emoji-name="group.id + emoji.displayText"
- />
- </span>
- <span :ref="setGroupRef('group-end-' + group.id)" />
- </div>
- </div>
+ <div
+ class="emoji-group"
+ >
+ <h6
+ v-if="group.isFirstRow"
+ class="emoji-group-title"
+ >
+ {{ group.text }}
+ </h6>
+ <span
+ v-for="emoji in group.emojis"
+ :key="group.id + emoji.displayText"
+ :title="maybeLocalizedEmojiName(emoji)"
+ class="emoji-item"
+ @click.stop.prevent="onEmoji(emoji)"
+ >
+ <span
+ v-if="!emoji.imageUrl"
+ class="emoji-picker-emoji -unicode"
+ >{{ emoji.replacement }}</span>
+ <still-image
+ v-else
+ class="emoji-picker-emoji -custom"
+ loading="lazy"
+ :src="emoji.imageUrl"
+ :data-emoji-name="group.id + emoji.displayText"
+ />
+ </span>
+ </div>
+ </DynamicScrollerItem>
+ </template>
+ </DynamicScroller>
<div class="keep-open">
<Checkbox v-model="keepOpen">
{{ $t('emoji.keep_open') }}