aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShpuld Shpuldson <shpuld@shpposter.club>2019-11-15 08:39:21 +0200
committerShpuld Shpuldson <shpuld@shpposter.club>2019-11-15 08:39:21 +0200
commitd0075026290c90d8406c7ac81413259a8ae58ec7 (patch)
tree171b3a6ccf21bd88e78b5a8344b602b249b61077 /src
parent1f42283b8dda0308480de6292995221e631c3989 (diff)
add fetching for emoji reactions, draft design
Diffstat (limited to 'src')
-rw-r--r--src/components/conversation/conversation.js1
-rw-r--r--src/components/status/status.js6
-rw-r--r--src/components/status/status.vue28
-rw-r--r--src/modules/statuses.js14
-rw-r--r--src/services/api/api.service.js6
-rw-r--r--src/services/backend_interactor_service/backend_interactor_service.js2
6 files changed, 56 insertions, 1 deletions
diff --git a/src/components/conversation/conversation.js b/src/components/conversation/conversation.js
index 72ee9c39..715804ff 100644
--- a/src/components/conversation/conversation.js
+++ b/src/components/conversation/conversation.js
@@ -149,6 +149,7 @@ const conversation = {
if (!id) return
this.highlight = id
this.$store.dispatch('fetchFavsAndRepeats', id)
+ this.$store.dispatch('fetchEmojiReactions', id)
},
getHighlight () {
return this.isExpanded ? this.highlight : null
diff --git a/src/components/status/status.js b/src/components/status/status.js
index 4fbd5ac3..8268e615 100644
--- a/src/components/status/status.js
+++ b/src/components/status/status.js
@@ -278,6 +278,12 @@ const Status = {
hidePostStats () {
return this.mergedConfig.hidePostStats
},
+ emojiReactions () {
+ return {
+ '🤔': [{ 'id': 'xyz..' }, { 'id': 'zyx...' }],
+ '🐻': [{ 'id': 'abc...' }]
+ }
+ },
...mapGetters(['mergedConfig'])
},
components: {
diff --git a/src/components/status/status.vue b/src/components/status/status.vue
index 65778b2e..aae58a5e 100644
--- a/src/components/status/status.vue
+++ b/src/components/status/status.vue
@@ -354,6 +354,17 @@
</div>
</transition>
+ <div class="emoji-reactions">
+ <button
+ class="emoji-reaction btn btn-default"
+ v-for="(users, emoji) in emojiReactions"
+ :key="emoji"
+ >
+ <span>{{users.length}}</span>
+ <span>{{emoji}}</span>
+ </button>
+ </div>
+
<div
v-if="!noHeading && !isPreview"
class="status-actions media-body"
@@ -771,6 +782,23 @@ $status-margin: 0.75em;
}
}
+.emoji-reactions {
+ display: flex;
+ margin-top: 0.75em;
+}
+
+.emoji-reaction {
+ padding: 0 0.5em;
+ margin-right: 0.5em;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+
+ :first-child {
+ margin-right: 0.25em;
+ }
+}
+
.button-icon.icon-reply {
&:not(.button-icon-disabled):hover,
&.button-icon-active {
diff --git a/src/modules/statuses.js b/src/modules/statuses.js
index f11ffdcd..c285b452 100644
--- a/src/modules/statuses.js
+++ b/src/modules/statuses.js
@@ -1,4 +1,4 @@
-import { remove, slice, each, findIndex, find, maxBy, minBy, merge, first, last, isArray, omitBy } from 'lodash'
+import { remove, slice, each, findIndex, find, maxBy, minBy, merge, first, last, isArray, omitBy, findKey } from 'lodash'
import { set } from 'vue'
import apiService from '../services/api/api.service.js'
// import parse from '../services/status_parser/status_parser.js'
@@ -510,6 +510,11 @@ export const mutations = {
newStatus.fave_num = newStatus.favoritedBy.length
newStatus.favorited = !!newStatus.favoritedBy.find(({ id }) => currentUser.id === id)
},
+ addEmojiReactions (state, { id, emojiReactions, currentUser }) {
+ const status = state.allStatusesObject[id]
+ status.emojiReactions = emojiReactions
+ status.reactedWithEmoji = findKey(emojiReactions, { id: currentUser.id })
+ },
updateStatusWithPoll (state, { id, poll }) {
const status = state.allStatusesObject[id]
status.poll = poll
@@ -611,6 +616,13 @@ const statuses = {
commit('addRepeats', { id, rebloggedByUsers, currentUser: rootState.users.currentUser })
})
},
+ fetchEmojiReactions ({ rootState, commit }, id) {
+ rootState.api.backendInteractor.fetchEmojiReactions(id).then(
+ emojiReactions => {
+ commit('addEmojiReactions', { id, emojiReactions, currentUser: rootState.users.currentUser })
+ }
+ )
+ },
fetchFavs ({ rootState, commit }, id) {
rootState.api.backendInteractor.fetchFavoritedByUsers(id)
.then(favoritedByUsers => commit('addFavs', { id, favoritedByUsers, currentUser: rootState.users.currentUser }))
diff --git a/src/services/api/api.service.js b/src/services/api/api.service.js
index 8f5eb416..7ef4b74a 100644
--- a/src/services/api/api.service.js
+++ b/src/services/api/api.service.js
@@ -71,6 +71,7 @@ const MASTODON_MUTE_CONVERSATION = id => `/api/v1/statuses/${id}/mute`
const MASTODON_UNMUTE_CONVERSATION = id => `/api/v1/statuses/${id}/unmute`
const MASTODON_SEARCH_2 = `/api/v2/search`
const MASTODON_USER_SEARCH_URL = '/api/v1/accounts/search'
+const PLEROMA_EMOJI_REACTIONS_URL = id => `/api/v1/pleroma/statuses/${id}/emoji_reactions_by`
const oldfetch = window.fetch
@@ -864,6 +865,10 @@ const fetchRebloggedByUsers = ({ id }) => {
return promisedRequest({ url: MASTODON_STATUS_REBLOGGEDBY_URL(id) }).then((users) => users.map(parseUser))
}
+const fetchEmojiReactions = ({ id }) => {
+ return promisedRequest({ url: PLEROMA_EMOJI_REACTIONS_URL(id) })
+}
+
const reportUser = ({ credentials, userId, statusIds, comment, forward }) => {
return promisedRequest({
url: MASTODON_REPORT_USER_URL,
@@ -997,6 +1002,7 @@ const apiService = {
fetchPoll,
fetchFavoritedByUsers,
fetchRebloggedByUsers,
+ fetchEmojiReactions,
reportUser,
updateNotificationSettings,
search2,
diff --git a/src/services/backend_interactor_service/backend_interactor_service.js b/src/services/backend_interactor_service/backend_interactor_service.js
index d6617276..52234fcc 100644
--- a/src/services/backend_interactor_service/backend_interactor_service.js
+++ b/src/services/backend_interactor_service/backend_interactor_service.js
@@ -143,6 +143,7 @@ const backendInteractorService = credentials => {
const fetchFavoritedByUsers = (id) => apiService.fetchFavoritedByUsers({ id })
const fetchRebloggedByUsers = (id) => apiService.fetchRebloggedByUsers({ id })
+ const fetchEmojiReactions = (id) => apiService.fetchEmojiReactions({ id })
const reportUser = (params) => apiService.reportUser({ credentials, ...params })
const favorite = (id) => apiService.favorite({ id, credentials })
@@ -210,6 +211,7 @@ const backendInteractorService = credentials => {
fetchPoll,
fetchFavoritedByUsers,
fetchRebloggedByUsers,
+ fetchEmojiReactions,
reportUser,
favorite,
unfavorite,