diff options
| author | Shpuld Shpuldson <shpuld@shpposter.club> | 2020-01-13 23:34:39 +0200 |
|---|---|---|
| committer | Shpuld Shpuldson <shpuld@shpposter.club> | 2020-01-13 23:34:39 +0200 |
| commit | 33abbed5a1e1d1cf99d21d481b2a22481d7533b2 (patch) | |
| tree | 2f1c335fba4aac6e7d4f3a903a8797df0075d822 /src/components/react_button | |
| parent | de945ba3e9470b28dd010fb32f658b42053f19d3 (diff) | |
usable-but-buggy: picker, adding/removing reaction on click, search, styles
Diffstat (limited to 'src/components/react_button')
| -rw-r--r-- | src/components/react_button/react_button.js | 25 | ||||
| -rw-r--r-- | src/components/react_button/react_button.vue | 37 |
2 files changed, 45 insertions, 17 deletions
diff --git a/src/components/react_button/react_button.js b/src/components/react_button/react_button.js index d1d15d93..76a49305 100644 --- a/src/components/react_button/react_button.js +++ b/src/components/react_button/react_button.js @@ -6,6 +6,7 @@ const ReactButton = { return { animated: false, showTooltip: false, + filterWord: '', popperOptions: { modifiers: { preventOverflow: { padding: { top: 50 }, boundariesElement: 'viewport' } @@ -14,27 +15,25 @@ const ReactButton = { } }, methods: { - openReactionSelect () { - console.log('test') - this.showTooltip = true + toggleReactionSelect () { + this.showTooltip = !this.showTooltip }, closeReactionSelect () { this.showTooltip = false }, - favorite () { - if (!this.status.favorited) { - this.$store.dispatch('favorite', { id: this.status.id }) - } else { - this.$store.dispatch('unfavorite', { id: this.status.id }) - } - this.animated = true - setTimeout(() => { - this.animated = false - }, 500) + addReaction (event, emoji) { + this.$store.dispatch('reactWithEmoji', { id: this.status.id, emoji }) + this.closeReactionSelect() } }, computed: { + commonEmojis () { + return ['💖', '😠', '👀', '😂', '🔥'] + }, emojis () { + if (this.filterWord !== '') { + return this.$store.state.instance.emoji.filter(emoji => emoji.displayText.includes(this.filterWord)) + } return this.$store.state.instance.emoji || [] }, classes () { diff --git a/src/components/react_button/react_button.vue b/src/components/react_button/react_button.vue index 93638770..f7015316 100644 --- a/src/components/react_button/react_button.vue +++ b/src/components/react_button/react_button.vue @@ -5,21 +5,37 @@ trigger="manual" placement="top" class="react-button-popover" - @close-group="closeReactionSelect" + @hide="closeReactionSelect" > <div slot="popover"> + <div class="reaction-picker-filter"> + <input v-model="filterWord" placeholder="Search..."> + </div> <div class="reaction-picker"> <span + v-for="emoji in commonEmojis" + :key="emoji" + class="emoji-reaction-button" + @click="addReaction($event, emoji)" + > + {{ emoji }} + </span> + <div class="reaction-picker-divider" /> + <span v-for="(emoji, key) in emojis" :key="key" class="emoji-reaction-button" + @click="addReaction($event, emoji.replacement)" > {{ emoji.replacement }} </span> <div class="reaction-bottom-fader" /> </div> </div> - <div @click.prevent="openReactionSelect" v-if="loggedIn"> + <div + v-if="loggedIn" + @click.prevent="toggleReactionSelect" + > <i :class="classes" class="button-icon favorite-button fav-active" @@ -35,15 +51,28 @@ <style lang="scss"> @import '../../_variables.scss'; +.reaction-picker-filter { + padding: 0.5em; +} + +.reaction-picker-divider { + height: 1px; + width: 100%; + margin: 0.4em; + background-color: var(--border, $fallback--border); +} + .reaction-picker { width: 10em; - height: 8em; + height: 9em; font-size: 1.5em; overflow-y: scroll; display: flex; flex-wrap: wrap; padding: 0.5em; - text-align:center; + text-align: center; + align-content: flex-start; + user-select: none; mask: linear-gradient(to top, white 0, transparent 100%) bottom no-repeat, linear-gradient(to bottom, white 0, transparent 100%) top no-repeat, |
