[🐴] DM button on profile (#4097)

* add profile button

* separate out button to component

* normalise subscribe to labeller button size

* infinite staletime

* use Link rather than Button and change icon

* adjust icon position
This commit is contained in:
Samuel Newman 2024-05-20 17:18:56 +01:00 committed by GitHub
parent 2414559b80
commit 24f8794d4d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 125 additions and 42 deletions

View file

@ -1,11 +1,15 @@
import {ChatBskyConvoGetConvoForMembers} from '@atproto/api'
import {useMutation, useQueryClient} from '@tanstack/react-query'
import {useMutation, useQuery, useQueryClient} from '@tanstack/react-query'
import {logger} from '#/logger'
import {DM_SERVICE_HEADERS} from '#/state/queries/messages/const'
import {useAgent} from '#/state/session'
import {STALE} from '..'
import {RQKEY as CONVO_KEY} from './conversation'
const RQKEY_ROOT = 'convo-for-user'
export const RQKEY = (did: string) => [RQKEY_ROOT, did]
export function useGetConvoForMembers({
onSuccess,
onError,
@ -35,3 +39,29 @@ export function useGetConvoForMembers({
},
})
}
/**
* Gets the conversation ID for a given DID. Returns null if it's not possible to message them.
*/
export function useMaybeConvoForUser(did: string) {
const {getAgent} = useAgent()
return useQuery({
queryKey: RQKEY(did),
queryFn: async () => {
const convo = await getAgent()
.api.chat.bsky.convo.getConvoForMembers(
{members: [did]},
{headers: DM_SERVICE_HEADERS},
)
.catch(() => ({success: null}))
if (convo.success) {
return convo.data.convo.id
} else {
return null
}
},
staleTime: STALE.INFINITY,
})
}