diff options
Diffstat (limited to 'src/components/react_button')
| -rw-r--r-- | src/components/react_button/react_button.js | 30 | ||||
| -rw-r--r-- | src/components/react_button/react_button.vue | 36 |
2 files changed, 32 insertions, 34 deletions
diff --git a/src/components/react_button/react_button.js b/src/components/react_button/react_button.js index 6fb2a780..19949563 100644 --- a/src/components/react_button/react_button.js +++ b/src/components/react_button/react_button.js @@ -1,29 +1,25 @@ +import Popover from '../popover/popover.vue' import { mapGetters } from 'vuex' const ReactButton = { props: ['status', 'loggedIn'], data () { return { - showTooltip: false, - filterWord: '', - popperOptions: { - modifiers: { - preventOverflow: { padding: { top: 50 }, boundariesElement: 'viewport' } - } - } + filterWord: '' } }, + components: { + Popover + }, methods: { - openReactionSelect () { - this.showTooltip = true - this.filterWord = '' - }, - closeReactionSelect () { - this.showTooltip = false - }, - addReaction (event, emoji) { - this.$store.dispatch('reactWithEmoji', { id: this.status.id, emoji }) - this.closeReactionSelect() + addReaction (event, emoji, close) { + const existingReaction = this.status.emoji_reactions.find(r => r.name === emoji) + if (existingReaction && existingReaction.me) { + this.$store.dispatch('unreactWithEmoji', { id: this.status.id, emoji }) + } else { + this.$store.dispatch('reactWithEmoji', { id: this.status.id, emoji }) + } + close() } }, computed: { diff --git a/src/components/react_button/react_button.vue b/src/components/react_button/react_button.vue index c925dd71..ab4b4fcd 100644 --- a/src/components/react_button/react_button.vue +++ b/src/components/react_button/react_button.vue @@ -1,13 +1,14 @@ <template> - <v-popover - :popper-options="popperOptions" - :open="showTooltip" - trigger="manual" + <Popover + trigger="click" placement="top" + :offset="{ y: 5 }" class="react-button-popover" - @hide="closeReactionSelect" > - <div slot="popover"> + <div + slot="content" + slot-scope="{close}" + > <div class="reaction-picker-filter"> <input v-model="filterWord" @@ -19,7 +20,7 @@ v-for="emoji in commonEmojis" :key="emoji" class="emoji-button" - @click="addReaction($event, emoji)" + @click="addReaction($event, emoji, close)" > {{ emoji }} </span> @@ -28,23 +29,20 @@ v-for="(emoji, key) in emojis" :key="key" class="emoji-button" - @click="addReaction($event, emoji.replacement)" + @click="addReaction($event, emoji.replacement, close)" > {{ emoji.replacement }} </span> <div class="reaction-bottom-fader" /> </div> </div> - <div + <i v-if="loggedIn" - @click.prevent="openReactionSelect" - > - <i - class="icon-smile button-icon add-reaction-button" - :title="$t('tool_tip.add_reaction')" - /> - </div> - </v-popover> + slot="trigger" + class="icon-smile button-icon add-reaction-button" + :title="$t('tool_tip.add_reaction')" + /> + </Popover> </template> <script src="./react_button.js" ></script> @@ -54,6 +52,10 @@ .reaction-picker-filter { padding: 0.5em; + display: flex; + input { + flex: 1; + } } .reaction-picker-divider { |
