use a map for cache instead of weakmap for post shadow

This commit is contained in:
Hailey
2024-09-02 15:06:36 -07:00
parent f3f7dfc3e6
commit 1b82c76c00
+9 -11
View File
@@ -26,30 +26,28 @@ export interface PostShadow {
export const POST_TOMBSTONE = Symbol('PostTombstone') export const POST_TOMBSTONE = Symbol('PostTombstone')
const emitter = new EventEmitter() const emitter = new EventEmitter()
const shadows: WeakMap< const shadows: Map<string, Partial<PostShadow>> = new Map()
AppBskyFeedDefs.PostView,
Partial<PostShadow>
> = new WeakMap()
export function usePostShadow( export function usePostShadow(
post: AppBskyFeedDefs.PostView, post: AppBskyFeedDefs.PostView,
): Shadow<AppBskyFeedDefs.PostView> | typeof POST_TOMBSTONE { ): Shadow<AppBskyFeedDefs.PostView> | 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) const [prevPost, setPrevPost] = useState(post)
if (post !== prevPost) { if (post !== prevPost) {
setPrevPost(post) setPrevPost(post)
setShadow(shadows.get(post)) setShadow(shadows.get(uri))
} }
useEffect(() => { useEffect(() => {
function onUpdate() { function onUpdate() {
setShadow(shadows.get(post)) setShadow(shadows.get(uri))
} }
emitter.addListener(post.uri, onUpdate) emitter.addListener(uri, onUpdate)
return () => { return () => {
emitter.removeListener(post.uri, onUpdate) emitter.removeListener(uri, onUpdate)
} }
}, [post, setShadow]) }, [uri, setShadow])
return useMemo(() => { return useMemo(() => {
if (shadow) { if (shadow) {
@@ -124,7 +122,7 @@ export function updatePostShadow(
) { ) {
const cachedPosts = findPostsInCache(queryClient, uri) const cachedPosts = findPostsInCache(queryClient, uri)
for (let post of cachedPosts) { for (let post of cachedPosts) {
shadows.set(post, {...shadows.get(post), ...value}) shadows.set(post.uri, {...shadows.get(post.uri), ...value})
} }
batchedUpdates(() => { batchedUpdates(() => {
emitter.emit(uri) emitter.emit(uri)