shadow activity subs list

This commit is contained in:
Samuel Newman
2025-07-01 08:07:11 +03:00
parent 29c7ed6890
commit d51be0cd90
4 changed files with 51 additions and 23 deletions
@@ -11,6 +11,7 @@ import {
} from '#/lib/routes/types' } from '#/lib/routes/types'
import {cleanError} from '#/lib/strings/errors' import {cleanError} from '#/lib/strings/errors'
import {logger} from '#/logger' import {logger} from '#/logger'
import {useProfileShadow} from '#/state/cache/profile-shadow'
import {useModerationOpts} from '#/state/preferences/moderation-opts' import {useModerationOpts} from '#/state/preferences/moderation-opts'
import {useActivitySubscriptionsQuery} from '#/state/queries/activity-subscriptions' import {useActivitySubscriptionsQuery} from '#/state/queries/activity-subscriptions'
import {useNotificationSettingsQuery} from '#/state/queries/notifications/settings' import {useNotificationSettingsQuery} from '#/state/queries/notifications/settings'
@@ -193,12 +194,13 @@ function keyExtractor(item: bsky.profile.AnyProfileView) {
} }
function ActivitySubscriptionCard({ function ActivitySubscriptionCard({
profile, profile: profileUnshadowed,
moderationOpts, moderationOpts,
}: { }: {
profile: bsky.profile.AnyProfileView profile: bsky.profile.AnyProfileView
moderationOpts: ModerationOpts moderationOpts: ModerationOpts
}) { }) {
const profile = useProfileShadow(profileUnshadowed)
const control = useDialogControl() const control = useDialogControl()
const {_} = useLingui() const {_} = useLingui()
const t = useTheme() const t = useTheme()
+4 -2
View File
@@ -4,6 +4,7 @@ import {type QueryClient} from '@tanstack/react-query'
import EventEmitter from 'eventemitter3' import EventEmitter from 'eventemitter3'
import {batchedUpdates} from '#/lib/batchedUpdates' import {batchedUpdates} from '#/lib/batchedUpdates'
import {findAllProfilesInQueryData as findAllProfilesInActivitySubscriptionsQueryData} from '#/state/queries/activity-subscriptions'
import {findAllProfilesInQueryData as findAllProfilesInActorSearchQueryData} from '#/state/queries/actor-search' import {findAllProfilesInQueryData as findAllProfilesInActorSearchQueryData} from '#/state/queries/actor-search'
import {findAllProfilesInQueryData as findAllProfilesInExploreFeedPreviewsQueryData} from '#/state/queries/explore-feed-previews' import {findAllProfilesInQueryData as findAllProfilesInExploreFeedPreviewsQueryData} from '#/state/queries/explore-feed-previews'
import {findAllProfilesInQueryData as findAllProfilesInKnownFollowersQueryData} from '#/state/queries/known-followers' import {findAllProfilesInQueryData as findAllProfilesInKnownFollowersQueryData} from '#/state/queries/known-followers'
@@ -115,8 +116,8 @@ export function updateProfileShadow(
value: Partial<ProfileShadow>, value: Partial<ProfileShadow>,
) { ) {
const cachedProfiles = findProfilesInCache(queryClient, did) const cachedProfiles = findProfilesInCache(queryClient, did)
for (let post of cachedProfiles) { for (let profile of cachedProfiles) {
shadows.set(post, {...shadows.get(post), ...value}) shadows.set(profile, {...shadows.get(profile), ...value})
} }
batchedUpdates(() => { batchedUpdates(() => {
emitter.emit(did, value) emitter.emit(did, value)
@@ -176,4 +177,5 @@ function* findProfilesInCache(
yield* findAllProfilesInPostThreadV2QueryData(queryClient, did) yield* findAllProfilesInPostThreadV2QueryData(queryClient, did)
yield* findAllProfilesInKnownFollowersQueryData(queryClient, did) yield* findAllProfilesInKnownFollowersQueryData(queryClient, did)
yield* findAllProfilesInExploreFeedPreviewsQueryData(queryClient, did) yield* findAllProfilesInExploreFeedPreviewsQueryData(queryClient, did)
yield* findAllProfilesInActivitySubscriptionsQueryData(queryClient, did)
} }
+30 -1
View File
@@ -1,6 +1,12 @@
import {type AppBskyNotificationDeclaration} from '@atproto/api' import {
type AppBskyActorDefs,
type AppBskyNotificationDeclaration,
type AppBskyNotificationListActivitySubscriptions,
} from '@atproto/api'
import {t} from '@lingui/macro' import {t} from '@lingui/macro'
import { import {
type InfiniteData,
type QueryClient,
useInfiniteQuery, useInfiniteQuery,
useMutation, useMutation,
useQuery, useQuery,
@@ -99,3 +105,26 @@ export function useNotificationDeclarationMutation() {
}, },
}) })
} }
export function* findAllProfilesInQueryData(
queryClient: QueryClient,
did: string,
): Generator<AppBskyActorDefs.ProfileView, void> {
const queryDatas = queryClient.getQueriesData<
InfiniteData<AppBskyNotificationListActivitySubscriptions.OutputSchema>
>({
queryKey: RQKEY_getActivitySubscriptions,
})
for (const [_queryKey, queryData] of queryDatas) {
if (!queryData?.pages) {
continue
}
for (const page of queryData.pages) {
for (const subscription of page.subscriptions) {
if (subscription.did === did) {
yield subscription
}
}
}
}
}
+14 -19
View File
@@ -1,13 +1,13 @@
import { import {
AppBskyActorDefs, type AppBskyActorDefs,
AppBskyGraphDefs, type AppBskyGraphDefs,
AppBskyGraphGetList, type AppBskyGraphGetList,
BskyAgent, type BskyAgent,
} from '@atproto/api' } from '@atproto/api'
import { import {
InfiniteData, type InfiniteData,
QueryClient, type QueryClient,
QueryKey, type QueryKey,
useInfiniteQuery, useInfiniteQuery,
useQuery, useQuery,
} from '@tanstack/react-query' } from '@tanstack/react-query'
@@ -100,21 +100,16 @@ export function* findAllProfilesInQueryData(
queryKey: [RQKEY_ROOT], queryKey: [RQKEY_ROOT],
}) })
for (const [_queryKey, queryData] of queryDatas) { for (const [_queryKey, queryData] of queryDatas) {
if (!queryData) { if (!queryData?.pages) {
continue continue
} }
for (const [_queryKey, queryData] of queryDatas) { for (const page of queryData?.pages) {
if (!queryData?.pages) { if (page.list.creator.did === did) {
continue yield page.list.creator
} }
for (const page of queryData?.pages) { for (const item of page.items) {
if (page.list.creator.did === did) { if (item.subject.did === did) {
yield page.list.creator yield item.subject
}
for (const item of page.items) {
if (item.subject.did === did) {
yield item.subject
}
} }
} }
} }