Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin' into composer-rq
Browse files Browse the repository at this point in the history
* origin:
  Fix poll latest loop (#1901)
  Handle end of feed (#1898)
  Refactor onboarding suggested follows (#1897)
  Update Muted and Blocked accounts screens (react-query refactor) (#1892)
  • Loading branch information
estrattonbailey committed Nov 14, 2023
2 parents 866178c + c687172 commit f71003b
Show file tree
Hide file tree
Showing 15 changed files with 461 additions and 355 deletions.
107 changes: 0 additions & 107 deletions src/state/models/lists/blocked-accounts.ts

This file was deleted.

107 changes: 0 additions & 107 deletions src/state/models/lists/muted-accounts.ts

This file was deleted.

28 changes: 28 additions & 0 deletions src/state/queries/my-blocked-accounts.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import {AppBskyGraphGetBlocks} from '@atproto/api'
import {useInfiniteQuery, InfiniteData, QueryKey} from '@tanstack/react-query'
import {useSession} from '../session'

export const RQKEY = () => ['my-blocked-accounts']
type RQPageParam = string | undefined

export function useMyBlockedAccountsQuery() {
const {agent} = useSession()
return useInfiniteQuery<
AppBskyGraphGetBlocks.OutputSchema,
Error,
InfiniteData<AppBskyGraphGetBlocks.OutputSchema>,
QueryKey,
RQPageParam
>({
queryKey: RQKEY(),
async queryFn({pageParam}: {pageParam: RQPageParam}) {
const res = await agent.app.bsky.graph.getBlocks({
limit: 30,
cursor: pageParam,
})
return res.data
},
initialPageParam: undefined,
getNextPageParam: lastPage => lastPage.cursor,
})
}
28 changes: 28 additions & 0 deletions src/state/queries/my-muted-accounts.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import {AppBskyGraphGetMutes} from '@atproto/api'
import {useInfiniteQuery, InfiniteData, QueryKey} from '@tanstack/react-query'
import {useSession} from '../session'

export const RQKEY = () => ['my-muted-accounts']
type RQPageParam = string | undefined

export function useMyMutedAccountsQuery() {
const {agent} = useSession()
return useInfiniteQuery<
AppBskyGraphGetMutes.OutputSchema,
Error,
InfiniteData<AppBskyGraphGetMutes.OutputSchema>,
QueryKey,
RQPageParam
>({
queryKey: RQKEY(),
async queryFn({pageParam}: {pageParam: RQPageParam}) {
const res = await agent.app.bsky.graph.getMutes({
limit: 30,
cursor: pageParam,
})
return res.data
},
initialPageParam: undefined,
getNextPageParam: lastPage => lastPage.cursor,
})
}
8 changes: 8 additions & 0 deletions src/state/queries/profile.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ import {useSession} from '../session'
import {updateProfileShadow} from '../cache/profile-shadow'
import {uploadBlob} from '#/lib/api'
import {until} from '#/lib/async/until'
import {RQKEY as RQKEY_MY_MUTED} from './my-muted-accounts'
import {RQKEY as RQKEY_MY_BLOCKED} from './my-blocked-accounts'

export const RQKEY = (did: string) => ['profile', did]

Expand Down Expand Up @@ -147,6 +149,7 @@ export function useProfileUnfollowMutation() {

export function useProfileMuteMutation() {
const {agent} = useSession()
const queryClient = useQueryClient()
return useMutation<void, Error, {did: string}>({
mutationFn: async ({did}) => {
await agent.mute(did)
Expand All @@ -157,6 +160,9 @@ export function useProfileMuteMutation() {
muted: true,
})
},
onSuccess() {
queryClient.invalidateQueries({queryKey: RQKEY_MY_MUTED()})
},
onError(error, variables) {
// revert the optimistic update
updateProfileShadow(variables.did, {
Expand Down Expand Up @@ -189,6 +195,7 @@ export function useProfileUnmuteMutation() {

export function useProfileBlockMutation() {
const {agent, currentAccount} = useSession()
const queryClient = useQueryClient()
return useMutation<{uri: string; cid: string}, Error, {did: string}>({
mutationFn: async ({did}) => {
if (!currentAccount) {
Expand All @@ -210,6 +217,7 @@ export function useProfileBlockMutation() {
updateProfileShadow(variables.did, {
blockingUri: data.uri,
})
queryClient.invalidateQueries({queryKey: RQKEY_MY_BLOCKED()})
},
onError(error, variables) {
// revert the optimistic update
Expand Down
75 changes: 75 additions & 0 deletions src/state/queries/suggested-follows.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
import {AppBskyActorGetSuggestions, moderateProfile} from '@atproto/api'
import {
useInfiniteQuery,
useMutation,
InfiniteData,
QueryKey,
} from '@tanstack/react-query'

import {useSession} from '#/state/session'
import {useModerationOpts} from '#/state/queries/preferences'

export const suggestedFollowsQueryKey = ['suggested-follows']

export function useSuggestedFollowsQuery() {
const {agent, currentAccount} = useSession()
const moderationOpts = useModerationOpts()

return useInfiniteQuery<
AppBskyActorGetSuggestions.OutputSchema,
Error,
InfiniteData<AppBskyActorGetSuggestions.OutputSchema>,
QueryKey,
string | undefined
>({
enabled: !!moderationOpts,
queryKey: suggestedFollowsQueryKey,
queryFn: async ({pageParam}) => {
const res = await agent.app.bsky.actor.getSuggestions({
limit: 25,
cursor: pageParam,
})

res.data.actors = res.data.actors
.filter(
actor => !moderateProfile(actor, moderationOpts!).account.filter,
)
.filter(actor => {
const viewer = actor.viewer
if (viewer) {
if (
viewer.following ||
viewer.muted ||
viewer.mutedByList ||
viewer.blockedBy ||
viewer.blocking
) {
return false
}
}
if (actor.did === currentAccount?.did) {
return false
}
return true
})

return res.data
},
initialPageParam: undefined,
getNextPageParam: lastPage => lastPage.cursor,
})
}

export function useGetSuggestedFollowersByActor() {
const {agent} = useSession()

return useMutation({
mutationFn: async (actor: string) => {
const res = await agent.app.bsky.graph.getSuggestedFollowsByActor({
actor: actor,
})

return res.data
},
})
}
Loading

0 comments on commit f71003b

Please sign in to comment.