diff options
author | Paul Frazee <pfrazee@gmail.com> | 2023-04-03 15:57:17 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-03 15:57:17 -0500 |
commit | b12cd53a4dee180e8b538a6713fa775446c30140 (patch) | |
tree | 4992948fef5c7f34b192e6eb4564dadcf710f1c2 /src/state/models/feeds/posts.ts | |
parent | 2045c615a8f8a39ee9f54638a234f3d45f028399 (diff) | |
download | voidsky-b12cd53a4dee180e8b538a6713fa775446c30140.tar.zst |
Improve "Load more" error handling in feeds (#379)
* Add explicit load-more error handling to posts feed * Add explicit load-more error handling to notifications feed * Properly set hasMore to false after an error
Diffstat (limited to 'src/state/models/feeds/posts.ts')
-rw-r--r-- | src/state/models/feeds/posts.ts | 33 |
1 files changed, 24 insertions, 9 deletions
diff --git a/src/state/models/feeds/posts.ts b/src/state/models/feeds/posts.ts index 9e593f313..0046f9781 100644 --- a/src/state/models/feeds/posts.ts +++ b/src/state/models/feeds/posts.ts @@ -213,6 +213,7 @@ export class PostsFeedModel { hasNewLatest = false hasLoaded = false error = '' + loadMoreError = '' params: GetTimeline.QueryParams | GetAuthorFeed.QueryParams hasMore = true loadMoreCursor: string | undefined @@ -382,12 +383,10 @@ export class PostsFeedModel { await this._appendAll(res) this._xIdle() } catch (e: any) { - this._xIdle() // don't bubble the error to the user - this.rootStore.log.error('FeedView: Failed to load more', { - params: this.params, - e, + this._xIdle(undefined, e) + runInAction(() => { + this.hasMore = false }) - this.hasMore = false } } finally { this.lock.release() @@ -395,6 +394,15 @@ export class PostsFeedModel { }) /** + * Attempt to load more again after a failure + */ + async retryLoadMore() { + this.loadMoreError = '' + this.hasMore = true + return this.loadMore() + } + + /** * Update content in-place */ update = bundleAsync(async () => { @@ -503,13 +511,20 @@ export class PostsFeedModel { this.error = '' } - _xIdle(err?: any) { + _xIdle(error?: any, loadMoreError?: any) { this.isLoading = false this.isRefreshing = false this.hasLoaded = true - this.error = cleanError(err) - if (err) { - this.rootStore.log.error('Posts feed request failed', err) + this.error = cleanError(error) + this.loadMoreError = cleanError(loadMoreError) + if (error) { + this.rootStore.log.error('Posts feed request failed', error) + } + if (loadMoreError) { + this.rootStore.log.error( + 'Posts feed load-more request failed', + loadMoreError, + ) } } |