diff --git a/packages/components/src/redux/reducers/subscriptions.ts b/packages/components/src/redux/reducers/subscriptions.ts index 1466d838..81cf4257 100644 --- a/packages/components/src/redux/reducers/subscriptions.ts +++ b/packages/components/src/redux/reducers/subscriptions.ts @@ -190,8 +190,9 @@ export const subscriptionsReducer: Reducer = ( if (!subscription) return subscription.data = subscription.data || {} - subscription.data.loadState = 'error' subscription.data.errorMessage = action.error && action.error.message + subscription.data.lastFetchedAt = new Date().toISOString() + subscription.data.loadState = 'error' // draft.updatedAt = new Date().toISOString() }) diff --git a/packages/components/src/redux/sagas/subscriptions.ts b/packages/components/src/redux/sagas/subscriptions.ts index c2a0ee56..6a3085b3 100644 --- a/packages/components/src/redux/sagas/subscriptions.ts +++ b/packages/components/src/redux/sagas/subscriptions.ts @@ -76,6 +76,26 @@ function* init() { subscriptionsToFetch.map(function*(subscription) { if (!subscription) return + const fiveMinutes = 1000 * 60 * 5 + const timeDiff = subscription.data.lastFetchedAt + ? Date.now() - new Date(subscription.data.lastFetchedAt).valueOf() + : undefined + + if ( + subscription && + subscription.data && + subscription.data.loadState === 'error' && + (!timeDiff || timeDiff < fiveMinutes) + ) { + if (__DEV__) { + // tslint:disable-next-line no-console + console.debug( + 'Ignoring subscription re-fetch due to recent fetch error.', + ) + } + return + } + return yield put( actions.fetchSubscriptionRequest({ subscriptionId: subscription.id,