[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:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user