migrate the chat convo lifecycle mutations to the chat client
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -4,9 +4,9 @@ import {
|
||||
} from '@atproto/api'
|
||||
import {useMutation, useQueryClient} from '@tanstack/react-query'
|
||||
|
||||
import {DM_SERVICE_HEADERS} from '#/lib/constants'
|
||||
import {logger} from '#/logger'
|
||||
import {useAgent} from '#/state/session'
|
||||
import {useChatClient} from '#/state/session'
|
||||
import {chat} from '#/lexicons'
|
||||
import {
|
||||
type ConvoRequestListQueryData,
|
||||
optimisticDelete as optimisticDeleteRequest,
|
||||
@@ -34,16 +34,11 @@ export function useAcceptConversation(
|
||||
},
|
||||
) {
|
||||
const queryClient = useQueryClient()
|
||||
const agent = useAgent()
|
||||
const client = useChatClient()
|
||||
|
||||
return useMutation({
|
||||
mutationFn: async () => {
|
||||
const {data} = await agent.chat.bsky.convo.acceptConvo(
|
||||
{convoId},
|
||||
{headers: DM_SERVICE_HEADERS},
|
||||
)
|
||||
|
||||
return data
|
||||
return await client.call(chat.bsky.convo.acceptConvo, {convoId})
|
||||
},
|
||||
onMutate: () => {
|
||||
// snapshot every convo-list cache up front so onError can restore them
|
||||
|
||||
@@ -11,10 +11,10 @@ import {
|
||||
useQueryClient,
|
||||
} from '@tanstack/react-query'
|
||||
|
||||
import {DM_SERVICE_HEADERS} from '#/lib/constants'
|
||||
import {STALE} from '#/state/queries'
|
||||
import {useOnMarkAsRead} from '#/state/queries/messages/list-conversations'
|
||||
import {useAgent} from '#/state/session'
|
||||
import {useChatClient} from '#/state/session'
|
||||
import {chat} from '#/lexicons'
|
||||
import {
|
||||
RQKEY_PARTIAL as UNREAD_COUNTS_PARTIAL_KEY,
|
||||
UNREAD_ACCEPTED_CAP,
|
||||
@@ -30,15 +30,12 @@ export const RQKEY_ROOT = 'convo'
|
||||
export const RQKEY = (convoId: string) => [RQKEY_ROOT, convoId]
|
||||
|
||||
export function useConvoQuery({convoId}: {convoId: string}) {
|
||||
const agent = useAgent()
|
||||
const client = useChatClient()
|
||||
|
||||
return useQuery({
|
||||
queryKey: RQKEY(convoId),
|
||||
queryFn: async () => {
|
||||
const {data} = await agent.chat.bsky.convo.getConvo(
|
||||
{convoId},
|
||||
{headers: DM_SERVICE_HEADERS},
|
||||
)
|
||||
const data = await client.call(chat.bsky.convo.getConvo, {convoId})
|
||||
return data.convo
|
||||
},
|
||||
staleTime: STALE.INFINITY,
|
||||
@@ -55,7 +52,7 @@ export function precacheConvoQuery(
|
||||
export function useMarkAsReadMutation() {
|
||||
const optimisticUpdate = useOnMarkAsRead()
|
||||
const queryClient = useQueryClient()
|
||||
const agent = useAgent()
|
||||
const client = useChatClient()
|
||||
|
||||
return useMutation({
|
||||
mutationFn: async ({
|
||||
@@ -67,16 +64,10 @@ export function useMarkAsReadMutation() {
|
||||
}) => {
|
||||
if (!convoId) throw new Error('No convoId provided')
|
||||
|
||||
await agent.chat.bsky.convo.updateRead(
|
||||
{
|
||||
convoId,
|
||||
messageId,
|
||||
},
|
||||
{
|
||||
encoding: 'application/json',
|
||||
headers: DM_SERVICE_HEADERS,
|
||||
},
|
||||
)
|
||||
await client.call(chat.bsky.convo.updateRead, {
|
||||
convoId,
|
||||
messageId,
|
||||
})
|
||||
},
|
||||
onMutate({convoId}) {
|
||||
if (!convoId) throw new Error('No convoId provided')
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import {type ChatBskyConvoGetConvoForMembers} from '@atproto/api'
|
||||
import {useMutation, useQueryClient} from '@tanstack/react-query'
|
||||
|
||||
import {DM_SERVICE_HEADERS} from '#/lib/constants'
|
||||
import {logger} from '#/logger'
|
||||
import {useAgent} from '#/state/session'
|
||||
import {useChatClient} from '#/state/session'
|
||||
import {chat} from '#/lexicons'
|
||||
import {precacheConvoQuery} from './conversation'
|
||||
|
||||
export function useGetConvoForMembers({
|
||||
@@ -14,16 +14,15 @@ export function useGetConvoForMembers({
|
||||
onError?: (error: Error) => void
|
||||
}) {
|
||||
const queryClient = useQueryClient()
|
||||
const agent = useAgent()
|
||||
const client = useChatClient()
|
||||
|
||||
return useMutation({
|
||||
mutationFn: async (members: string[]) => {
|
||||
const {data} = await agent.chat.bsky.convo.getConvoForMembers(
|
||||
{members: members},
|
||||
{headers: DM_SERVICE_HEADERS},
|
||||
)
|
||||
|
||||
return data
|
||||
return await client.call(chat.bsky.convo.getConvoForMembers, {
|
||||
// callers pass already-resolved actor dids
|
||||
members:
|
||||
members as chat.bsky.convo.getConvoForMembers.$Params['members'],
|
||||
})
|
||||
},
|
||||
onSuccess: data => {
|
||||
precacheConvoQuery(queryClient, data.convo)
|
||||
|
||||
@@ -4,10 +4,10 @@ import {
|
||||
} from '@atproto/api'
|
||||
import {useMutation, useQueryClient} from '@tanstack/react-query'
|
||||
|
||||
import {DM_SERVICE_HEADERS} from '#/lib/constants'
|
||||
import {logger} from '#/logger'
|
||||
import {invalidateJoinLinkPreviewsForConvo} from '#/state/queries/join-links'
|
||||
import {useAgent} from '#/state/session'
|
||||
import {useChatClient} from '#/state/session'
|
||||
import {chat} from '#/lexicons'
|
||||
import {
|
||||
type ConvoRequestListQueryData,
|
||||
optimisticDelete as optimisticDeleteRequest,
|
||||
@@ -38,19 +38,14 @@ export function useLeaveConvo(
|
||||
},
|
||||
) {
|
||||
const queryClient = useQueryClient()
|
||||
const agent = useAgent()
|
||||
const client = useChatClient()
|
||||
|
||||
return useMutation({
|
||||
mutationKey: RQKEY(convoId),
|
||||
mutationFn: async () => {
|
||||
if (!convoId) throw new Error('No convoId provided')
|
||||
|
||||
const {data} = await agent.chat.bsky.convo.leaveConvo(
|
||||
{convoId},
|
||||
{headers: DM_SERVICE_HEADERS, encoding: 'application/json'},
|
||||
)
|
||||
|
||||
return data
|
||||
return await client.call(chat.bsky.convo.leaveConvo, {convoId})
|
||||
},
|
||||
onMutate: () => {
|
||||
const prevConvoListQueries =
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import {ChatBskyConvoDefs, type ChatBskyConvoLockConvo} from '@atproto/api'
|
||||
import {useMutation, useQueryClient} from '@tanstack/react-query'
|
||||
|
||||
import {DM_SERVICE_HEADERS} from '#/lib/constants'
|
||||
import {useAgent} from '#/state/session'
|
||||
import {useChatClient} from '#/state/session'
|
||||
import {chat} from '#/lexicons'
|
||||
import {
|
||||
rollbackConvoOptimistic,
|
||||
updateConvoOptimistic,
|
||||
@@ -25,23 +25,15 @@ export function useLockConvo(
|
||||
},
|
||||
) {
|
||||
const queryClient = useQueryClient()
|
||||
const agent = useAgent()
|
||||
const client = useChatClient()
|
||||
|
||||
return useMutation({
|
||||
mutationFn: async ({lock}: {lock: boolean; silent?: boolean}) => {
|
||||
if (!convoId) throw new Error('No convoId provided')
|
||||
if (lock) {
|
||||
const {data} = await agent.chat.bsky.convo.lockConvo(
|
||||
{convoId},
|
||||
{headers: DM_SERVICE_HEADERS, encoding: 'application/json'},
|
||||
)
|
||||
return data
|
||||
return await client.call(chat.bsky.convo.lockConvo, {convoId})
|
||||
} else {
|
||||
const {data} = await agent.chat.bsky.convo.unlockConvo(
|
||||
{convoId},
|
||||
{headers: DM_SERVICE_HEADERS, encoding: 'application/json'},
|
||||
)
|
||||
return data
|
||||
return await client.call(chat.bsky.convo.unlockConvo, {convoId})
|
||||
}
|
||||
},
|
||||
onMutate: ({lock}) => {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import {type ChatBskyConvoMuteConvo} from '@atproto/api'
|
||||
import {useMutation, useQueryClient} from '@tanstack/react-query'
|
||||
|
||||
import {DM_SERVICE_HEADERS} from '#/lib/constants'
|
||||
import {useAgent} from '#/state/session'
|
||||
import {useChatClient} from '#/state/session'
|
||||
import {chat} from '#/lexicons'
|
||||
import {
|
||||
rollbackConvoOptimistic,
|
||||
updateConvoOptimistic,
|
||||
@@ -19,23 +19,15 @@ export function useMuteConvo(
|
||||
},
|
||||
) {
|
||||
const queryClient = useQueryClient()
|
||||
const agent = useAgent()
|
||||
const client = useChatClient()
|
||||
|
||||
return useMutation({
|
||||
mutationFn: async ({mute}: {mute: boolean}) => {
|
||||
if (!convoId) throw new Error('No convoId provided')
|
||||
if (mute) {
|
||||
const {data} = await agent.chat.bsky.convo.muteConvo(
|
||||
{convoId},
|
||||
{headers: DM_SERVICE_HEADERS, encoding: 'application/json'},
|
||||
)
|
||||
return data
|
||||
return await client.call(chat.bsky.convo.muteConvo, {convoId})
|
||||
} else {
|
||||
const {data} = await agent.chat.bsky.convo.unmuteConvo(
|
||||
{convoId},
|
||||
{headers: DM_SERVICE_HEADERS, encoding: 'application/json'},
|
||||
)
|
||||
return data
|
||||
return await client.call(chat.bsky.convo.unmuteConvo, {convoId})
|
||||
}
|
||||
},
|
||||
onMutate: ({mute}) => {
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import {type ChatBskyConvoGetUnreadCounts} from '@atproto/api'
|
||||
import {useMutation, useQueryClient} from '@tanstack/react-query'
|
||||
|
||||
import {DM_SERVICE_HEADERS} from '#/lib/constants'
|
||||
import {logger} from '#/logger'
|
||||
import {useAgent} from '#/state/session'
|
||||
import {useChatClient} from '#/state/session'
|
||||
import {chat} from '#/lexicons'
|
||||
import {RQKEY_PARTIAL as UNREAD_COUNTS_PARTIAL_KEY} from './get-unread-counts'
|
||||
import {
|
||||
type ConvoRequestListQueryData,
|
||||
@@ -29,16 +29,11 @@ export function useUpdateAllRead(
|
||||
},
|
||||
) {
|
||||
const queryClient = useQueryClient()
|
||||
const agent = useAgent()
|
||||
const client = useChatClient()
|
||||
|
||||
return useMutation({
|
||||
mutationFn: async () => {
|
||||
const {data} = await agent.chat.bsky.convo.updateAllRead(
|
||||
{status},
|
||||
{headers: DM_SERVICE_HEADERS, encoding: 'application/json'},
|
||||
)
|
||||
|
||||
return data
|
||||
return await client.call(chat.bsky.convo.updateAllRead, {status})
|
||||
},
|
||||
onMutate: () => {
|
||||
// snapshot every convo-list cache up front so onError can restore them
|
||||
|
||||
Reference in New Issue
Block a user