[APP-1398] Fix post shadow/like shadow state when replying (#8866)

* Add optimisticReplyCount to post shadow

* Add special util

* Fix subtle bug in query cache
This commit is contained in:
Eric Bailey
2025-08-20 15:21:52 -05:00
committed by GitHub
parent ef7c222e1b
commit 16701392b9
2 changed files with 40 additions and 4 deletions
+25 -4
View File
@@ -9,6 +9,10 @@ import {
} from '@atproto/api'
import {type QueryClient} from '@tanstack/react-query'
import {
dangerousGetPostShadow,
updatePostShadow,
} from '#/state/cache/post-shadow'
import {findAllPostsInQueryData as findAllPostsInExploreFeedPreviewsQueryData} from '#/state/queries/explore-feed-previews'
import {findAllPostsInQueryData as findAllPostsInNotifsQueryData} from '#/state/queries/notifications/feed'
import {findAllPostsInQueryData as findAllPostsInFeedQueryData} from '#/state/queries/post-feed'
@@ -85,10 +89,27 @@ export function createCacheMutator({
/*
* Update parent data
*/
parent.value.post = {
...parent.value.post,
replyCount: (parent.value.post.replyCount || 0) + 1,
}
const shadow = dangerousGetPostShadow(parent.value.post)
const prevOptimisticCount = shadow?.optimisticReplyCount
const prevReplyCount = parent.value.post.replyCount
// prefer optimistic count, if we already have some
const currentReplyCount =
(prevOptimisticCount ?? prevReplyCount ?? 0) + 1
/*
* We must update the value in the query cache in order for thread
* traversal to properly compute required metadata.
*/
parent.value.post.replyCount = currentReplyCount
/**
* Additionally, we need to update the post shadow to keep track of
* these new values, since mutating the post object above does not
* cause a re-render.
*/
updatePostShadow(queryClient, parent.value.post.uri, {
optimisticReplyCount: currentReplyCount,
})
const opDid = getRootPostAtUri(parent.value.post)?.host
const nextPreexistingItem = thread.at(i + 1)