#388: get follow request on a real-time basis

This commit is contained in:
dave 2019-02-27 14:38:10 -05:00
parent 058238c3c6
commit 7c6446a9de
7 changed files with 42 additions and 13 deletions

View File

@ -4,19 +4,10 @@ const FollowRequests = {
components: { components: {
UserCard UserCard
}, },
created () {
this.updateRequests()
},
computed: { computed: {
requests () { requests () {
return this.$store.state.api.followRequests return this.$store.state.api.followRequests
} }
},
methods: {
updateRequests () {
this.$store.state.api.backendInteractor.fetchFollowRequests()
.then((requests) => { this.$store.commit('setFollowRequests', requests) })
}
} }
} }

View File

@ -1,10 +1,23 @@
import requestFetcher from '../../services/notifications_fetcher/request_fetcher.service.js'
const NavPanel = { const NavPanel = {
created () {
if (this.currentUser && this.currentUser.locked) {
const store = this.$store
const credentials = store.state.users.currentUser.credentials
requestFetcher.startFetching({ store, credentials })
}
},
computed: { computed: {
currentUser () { currentUser () {
return this.$store.state.users.currentUser return this.$store.state.users.currentUser
}, },
chat () { chat () {
return this.$store.state.chat.channel return this.$store.state.chat.channel
},
followRequestCount () {
return this.$store.state.api.followRequests.length
} }
} }
} }

View File

@ -20,8 +20,8 @@
<li v-if='currentUser && currentUser.locked'> <li v-if='currentUser && currentUser.locked'>
<router-link :to="{ name: 'friend-requests' }"> <router-link :to="{ name: 'friend-requests' }">
{{ $t("nav.friend_requests")}} {{ $t("nav.friend_requests")}}
<span v-if='currentUser.follow_request_count > 0' class="badge follow-request-count"> <span v-if='followRequestCount > 0' class="badge follow-request-count">
{{currentUser.follow_request_count}} {{followRequestCount}}
</span> </span>
</router-link> </router-link>
</li> </li>

View File

@ -1,5 +1,6 @@
import Notification from '../notification/notification.vue' import Notification from '../notification/notification.vue'
import notificationsFetcher from '../../services/notifications_fetcher/notifications_fetcher.service.js' import notificationsFetcher from '../../services/notifications_fetcher/notifications_fetcher.service.js'
import { import {
notificationsFromStore, notificationsFromStore,
visibleNotificationsFromStore, visibleNotificationsFromStore,

View File

@ -32,6 +32,9 @@ const SideDrawer = {
}, },
sitename () { sitename () {
return this.$store.state.instance.name return this.$store.state.instance.name
},
followRequestCount () {
return this.$store.state.api.followRequests.length
} }
}, },
methods: { methods: {

View File

@ -45,8 +45,8 @@
<li v-if="currentUser && currentUser.locked" @click="toggleDrawer"> <li v-if="currentUser && currentUser.locked" @click="toggleDrawer">
<router-link to='/friend-requests'> <router-link to='/friend-requests'>
{{ $t("nav.friend_requests") }} {{ $t("nav.friend_requests") }}
<span v-if='currentUser.follow_request_count > 0' class="badge follow-request-count"> <span v-if='followRequestCount > 0' class="badge follow-request-count">
{{currentUser.follow_request_count}} {{followRequestCount}}
</span> </span>
</router-link> </router-link>

View File

@ -0,0 +1,21 @@
import apiService from '../api/api.service.js'
const fetchAndUpdate = ({ store, credentials }) => {
return apiService.fetchFollowRequests({ credentials })
.then((requests) => {
store.commit('setFollowRequests', requests)
}, () => {})
.catch(() => {})
}
const startFetching = ({credentials, store}) => {
fetchAndUpdate({ credentials, store })
const boundFetchAndUpdate = () => fetchAndUpdate({ credentials, store })
return setInterval(boundFetchAndUpdate, 10000)
}
const requestFetcher = {
startFetching
}
export default requestFetcher