shadow activity subs list
This commit is contained in:
@@ -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()
|
||||||
|
|||||||
Vendored
+4
-2
@@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -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
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user