diff --git a/CHANGELOG.md b/CHANGELOG.md
index 8f14bc59ee..a6b62bfeab 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -8,6 +8,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
### Fixed
- Fixed regression in react popup alignment and overflowing
- Fixed the occasional bug where screen would scroll 1px when typing into a reply form
+- Fixed timeline errors locking timelines
+
+### Changed
+- Errors when fetching are now shown with popup errors instead of "Error fetching updates" in panel headers
## [2.2.0] - 2020-11-06
diff --git a/src/components/notifications/notifications.vue b/src/components/notifications/notifications.vue
index bd875cca6e..b976026ee2 100644
--- a/src/components/notifications/notifications.vue
+++ b/src/components/notifications/notifications.vue
@@ -15,13 +15,6 @@
class="badge badge-notification unseen-count"
>{{ unseenCount }}
-
- {{ $t('timeline.error_fetching') }}
-
({
minId: Number.POSITIVE_INFINITY,
data: [],
idStore: {},
- loading: false,
- error: false
+ loading: false
})
export const defaultState = () => ({
@@ -460,18 +459,9 @@ export const mutations = {
const newStatus = state.allStatusesObject[id]
newStatus.nsfw = nsfw
},
- setError (state, { value }) {
- state.error = value
- },
- setErrorData (state, { value }) {
- state.errorData = value
- },
setNotificationsLoading (state, { value }) {
state.notifications.loading = value
},
- setNotificationsError (state, { value }) {
- state.notifications.error = value
- },
setNotificationsSilence (state, { value }) {
state.notifications.desktopNotificationSilence = value
},
@@ -586,18 +576,9 @@ const statuses = {
}
commit('addNewNotifications', { dispatch, notifications, older, rootGetters, newNotificationSideEffects })
},
- setError ({ rootState, commit }, { value }) {
- commit('setError', { value })
- },
- setErrorData ({ rootState, commit }, { value }) {
- commit('setErrorData', { value })
- },
setNotificationsLoading ({ rootState, commit }, { value }) {
commit('setNotificationsLoading', { value })
},
- setNotificationsError ({ rootState, commit }, { value }) {
- commit('setNotificationsError', { value })
- },
setNotificationsSilence ({ rootState, commit }, { value }) {
commit('setNotificationsSilence', { value })
},
diff --git a/src/services/notifications_fetcher/notifications_fetcher.service.js b/src/services/notifications_fetcher/notifications_fetcher.service.js
index c908b6443b..beeb167c44 100644
--- a/src/services/notifications_fetcher/notifications_fetcher.service.js
+++ b/src/services/notifications_fetcher/notifications_fetcher.service.js
@@ -2,7 +2,6 @@ import apiService from '../api/api.service.js'
import { promiseInterval } from '../promise_interval/promise_interval.js'
const update = ({ store, notifications, older }) => {
- store.dispatch('setNotificationsError', { value: false })
store.dispatch('addNewNotifications', { notifications, older })
}
@@ -47,11 +46,22 @@ const fetchAndUpdate = ({ store, credentials, older = false }) => {
const fetchNotifications = ({ store, args, older }) => {
return apiService.fetchTimeline(args)
- .then(({ data: notifications }) => {
+ .then((response) => {
+ if (response.errors) {
+ throw new Error(`${response.status} ${response.statusText}`)
+ }
+ const notifications = response.data
update({ store, notifications, older })
return notifications
- }, () => store.dispatch('setNotificationsError', { value: true }))
- .catch(() => store.dispatch('setNotificationsError', { value: true }))
+ })
+ .catch((error) => {
+ store.dispatch('pushGlobalNotice', {
+ level: 'error',
+ messageKey: 'notifications.error',
+ messageArgs: [error.message],
+ timeout: 5000
+ })
+ })
}
const startFetching = ({ credentials, store }) => {
diff --git a/src/services/timeline_fetcher/timeline_fetcher.service.js b/src/services/timeline_fetcher/timeline_fetcher.service.js
index 0fdc579d26..921df3edac 100644
--- a/src/services/timeline_fetcher/timeline_fetcher.service.js
+++ b/src/services/timeline_fetcher/timeline_fetcher.service.js
@@ -6,9 +6,6 @@ import { promiseInterval } from '../promise_interval/promise_interval.js'
const update = ({ store, statuses, timeline, showImmediately, userId, pagination }) => {
const ccTimeline = camelCase(timeline)
- store.dispatch('setError', { value: false })
- store.dispatch('setErrorData', { value: null })
-
store.dispatch('addNewStatuses', {
timeline: ccTimeline,
userId,
diff --git a/test/unit/specs/components/user_profile.spec.js b/test/unit/specs/components/user_profile.spec.js
index dcf066f9a3..80092b410c 100644
--- a/test/unit/specs/components/user_profile.spec.js
+++ b/test/unit/specs/components/user_profile.spec.js
@@ -8,8 +8,7 @@ const localVue = createLocalVue()
localVue.use(Vuex)
const mutations = {
- clearTimeline: () => {},
- setError: () => {}
+ clearTimeline: () => {}
}
const actions = {