logo

pleroma-fe

My custom branche(s) on git.pleroma.social/pleroma/pleroma-fe git clone https://hacktivis.me/git/pleroma-fe.git
commit: 314a4474f6475435cfac7e5e02862015a9455660
parent afd7f5fabe58dc08a5a6e35e923e2e8fd71926dc
Author: tusooa <tusooa@kazv.moe>
Date:   Mon,  2 Jan 2023 12:40:03 -0500

Fix header indicator

Diffstat:

Msrc/components/emoji_picker/emoji_picker.js28++++++++++++++++++++++++----
Msrc/components/emoji_picker/emoji_picker.vue2++
2 files changed, 26 insertions(+), 4 deletions(-)

diff --git a/src/components/emoji_picker/emoji_picker.js b/src/components/emoji_picker/emoji_picker.js @@ -81,6 +81,13 @@ const filterByKeyword = (list, keyword = '', languages, nameLocalizer) => { return orderedEmojiList.flat() } +const getOffset = (elem) => { + const style = elem.style.transform + const res = /translateY\((\d+)px\)/.exec(style) + if (!res) { return 0 } + return res[1] +} + const EmojiPicker = { props: { enableStickerPicker: { @@ -144,12 +151,25 @@ const EmojiPicker = { this.$emit('emoji', { insertion: value, keepOpen: this.keepOpen }) }, onScroll (startIndex, endIndex, visibleStartIndex, visibleEndIndex) { + console.log('onScroll', startIndex, endIndex, visibleStartIndex, visibleEndIndex) const current = this.filteredEmojiGroups[visibleStartIndex].id - this.scrolledGroup(current) + const target = this.$refs['emoji-groups'].$el + this.scrolledGroup(target, current, visibleStartIndex, visibleEndIndex) }, - scrolledGroup (groupId) { - this.activeGroup = groupId - this.scrollHeader() + scrolledGroup (target, groupId, start, end) { + const top = target.scrollTop + 5 + this.$nextTick(() => { + this.filteredEmojiGroups.slice(start, end + 1).forEach(group => { + const ref = this.groupRefs['group-' + group.id] + if (!ref) { return } + const elem = ref.$el.parentElement + if (!elem) { return } + if (elem && getOffset(elem) <= top) { + this.activeGroup = group.id + } + }) + this.scrollHeader() + }) }, scrollHeader () { // Scroll the active tab's header into view diff --git a/src/components/emoji_picker/emoji_picker.vue b/src/components/emoji_picker/emoji_picker.vue @@ -80,10 +80,12 @@ :class="groupsScrolledClass" :min-item-size="minItemSize" :items="filteredEmojiGroups" + :emit-update="true" @update="onScroll" > <template #default="{ item: group, index, active }"> <DynamicScrollerItem + :ref="setGroupRef('group-' + group.id)" :item="group" :active="active" :data-index="index"