forked from AkkomaGang/akkoma-fe
Merge branch 'fix/notification-bugs' into 'develop'
#474 Fix notification bugs Closes #474 See merge request pleroma/pleroma-fe!728
This commit is contained in:
commit
1e9ddcb0da
9 changed files with 53 additions and 48 deletions
|
@ -10,13 +10,6 @@ const Notifications = {
|
||||||
props: [
|
props: [
|
||||||
'noHeading'
|
'noHeading'
|
||||||
],
|
],
|
||||||
created () {
|
|
||||||
const store = this.$store
|
|
||||||
const credentials = store.state.users.currentUser.credentials
|
|
||||||
|
|
||||||
const fetcherId = notificationsFetcher.startFetching({ store, credentials })
|
|
||||||
this.$store.commit('setNotificationFetcher', { fetcherId })
|
|
||||||
},
|
|
||||||
data () {
|
data () {
|
||||||
return {
|
return {
|
||||||
bottomedOut: false
|
bottomedOut: false
|
||||||
|
|
|
@ -7,7 +7,7 @@ const PublicAndExternalTimeline = {
|
||||||
timeline () { return this.$store.state.statuses.timelines.publicAndExternal }
|
timeline () { return this.$store.state.statuses.timelines.publicAndExternal }
|
||||||
},
|
},
|
||||||
created () {
|
created () {
|
||||||
this.$store.dispatch('startFetching', { timeline: 'publicAndExternal' })
|
this.$store.dispatch('startFetchingTimeline', { timeline: 'publicAndExternal' })
|
||||||
},
|
},
|
||||||
destroyed () {
|
destroyed () {
|
||||||
this.$store.dispatch('stopFetching', 'publicAndExternal')
|
this.$store.dispatch('stopFetching', 'publicAndExternal')
|
||||||
|
|
|
@ -7,7 +7,7 @@ const PublicTimeline = {
|
||||||
timeline () { return this.$store.state.statuses.timelines.public }
|
timeline () { return this.$store.state.statuses.timelines.public }
|
||||||
},
|
},
|
||||||
created () {
|
created () {
|
||||||
this.$store.dispatch('startFetching', { timeline: 'public' })
|
this.$store.dispatch('startFetchingTimeline', { timeline: 'public' })
|
||||||
},
|
},
|
||||||
destroyed () {
|
destroyed () {
|
||||||
this.$store.dispatch('stopFetching', 'public')
|
this.$store.dispatch('stopFetching', 'public')
|
||||||
|
|
|
@ -3,7 +3,7 @@ import Timeline from '../timeline/timeline.vue'
|
||||||
const TagTimeline = {
|
const TagTimeline = {
|
||||||
created () {
|
created () {
|
||||||
this.$store.commit('clearTimeline', { timeline: 'tag' })
|
this.$store.commit('clearTimeline', { timeline: 'tag' })
|
||||||
this.$store.dispatch('startFetching', { timeline: 'tag', tag: this.tag })
|
this.$store.dispatch('startFetchingTimeline', { timeline: 'tag', tag: this.tag })
|
||||||
},
|
},
|
||||||
components: {
|
components: {
|
||||||
Timeline
|
Timeline
|
||||||
|
@ -15,7 +15,7 @@ const TagTimeline = {
|
||||||
watch: {
|
watch: {
|
||||||
tag () {
|
tag () {
|
||||||
this.$store.commit('clearTimeline', { timeline: 'tag' })
|
this.$store.commit('clearTimeline', { timeline: 'tag' })
|
||||||
this.$store.dispatch('startFetching', { timeline: 'tag', tag: this.tag })
|
this.$store.dispatch('startFetchingTimeline', { timeline: 'tag', tag: this.tag })
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
destroyed () {
|
destroyed () {
|
||||||
|
|
|
@ -91,7 +91,7 @@ const UserProfile = {
|
||||||
methods: {
|
methods: {
|
||||||
startFetchFavorites () {
|
startFetchFavorites () {
|
||||||
if (this.isUs) {
|
if (this.isUs) {
|
||||||
this.$store.dispatch('startFetching', { timeline: 'favorites', userId: this.userId })
|
this.$store.dispatch('startFetchingTimeline', { timeline: 'favorites', userId: this.userId })
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
fetchUserId () {
|
fetchUserId () {
|
||||||
|
@ -119,8 +119,8 @@ const UserProfile = {
|
||||||
},
|
},
|
||||||
startUp () {
|
startUp () {
|
||||||
if (this.userId) {
|
if (this.userId) {
|
||||||
this.$store.dispatch('startFetching', { timeline: 'user', userId: this.userId })
|
this.$store.dispatch('startFetchingTimeline', { timeline: 'user', userId: this.userId })
|
||||||
this.$store.dispatch('startFetching', { timeline: 'media', userId: this.userId })
|
this.$store.dispatch('startFetchingTimeline', { timeline: 'media', userId: this.userId })
|
||||||
this.startFetchFavorites()
|
this.startFetchFavorites()
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
@ -13,11 +13,11 @@ const api = {
|
||||||
setBackendInteractor (state, backendInteractor) {
|
setBackendInteractor (state, backendInteractor) {
|
||||||
state.backendInteractor = backendInteractor
|
state.backendInteractor = backendInteractor
|
||||||
},
|
},
|
||||||
addFetcher (state, {timeline, fetcher}) {
|
addFetcher (state, { fetcherName, fetcher }) {
|
||||||
state.fetchers[timeline] = fetcher
|
state.fetchers[fetcherName] = fetcher
|
||||||
},
|
},
|
||||||
removeFetcher (state, {timeline}) {
|
removeFetcher (state, { fetcherName }) {
|
||||||
delete state.fetchers[timeline]
|
delete state.fetchers[fetcherName]
|
||||||
},
|
},
|
||||||
setWsToken (state, token) {
|
setWsToken (state, token) {
|
||||||
state.wsToken = token
|
state.wsToken = token
|
||||||
|
@ -33,17 +33,24 @@ const api = {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
actions: {
|
actions: {
|
||||||
startFetching (store, {timeline = 'friends', tag = false, userId = false}) {
|
startFetchingTimeline (store, { timeline = 'friends', tag = false, userId = false }) {
|
||||||
// Don't start fetching if we already are.
|
// Don't start fetching if we already are.
|
||||||
if (store.state.fetchers[timeline]) return
|
if (store.state.fetchers[timeline]) return
|
||||||
|
|
||||||
const fetcher = store.state.backendInteractor.startFetching({ timeline, store, userId, tag })
|
const fetcher = store.state.backendInteractor.startFetchingTimeline({ timeline, store, userId, tag })
|
||||||
store.commit('addFetcher', { timeline, fetcher })
|
store.commit('addFetcher', { fetcherName: timeline, fetcher })
|
||||||
},
|
},
|
||||||
stopFetching (store, timeline) {
|
startFetchingNotifications (store) {
|
||||||
const fetcher = store.state.fetchers[timeline]
|
// Don't start fetching if we already are.
|
||||||
|
if (store.state.fetchers['notifications']) return
|
||||||
|
|
||||||
|
const fetcher = store.state.backendInteractor.startFetchingNotifications({ store })
|
||||||
|
store.commit('addFetcher', { fetcherName: 'notifications', fetcher })
|
||||||
|
},
|
||||||
|
stopFetching (store, fetcherName) {
|
||||||
|
const fetcher = store.state.fetchers[fetcherName]
|
||||||
window.clearInterval(fetcher)
|
window.clearInterval(fetcher)
|
||||||
store.commit('removeFetcher', {timeline})
|
store.commit('removeFetcher', { fetcherName })
|
||||||
},
|
},
|
||||||
setWsToken (store, token) {
|
setWsToken (store, token) {
|
||||||
store.commit('setWsToken', token)
|
store.commit('setWsToken', token)
|
||||||
|
|
|
@ -20,20 +20,21 @@ const emptyTl = (userId = 0) => ({
|
||||||
flushMarker: 0
|
flushMarker: 0
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const emptyNotifications = () => ({
|
||||||
|
desktopNotificationSilence: true,
|
||||||
|
maxId: 0,
|
||||||
|
minId: Number.POSITIVE_INFINITY,
|
||||||
|
data: [],
|
||||||
|
idStore: {},
|
||||||
|
loading: false,
|
||||||
|
error: false
|
||||||
|
})
|
||||||
|
|
||||||
export const defaultState = () => ({
|
export const defaultState = () => ({
|
||||||
allStatuses: [],
|
allStatuses: [],
|
||||||
allStatusesObject: {},
|
allStatusesObject: {},
|
||||||
maxId: 0,
|
maxId: 0,
|
||||||
notifications: {
|
notifications: emptyNotifications(),
|
||||||
desktopNotificationSilence: true,
|
|
||||||
maxId: 0,
|
|
||||||
minId: Number.POSITIVE_INFINITY,
|
|
||||||
data: [],
|
|
||||||
idStore: {},
|
|
||||||
loading: false,
|
|
||||||
error: false,
|
|
||||||
fetcherId: null
|
|
||||||
},
|
|
||||||
favorites: new Set(),
|
favorites: new Set(),
|
||||||
error: false,
|
error: false,
|
||||||
timelines: {
|
timelines: {
|
||||||
|
@ -340,9 +341,6 @@ export const mutations = {
|
||||||
oldTimeline.visibleStatusesObject = {}
|
oldTimeline.visibleStatusesObject = {}
|
||||||
each(oldTimeline.visibleStatuses, (status) => { oldTimeline.visibleStatusesObject[status.id] = status })
|
each(oldTimeline.visibleStatuses, (status) => { oldTimeline.visibleStatusesObject[status.id] = status })
|
||||||
},
|
},
|
||||||
setNotificationFetcher (state, { fetcherId }) {
|
|
||||||
state.notifications.fetcherId = fetcherId
|
|
||||||
},
|
|
||||||
resetStatuses (state) {
|
resetStatuses (state) {
|
||||||
const emptyState = defaultState()
|
const emptyState = defaultState()
|
||||||
Object.entries(emptyState).forEach(([key, value]) => {
|
Object.entries(emptyState).forEach(([key, value]) => {
|
||||||
|
@ -352,6 +350,9 @@ export const mutations = {
|
||||||
clearTimeline (state, { timeline }) {
|
clearTimeline (state, { timeline }) {
|
||||||
state.timelines[timeline] = emptyTl(state.timelines[timeline].userId)
|
state.timelines[timeline] = emptyTl(state.timelines[timeline].userId)
|
||||||
},
|
},
|
||||||
|
clearNotifications (state) {
|
||||||
|
state.notifications = emptyNotifications()
|
||||||
|
},
|
||||||
setFavorited (state, { status, value }) {
|
setFavorited (state, { status, value }) {
|
||||||
const newStatus = state.allStatusesObject[status.id]
|
const newStatus = state.allStatusesObject[status.id]
|
||||||
newStatus.favorited = value
|
newStatus.favorited = value
|
||||||
|
@ -435,12 +436,6 @@ const statuses = {
|
||||||
setNotificationsSilence ({ rootState, commit }, { value }) {
|
setNotificationsSilence ({ rootState, commit }, { value }) {
|
||||||
commit('setNotificationsSilence', { value })
|
commit('setNotificationsSilence', { value })
|
||||||
},
|
},
|
||||||
stopFetchingNotifications ({ rootState, commit }) {
|
|
||||||
if (rootState.statuses.notifications.fetcherId) {
|
|
||||||
window.clearInterval(rootState.statuses.notifications.fetcherId)
|
|
||||||
}
|
|
||||||
commit('setNotificationFetcher', { fetcherId: null })
|
|
||||||
},
|
|
||||||
deleteStatus ({ rootState, commit }, status) {
|
deleteStatus ({ rootState, commit }, status) {
|
||||||
commit('setDeleted', { status })
|
commit('setDeleted', { status })
|
||||||
apiService.deleteStatus({ id: status.id, credentials: rootState.users.currentUser.credentials })
|
apiService.deleteStatus({ id: status.id, credentials: rootState.users.currentUser.credentials })
|
||||||
|
|
|
@ -353,7 +353,8 @@ const users = {
|
||||||
store.commit('setToken', false)
|
store.commit('setToken', false)
|
||||||
store.dispatch('stopFetching', 'friends')
|
store.dispatch('stopFetching', 'friends')
|
||||||
store.commit('setBackendInteractor', backendInteractorService())
|
store.commit('setBackendInteractor', backendInteractorService())
|
||||||
store.dispatch('stopFetchingNotifications')
|
store.dispatch('stopFetching', 'notifications')
|
||||||
|
store.commit('clearNotifications')
|
||||||
store.commit('resetStatuses')
|
store.commit('resetStatuses')
|
||||||
},
|
},
|
||||||
loginUser (store, accessToken) {
|
loginUser (store, accessToken) {
|
||||||
|
@ -385,7 +386,10 @@ const users = {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Start getting fresh posts.
|
// Start getting fresh posts.
|
||||||
store.dispatch('startFetching', { timeline: 'friends' })
|
store.dispatch('startFetchingTimeline', { timeline: 'friends' })
|
||||||
|
|
||||||
|
// Start fetching notifications
|
||||||
|
store.dispatch('startFetchingNotifications')
|
||||||
|
|
||||||
// Get user mutes
|
// Get user mutes
|
||||||
store.dispatch('fetchMutes')
|
store.dispatch('fetchMutes')
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import apiService from '../api/api.service.js'
|
import apiService from '../api/api.service.js'
|
||||||
import timelineFetcherService from '../timeline_fetcher/timeline_fetcher.service.js'
|
import timelineFetcherService from '../timeline_fetcher/timeline_fetcher.service.js'
|
||||||
|
import notificationsFetcher from '../notifications_fetcher/notifications_fetcher.service.js'
|
||||||
|
|
||||||
const backendInteractorService = (credentials) => {
|
const backendInteractorService = (credentials) => {
|
||||||
const fetchStatus = ({id}) => {
|
const fetchStatus = ({id}) => {
|
||||||
|
@ -58,8 +59,12 @@ const backendInteractorService = (credentials) => {
|
||||||
return apiService.denyUser({credentials, id})
|
return apiService.denyUser({credentials, id})
|
||||||
}
|
}
|
||||||
|
|
||||||
const startFetching = ({timeline, store, userId = false, tag}) => {
|
const startFetchingTimeline = ({ timeline, store, userId = false, tag }) => {
|
||||||
return timelineFetcherService.startFetching({timeline, store, credentials, userId, tag})
|
return timelineFetcherService.startFetching({ timeline, store, credentials, userId, tag })
|
||||||
|
}
|
||||||
|
|
||||||
|
const startFetchingNotifications = ({ store }) => {
|
||||||
|
return notificationsFetcher.startFetching({ store, credentials })
|
||||||
}
|
}
|
||||||
|
|
||||||
const tagUser = ({screen_name}, tag) => {
|
const tagUser = ({screen_name}, tag) => {
|
||||||
|
@ -121,7 +126,8 @@ const backendInteractorService = (credentials) => {
|
||||||
fetchUserRelationship,
|
fetchUserRelationship,
|
||||||
fetchAllFollowing,
|
fetchAllFollowing,
|
||||||
verifyCredentials: apiService.verifyCredentials,
|
verifyCredentials: apiService.verifyCredentials,
|
||||||
startFetching,
|
startFetchingTimeline,
|
||||||
|
startFetchingNotifications,
|
||||||
fetchMutes,
|
fetchMutes,
|
||||||
muteUser,
|
muteUser,
|
||||||
unmuteUser,
|
unmuteUser,
|
||||||
|
|
Loading…
Reference in a new issue