"use client"; import { useRouter } from "next/navigation"; import { useState, useTransition } from "react"; import { toast } from "sonner"; import { deleteAccountAction, resetAccountAction, } from "@/features/settings/actions"; import { Button } from "@/shared/components/ui/button"; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "@/shared/components/ui/dialog"; import { Input } from "@/shared/components/ui/input"; import { Label } from "@/shared/components/ui/label"; import { authClient } from "@/shared/lib/auth/client"; const RESET_CONFIRMATION = "ZERAR"; const DELETE_CONFIRMATION = "DELETAR"; type DangerAction = "reset" | "delete"; export function DeleteAccountForm() { const router = useRouter(); const [isPending, startTransition] = useTransition(); const [dangerAction, setDangerAction] = useState(null); const [confirmation, setConfirmation] = useState(""); const handleAction = () => { if (!dangerAction) return; const currentAction = dangerAction; startTransition(async () => { const result = currentAction === "reset" ? await resetAccountAction({ confirmation: confirmation as typeof RESET_CONFIRMATION, }) : await deleteAccountAction({ confirmation: confirmation as typeof DELETE_CONFIRMATION, }); if (result.success) { toast.success(result.message); if (currentAction === "delete") { await authClient.signOut(); router.push("/"); return; } setConfirmation(""); setDangerAction(null); router.refresh(); } else { toast.error(result.error); } }); }; const handleOpenModal = (action: DangerAction) => { setConfirmation(""); setDangerAction(action); }; const handleCloseModal = () => { if (isPending) return; setConfirmation(""); setDangerAction(null); }; const confirmationWord = dangerAction === "reset" ? RESET_CONFIRMATION : DELETE_CONFIRMATION; const isResetAction = dangerAction === "reset"; return ( <>

Zerar conta

Apaga todos os dados do OpenMonetis e deixa sua conta no estado inicial, mantendo seu login e credenciais de acesso.

  • Lançamentos, faturas, antecipações e pré-lançamentos
  • Contas, cartões, orçamentos e anotações
  • Pessoas próprios e compartilhamentos recebidos
  • Preferências do app, insights salvos e tokens do Companion
  • Categorias padrão e pessoa admin serão recriadas automaticamente

Deletar conta

Remove seu usuário e todos os dados associados de forma permanente.

  • Lançamentos, orçamentos e anotações
  • Faturas, antecipações e pré-lançamentos
  • Contas, cartões e categorias
  • Pessoas, credenciais e configurações
  • Resumindo, sua conta irá de arrasta pra cima!
{ if (!isOpen) { handleCloseModal(); } }} > { if (isPending) e.preventDefault(); }} onPointerDownOutside={(e) => { if (isPending) e.preventDefault(); }} > {isResetAction ? "Zerar sua conta?" : "Você tem certeza?"} {isResetAction ? "Essa ação não pode ser desfeita. Todos os dados do app serão apagados e sua conta voltará ao estado inicial, mas seu login continuará existindo." : "Essa ação não pode ser desfeita. Isso irá deletar permanentemente sua conta e remover seus dados de nossos servidores."}
setConfirmation(e.target.value)} disabled={isPending} placeholder={confirmationWord} autoComplete="off" />
); }