···8import EventEmitter from 'eventemitter3'
910import {batchedUpdates} from '#/lib/batchedUpdates'
011import {findAllPostsInQueryData as findAllPostsInExploreFeedPreviewsQueryData} from '#/state/queries/explore-feed-previews'
12import {findAllPostsInQueryData as findAllPostsInNotifsQueryData} from '#/state/queries/notifications/feed'
13import {findAllPostsInQueryData as findAllPostsInFeedQueryData} from '#/state/queries/post-feed'
···188 queryClient,
189 uri,
190 )) {
000191 yield post
192 }
193}
···8import EventEmitter from 'eventemitter3'
910import {batchedUpdates} from '#/lib/batchedUpdates'
11+import {findAllPostsInQueryData as findAllPostsInBookmarksQueryData} from '#/state/queries/bookmarks/useBookmarksQuery'
12import {findAllPostsInQueryData as findAllPostsInExploreFeedPreviewsQueryData} from '#/state/queries/explore-feed-previews'
13import {findAllPostsInQueryData as findAllPostsInNotifsQueryData} from '#/state/queries/notifications/feed'
14import {findAllPostsInQueryData as findAllPostsInFeedQueryData} from '#/state/queries/post-feed'
···189 queryClient,
190 uri,
191 )) {
192+ yield post
193+ }
194+ for (let post of findAllPostsInBookmarksQueryData(queryClient, uri)) {
195 yield post
196 }
197}
+46-1
src/state/queries/bookmarks/useBookmarksQuery.ts
···1import {
2 type $Typed,
3 type AppBskyBookmarkGetBookmarks,
4- type AppBskyFeedDefs,
05} from '@atproto/api'
6import {
7 type InfiniteData,
···10 useInfiniteQuery,
11} from '@tanstack/react-query'
120000013import {useAgent} from '#/state/session'
01415export const bookmarksQueryKeyRoot = 'bookmarks'
16export const createBookmarksQueryKey = () => [bookmarksQueryKeyRoot]
···112 },
113 )
114}
00000000000000000000000000000000000000
···1import {
2 type $Typed,
3 type AppBskyBookmarkGetBookmarks,
4+ AppBskyFeedDefs,
5+ AtUri,
6} from '@atproto/api'
7import {
8 type InfiniteData,
···11 useInfiniteQuery,
12} from '@tanstack/react-query'
1314+import {
15+ didOrHandleUriMatches,
16+ embedViewRecordToPostView,
17+ getEmbeddedPost,
18+} from '#/state/queries/util'
19import {useAgent} from '#/state/session'
20+import * as bsky from '#/types/bsky'
2122export const bookmarksQueryKeyRoot = 'bookmarks'
23export const createBookmarksQueryKey = () => [bookmarksQueryKeyRoot]
···119 },
120 )
121}
122+123+export function* findAllPostsInQueryData(
124+ queryClient: QueryClient,
125+ uri: string,
126+): Generator<AppBskyFeedDefs.PostView, undefined> {
127+ const queryDatas = queryClient.getQueriesData<
128+ InfiniteData<AppBskyBookmarkGetBookmarks.OutputSchema>
129+ >({
130+ queryKey: [bookmarksQueryKeyRoot],
131+ })
132+ const atUri = new AtUri(uri)
133+134+ for (const [_queryKey, queryData] of queryDatas) {
135+ if (!queryData?.pages) {
136+ continue
137+ }
138+ for (const page of queryData?.pages) {
139+ for (const bookmark of page.bookmarks) {
140+ if (
141+ !bsky.dangerousIsType<AppBskyFeedDefs.PostView>(
142+ bookmark.item,
143+ AppBskyFeedDefs.isPostView,
144+ )
145+ )
146+ continue
147+148+ if (didOrHandleUriMatches(atUri, bookmark.item)) {
149+ yield bookmark.item
150+ }
151+152+ const quotedPost = getEmbeddedPost(bookmark.item.embed)
153+ if (quotedPost && didOrHandleUriMatches(atUri, quotedPost)) {
154+ yield embedViewRecordToPostView(quotedPost)
155+ }
156+ }
157+ }
158+ }
159+}