logo

pleroma-fe

My custom branche(s) on git.pleroma.social/pleroma/pleroma-fe
commit: d954db02219fba8de3542660a2428c4e234d6770
parent: 3a62ad3c4c6939d03ba3d941d4e6a24e816a2787
Author: Shpuld Shpuldson <shpuld@gmail.com>
Date:   Tue,  7 Mar 2017 12:15:37 -0500

Merge branch 'feature/timeline-fetch-error' into 'develop'

Visual feedback on failure to fetch new statuses

See merge request !47

Diffstat:

Msrc/components/timeline/timeline.vue10++++++++--
Msrc/modules/statuses.js18++++++++++++++----
Msrc/services/timeline_fetcher/timeline_fetcher.service.js11+++++++++++
3 files changed, 33 insertions(+), 6 deletions(-)

diff --git a/src/components/timeline/timeline.vue b/src/components/timeline/timeline.vue @@ -4,10 +4,13 @@ <div class="title"> {{title}} </div> - <button @click.prevent="showNewStatuses" class="base06 base02-background loadmore-button" v-if="timeline.newStatusCount > 0"> + <button @click.prevent="showNewStatuses" class="base06 base02-background loadmore-button" v-if="timeline.newStatusCount > 0 && !timeline.error"> Show new ({{timeline.newStatusCount}}) </button> - <button @click.prevent class="base04 base01-background no-press loadmore-button" v-if="!timeline.newStatusCount > 0"> + <button @click.prevent class="base06 error no-press loadmore-button" v-if="timeline.error"> + Error fetching updates + </button> + <button @click.prevent class="base04 base01-background no-press loadmore-button" v-if="!timeline.newStatusCount > 0 && !timeline.error"> Up-to-date </button> </div> @@ -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 @@ -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 @@ -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 }) => {