import { ClientResponseError } from '@atcute/client';
import { isNetworkError } from '#/lib/errors';
import { useLeaveConvo } from '#/state/queries/messages/leave-conversation';
import * as Prompt from '#/components/Prompt';
import * as Toast from '#/components/Toast';
import { m } from '#/paraglide/messages';
import { useRouter } from '#/router';
export function LeaveConvoPrompt({
handle,
convoId,
currentScreen,
hasMessages = true,
}: {
handle: Prompt.PromptHandle;
convoId: string;
currentScreen: 'list' | 'conversation';
hasMessages?: boolean;
}) {
const router = useRouter();
const { mutate: leaveConvo } = useLeaveConvo(convoId, {
onMutate: () => {
if (currentScreen === 'conversation') {
router.navigate({ replace: true, to: { name: 'Messages' } });
}
},
onError: (error) => {
let errorMessage = m['components.dms.leave.error.leave']();
if (isNetworkError(error)) {
errorMessage = m['common.error.network']();
} else if (error instanceof ClientResponseError && error.error === 'InvalidConvo') {
errorMessage = m['common.chat.error.notFound']();
} else if (error instanceof ClientResponseError && error.error === 'OwnerCannotLeave') {
errorMessage = m['components.dms.leave.error.ownerMustLock']();
}
Toast.show(errorMessage, { type: 'error' });
},
});
return (
<Prompt.Basic
handle={handle}
title={m['components.dms.leave.action.conversation']()}
description={hasMessages ? m['components.dms.leave.groupPrompt']() : m['components.dms.leave.prompt']()}
confirmButtonCta={m['common.action.leave']()}
confirmButtonColor="negative"
onConfirm={() => leaveConvo()}
/>
);
}