From 086dd832d3d2c8103e7d6f99d72d27bea97ce7b0 Mon Sep 17 00:00:00 2001 From: wakarimasen Date: Tue, 7 Mar 2017 17:27:12 +0100 Subject: [PATCH] Visual feedback on failure to fetch new statuses --- src/components/timeline/timeline.vue | 10 ++++++++-- src/modules/statuses.js | 18 ++++++++++++++---- .../timeline_fetcher.service.js | 11 +++++++++++ 3 files changed, 33 insertions(+), 6 deletions(-) diff --git a/src/components/timeline/timeline.vue b/src/components/timeline/timeline.vue index 11280a08..ac074f3c 100644 --- a/src/components/timeline/timeline.vue +++ b/src/components/timeline/timeline.vue @@ -4,10 +4,13 @@
{{title}}
- - + @@ -43,6 +46,9 @@ padding: 0.1em 0.3em 0.25em 0.3em; min-width: 6em; } + .error { + background-color: rgba(255, 48, 16, 0.65); + } .no-press { opacity: 0.8; cursor: default; diff --git a/src/modules/statuses.js b/src/modules/statuses.js index 491d0024..b19109b2 100644 --- a/src/modules/statuses.js +++ b/src/modules/statuses.js @@ -15,7 +15,8 @@ export const defaultState = { newStatusCount: 0, maxId: 0, minVisibleId: 0, - loading: false + loading: false, + error: false }, public: { statuses: [], @@ -24,7 +25,8 @@ export const defaultState = { newStatusCount: 0, maxId: 0, minVisibleId: 0, - loading: false + loading: false, + error: false }, publicAndExternal: { statuses: [], @@ -33,7 +35,8 @@ export const defaultState = { newStatusCount: 0, maxId: 0, minVisibleId: 0, - loading: false + loading: false, + error: false }, friends: { statuses: [], @@ -42,7 +45,8 @@ export const defaultState = { newStatusCount: 0, maxId: 0, minVisibleId: 0, - loading: false + loading: false, + error: false } } } @@ -280,6 +284,9 @@ export const mutations = { const newStatus = find(state.allStatuses, { id }) newStatus.nsfw = nsfw }, + setError (state, { timeline, value }) { + state.timelines[timeline].error = value + }, markNotificationsAsSeen (state, notifications) { each(notifications, (notification) => { notification.seen = true @@ -293,6 +300,9 @@ const statuses = { addNewStatuses ({ rootState, commit }, { statuses, showImmediately = false, timeline = false, noIdUpdate = false }) { commit('addNewStatuses', { statuses, showImmediately, timeline, noIdUpdate, user: rootState.users.currentUser }) }, + setError ({ rootState, commit }, { timeline, value }) { + commit('setError', { timeline, value }) + }, deleteStatus ({ rootState, commit }, status) { commit('setDeleted', { status }) apiService.deleteStatus({ id: status.id, credentials: rootState.users.currentUser.credentials }) diff --git a/src/services/timeline_fetcher/timeline_fetcher.service.js b/src/services/timeline_fetcher/timeline_fetcher.service.js index 37bbcd82..40f568c3 100644 --- a/src/services/timeline_fetcher/timeline_fetcher.service.js +++ b/src/services/timeline_fetcher/timeline_fetcher.service.js @@ -12,6 +12,15 @@ const update = ({store, statuses, timeline, showImmediately}) => { }) } +const setError = ({store, timeline, value}) => { + const ccTimeline = camelCase(timeline) + + store.dispatch('setError', { + timeline: ccTimeline, + value + }) +} + const fetchAndUpdate = ({store, credentials, timeline = 'friends', older = false, showImmediately = false}) => { const args = { timeline, credentials } const rootState = store.rootState || store.state @@ -25,6 +34,8 @@ const fetchAndUpdate = ({store, credentials, timeline = 'friends', older = false return apiService.fetchTimeline(args) .then((statuses) => update({store, statuses, timeline, showImmediately})) + .then(() => setError({store, timeline, value: false})) + .catch(() => setError({store, timeline, value: true})) } const startFetching = ({ timeline = 'friends', credentials, store }) => {