c52231a449
Co-authored-by: Samuel Newman <mozzius@protonmail.com>
75 lines
2.0 KiB
TypeScript
75 lines
2.0 KiB
TypeScript
import {
|
|
ChatBskyConvoDefs,
|
|
type ChatBskyGroupDisableJoinLink,
|
|
} from '@atproto/api'
|
|
import {useMutation, useQueryClient} from '@tanstack/react-query'
|
|
|
|
import {DM_SERVICE_HEADERS} from '#/lib/constants'
|
|
import {logger} from '#/logger'
|
|
import {invalidateJoinLinkPreviewsForCode} from '#/state/queries/join-links'
|
|
import {useAgent} from '#/state/session'
|
|
import {
|
|
rollbackConvoOptimistic,
|
|
updateConvoOptimistic,
|
|
} from './utils/convo-cache'
|
|
|
|
export function useDisableJoinLink(
|
|
convoId: string | undefined,
|
|
{
|
|
onSuccess,
|
|
onError,
|
|
}: {
|
|
onSuccess?: (data: ChatBskyGroupDisableJoinLink.OutputSchema) => void
|
|
onError?: (error: Error) => void
|
|
},
|
|
) {
|
|
const queryClient = useQueryClient()
|
|
const agent = useAgent()
|
|
|
|
return useMutation({
|
|
mutationFn: async () => {
|
|
if (!convoId) throw new Error('No convoId provided')
|
|
const {data} = await agent.chat.bsky.group.disableJoinLink(
|
|
{convoId},
|
|
{headers: DM_SERVICE_HEADERS, encoding: 'application/json'},
|
|
)
|
|
return data
|
|
},
|
|
onMutate: () => {
|
|
if (!convoId) return
|
|
return updateConvoOptimistic(queryClient, convoId, prev => {
|
|
if (!ChatBskyConvoDefs.isGroupConvo(prev.kind) || !prev.kind.joinLink) {
|
|
return undefined
|
|
}
|
|
return {
|
|
...prev,
|
|
kind: {
|
|
...prev.kind,
|
|
joinLink: {...prev.kind.joinLink, enabledStatus: 'disabled'},
|
|
},
|
|
}
|
|
})
|
|
},
|
|
onSuccess: data => {
|
|
if (convoId) {
|
|
updateConvoOptimistic(queryClient, convoId, prev => {
|
|
if (!ChatBskyConvoDefs.isGroupConvo(prev.kind)) return undefined
|
|
return {
|
|
...prev,
|
|
kind: {...prev.kind, joinLink: data.joinLink},
|
|
}
|
|
})
|
|
}
|
|
void invalidateJoinLinkPreviewsForCode(queryClient, data.joinLink.code)
|
|
onSuccess?.(data)
|
|
},
|
|
onError: (e, _variables, context) => {
|
|
logger.error(e)
|
|
if (convoId && context) {
|
|
rollbackConvoOptimistic(queryClient, convoId, context)
|
|
}
|
|
onError?.(e)
|
|
},
|
|
})
|
|
}
|