300a50b69a
Phase 3 tasks 3-7 (parallel wave): composer/post pipeline on pdsClient/appviewClient with structural+instance blob guards and a golden CID fixture test; chat Convo/EventBus/queries on the dedicated chat client; preferences sugar to SDK actions on the PDS client; remaining state/queries producers (usePostThread unspecced flip, video scoped-token clients, notifications, starter packs, lists) to client.call; UI runtime sweep (AtUri from @atproto/syntax, moderation fns from @bsky.app/sdk/moderation, SDK RichText, ozone reason tokens, guard rewrites via #/types/bsky). Intermediate checkpoint (hooks skipped): ~114 typecheck errors remain in cross-boundary consumer files, resolved by the type-only codemod next. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
37 lines
1.1 KiB
TypeScript
37 lines
1.1 KiB
TypeScript
import {useMutation, useQueryClient} from '@tanstack/react-query'
|
|
|
|
import {logger} from '#/logger'
|
|
import {useChatClient, useSession} from '#/state/session'
|
|
import {chat} from '#/lexicons'
|
|
import {RQKEY_ROOT as REQUESTS_RQKEY_ROOT} from './list-conversation-requests'
|
|
|
|
export function useRequestJoinGroupChat({
|
|
onSuccess,
|
|
onError,
|
|
}: {
|
|
onSuccess?: (data: chat.bsky.group.requestJoin.$OutputBody) => void
|
|
onError?: (error: Error) => void
|
|
} = {}) {
|
|
const chatClient = useChatClient()
|
|
const queryClient = useQueryClient()
|
|
const {hasSession} = useSession()
|
|
|
|
return useMutation({
|
|
mutationFn: async ({code}: {code: string}) => {
|
|
if (!hasSession) throw new Error('Must be logged in to join')
|
|
if (!code) throw new Error('No invite code')
|
|
|
|
const res = await chatClient.call(chat.bsky.group.requestJoin, {code})
|
|
return res
|
|
},
|
|
onSuccess: data => {
|
|
void queryClient.invalidateQueries({queryKey: [REQUESTS_RQKEY_ROOT]})
|
|
onSuccess?.(data)
|
|
},
|
|
onError: error => {
|
|
logger.error('Failed to join group chat', {safeMessage: error})
|
|
onError?.(error)
|
|
},
|
|
})
|
|
}
|