about summary refs log tree commit diff
diff options
context:
space:
mode:
authordan <dan.abramov@gmail.com>2024-09-12 15:39:04 +0100
committerGitHub <noreply@github.com>2024-09-12 15:39:04 +0100
commite0d9e75407b053dd3b7a3472f925d8cd4bd92d45 (patch)
tree9a1408694e4627f29ff76727ddebbf4d09fa987c
parent4d22adbcf6866fb2995e090b2528bdb5968d7f78 (diff)
downloadvoidsky-e0d9e75407b053dd3b7a3472f925d8cd4bd92d45.tar.zst
Fix notification scroll jump (#5297)
-rw-r--r--src/state/queries/notifications/util.ts19
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()) {