[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
+15
View File
@@ -24,6 +24,7 @@ export interface PostShadow {
isDeleted: boolean
embed: AppBskyEmbedRecord.View | AppBskyEmbedRecordWithMedia.View | undefined
pinned: boolean
optimisticReplyCount: number | undefined
}
export const POST_TOMBSTONE = Symbol('PostTombstone')
@@ -34,6 +35,14 @@ const shadows: WeakMap<
Partial<PostShadow>
> = new WeakMap()
/**
* Use with caution! This function returns the raw shadow data for a post.
* Prefer using `usePostShadow`.
*/
export function dangerousGetPostShadow(post: AppBskyFeedDefs.PostView) {
return shadows.get(post)
}
export function usePostShadow(
post: AppBskyFeedDefs.PostView,
): Shadow<AppBskyFeedDefs.PostView> | typeof POST_TOMBSTONE {
@@ -95,6 +104,11 @@ function mergeShadow(
repostCount = Math.max(0, repostCount)
}
let replyCount = post.replyCount ?? 0
if ('optimisticReplyCount' in shadow) {
replyCount = shadow.optimisticReplyCount ?? replyCount
}
let embed: typeof post.embed
if ('embed' in shadow) {
if (
@@ -112,6 +126,7 @@ function mergeShadow(
embed: embed || post.embed,
likeCount: likeCount,
repostCount: repostCount,
replyCount: replyCount,
viewer: {
...(post.viewer || {}),
like: 'likeUri' in shadow ? shadow.likeUri : post.viewer?.like,