From 1b82c76c0066fe7e9f2a5a916537dc10809a95fe Mon Sep 17 00:00:00 2001 From: Hailey Date: Mon, 2 Sep 2024 15:06:36 -0700 Subject: [PATCH] use a map for cache instead of weakmap for post shadow --- src/state/cache/post-shadow.ts | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/src/state/cache/post-shadow.ts b/src/state/cache/post-shadow.ts index 65300a8ef1..485d74a241 100644 --- a/src/state/cache/post-shadow.ts +++ b/src/state/cache/post-shadow.ts @@ -26,30 +26,28 @@ export interface PostShadow { export const POST_TOMBSTONE = Symbol('PostTombstone') const emitter = new EventEmitter() -const shadows: WeakMap< - AppBskyFeedDefs.PostView, - Partial -> = new WeakMap() +const shadows: Map> = new Map() export function usePostShadow( post: AppBskyFeedDefs.PostView, ): Shadow | typeof POST_TOMBSTONE { - const [shadow, setShadow] = useState(() => shadows.get(post)) + const {uri} = post + const [shadow, setShadow] = useState(() => shadows.get(uri)) const [prevPost, setPrevPost] = useState(post) if (post !== prevPost) { setPrevPost(post) - setShadow(shadows.get(post)) + setShadow(shadows.get(uri)) } useEffect(() => { function onUpdate() { - setShadow(shadows.get(post)) + setShadow(shadows.get(uri)) } - emitter.addListener(post.uri, onUpdate) + emitter.addListener(uri, onUpdate) return () => { - emitter.removeListener(post.uri, onUpdate) + emitter.removeListener(uri, onUpdate) } - }, [post, setShadow]) + }, [uri, setShadow]) return useMemo(() => { if (shadow) { @@ -124,7 +122,7 @@ export function updatePostShadow( ) { const cachedPosts = findPostsInCache(queryClient, uri) for (let post of cachedPosts) { - shadows.set(post, {...shadows.get(post), ...value}) + shadows.set(post.uri, {...shadows.get(post.uri), ...value}) } batchedUpdates(() => { emitter.emit(uri)