diff options
author | dan <dan.abramov@gmail.com> | 2024-09-12 15:39:04 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-09-12 15:39:04 +0100 |
commit | e0d9e75407b053dd3b7a3472f925d8cd4bd92d45 (patch) | |
tree | 9a1408694e4627f29ff76727ddebbf4d09fa987c | |
parent | 4d22adbcf6866fb2995e090b2528bdb5968d7f78 (diff) | |
download | voidsky-e0d9e75407b053dd3b7a3472f925d8cd4bd92d45.tar.zst |
Fix notification scroll jump (#5297)
-rw-r--r-- | src/state/queries/notifications/util.ts | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/state/queries/notifications/util.ts b/src/state/queries/notifications/util.ts index e0ee02294..133d3ebc2 100644 --- a/src/state/queries/notifications/util.ts +++ b/src/state/queries/notifications/util.ts @@ -175,9 +175,19 @@ async function fetchSubjects( }> { const postUris = new Set<string>() const packUris = new Set<string>() + + const postUrisWithLikes = new Set<string>() + const postUrisWithReposts = new Set<string>() + for (const notif of groupedNotifs) { if (notif.subjectUri?.includes('app.bsky.feed.post')) { postUris.add(notif.subjectUri) + if (notif.type === 'post-like') { + postUrisWithLikes.add(notif.subjectUri) + } + if (notif.type === 'repost') { + postUrisWithReposts.add(notif.subjectUri) + } } else if ( notif.notification.reasonSubject?.includes('app.bsky.graph.starterpack') ) { @@ -206,6 +216,15 @@ async function fetchSubjects( AppBskyFeedPost.validateRecord(post.record).success ) { postsMap.set(post.uri, post) + + // HACK. In some cases, the appview appears to lag behind and returns empty counters. + // To prevent scroll jump due to missing metrics, fill in 1 like/repost instead of 0. + if (post.likeCount === 0 && postUrisWithLikes.has(post.uri)) { + post.likeCount = 1 + } + if (post.repostCount === 0 && postUrisWithReposts.has(post.uri)) { + post.repostCount = 1 + } } } for (const pack of packsChunks.flat()) { |