c995eb2f2f
* improve error screen * add chat request prompt * mock up inbox * bigger button * use two-button layout * get inbox working somewhat * fix type errors * fetch both pages for badge * don't include read convos in preview * in-chat ui for non-accepted convos (part 1) * add chatstatusinfo * fix status info not disappearing * get chat status info working * change min item height * move files around * add updated sdk * improve badge behaviour * mock up mark all as read * update sdk to 0.14.4 * hide chat status info if initiating convo * fix unread count for deleted accounts * add toasts after rejection * add prompt to delete * adjust badge on desktop * requests -> chat requests * fix height flicker * add mark as read button to header * add mark all as read APIs * separate avatarstack into two components (#7845) * fix messages being hidden behind chatstatusinfo * show inbox preview on empty state * fix empty state again * Use new convo availability API (#7812) * [Inbox] Accept button on convo screen (#7795) * accept button on convo screen * fix types * fix type error * improve spacing * [DMs] Implement new log types (#7835) * optimise badge state * add read message log * add isLogAcceptConvo * mute/unmute convo logs * use setqueriesdata * always show label on button * optimistically update badge * change incorrect unread count change * Update src/screens/Messages/Inbox.tsx Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> * Update src/screens/Messages/components/RequestButtons.tsx Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> * Update src/screens/Messages/components/RequestButtons.tsx Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> * Update src/screens/Messages/components/RequestListItem.tsx Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> * fix race condition with accepting convo * fix back button on web * filter left convos from badge * update atproto to fix CI * Add accept override external to convo (#7891) * Add accept override external to convo * rm log --------- Co-authored-by: Samuel Newman <mozzius@protonmail.com> --------- Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> Co-authored-by: Eric Bailey <git@esb.lol>
80 lines
2.1 KiB
TypeScript
80 lines
2.1 KiB
TypeScript
import {
|
|
ChatBskyConvoDefs,
|
|
ChatBskyConvoListConvos,
|
|
ChatBskyConvoMuteConvo,
|
|
} from '@atproto/api'
|
|
import {InfiniteData, useMutation, useQueryClient} from '@tanstack/react-query'
|
|
|
|
import {DM_SERVICE_HEADERS} from '#/state/queries/messages/const'
|
|
import {useAgent} from '#/state/session'
|
|
import {RQKEY as CONVO_KEY} from './conversation'
|
|
import {RQKEY_ROOT as CONVO_LIST_KEY} from './list-conversations'
|
|
|
|
export function useMuteConvo(
|
|
convoId: string | undefined,
|
|
{
|
|
onSuccess,
|
|
onError,
|
|
}: {
|
|
onSuccess?: (data: ChatBskyConvoMuteConvo.OutputSchema) => void
|
|
onError?: (error: Error) => void
|
|
},
|
|
) {
|
|
const queryClient = useQueryClient()
|
|
const agent = useAgent()
|
|
|
|
return useMutation({
|
|
mutationFn: async ({mute}: {mute: boolean}) => {
|
|
if (!convoId) throw new Error('No convoId provided')
|
|
if (mute) {
|
|
const {data} = await agent.api.chat.bsky.convo.muteConvo(
|
|
{convoId},
|
|
{headers: DM_SERVICE_HEADERS, encoding: 'application/json'},
|
|
)
|
|
return data
|
|
} else {
|
|
const {data} = await agent.api.chat.bsky.convo.unmuteConvo(
|
|
{convoId},
|
|
{headers: DM_SERVICE_HEADERS, encoding: 'application/json'},
|
|
)
|
|
return data
|
|
}
|
|
},
|
|
onSuccess: (data, params) => {
|
|
queryClient.setQueryData<ChatBskyConvoDefs.ConvoView>(
|
|
CONVO_KEY(data.convo.id),
|
|
prev => {
|
|
if (!prev) return
|
|
return {
|
|
...prev,
|
|
muted: params.mute,
|
|
}
|
|
},
|
|
)
|
|
queryClient.setQueryData<
|
|
InfiniteData<ChatBskyConvoListConvos.OutputSchema>
|
|
>([CONVO_LIST_KEY], prev => {
|
|
if (!prev?.pages) return
|
|
return {
|
|
...prev,
|
|
pages: prev.pages.map(page => ({
|
|
...page,
|
|
convos: page.convos.map(convo => {
|
|
if (convo.id !== data.convo.id) return convo
|
|
return {
|
|
...convo,
|
|
muted: params.mute,
|
|
}
|
|
}),
|
|
})),
|
|
}
|
|
})
|
|
|
|
onSuccess?.(data)
|
|
},
|
|
onError: e => {
|
|
onError?.(e)
|
|
},
|
|
})
|
|
}
|