diff options
author | Samuel Newman <mozzius@protonmail.com> | 2024-05-20 17:18:56 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-05-20 17:18:56 +0100 |
commit | 24f8794d4db517540a2151440deb51bba171f89a (patch) | |
tree | 75d6651d76a491660ba7c43e1be3512274642ad7 /src/state/queries/messages | |
parent | 2414559b80ae9916aaa01bcc8da4f8b4cbf64238 (diff) | |
download | voidsky-24f8794d4db517540a2151440deb51bba171f89a.tar.zst |
[🐴] 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
Diffstat (limited to 'src/state/queries/messages')
-rw-r--r-- | src/state/queries/messages/get-convo-for-members.ts | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/src/state/queries/messages/get-convo-for-members.ts b/src/state/queries/messages/get-convo-for-members.ts index 083146b83..9187c1607 100644 --- a/src/state/queries/messages/get-convo-for-members.ts +++ b/src/state/queries/messages/get-convo-for-members.ts @@ -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, + }) +} |