import type { ActionArgs, LoaderArgs, V2_MetaFunction } from "@remix-run/node"; import { json, redirect } from "@remix-run/node"; import { Form, Link, useActionData, useLoaderData } from "@remix-run/react"; import { useRef, useEffect } from "react"; import { deleteUserByEmail, updateUser, verifyLogin, } from "~/models/user.server"; import { logout, requireUser } from "~/session.server"; export const action = async ({ request }: ActionArgs) => { const user = await requireUser(request); const formData = await request.formData(); const password = formData.get("password"); if (request.method !== "DELETE") { return json({ errors: { password: null } }, { status: 422 }); } if (typeof password !== "string" || password.length === 0) { return json( { errors: { password: "Password is required" } }, { status: 400 } ); } if (password.length < 8) { return json( { errors: { password: "Password is too short" } }, { status: 400 } ); } const checkedUser = await verifyLogin(user.email, password); if (!checkedUser) { return json( { errors: { password: "Password is not correct" } }, { status: 400 } ); } await deleteUserByEmail(user.email); return logout(request); }; export const meta: V2_MetaFunction = () => [{ title: "Account | TranslAIte" }]; export default function Account() { const actionData = useActionData(); const passwordRef = useRef(null); useEffect(() => { if (actionData?.errors?.password) { passwordRef.current?.focus(); } }, [actionData]); return ( { window.history.back(); }} className="position-fixed left-1/2 top-1/2 m-auto w-full max-w-md -translate-x-1/2 -translate-y-1/2 transform space-y-6 rounded-lg bg-white px-8 py-8 shadow-lg" >

Are you sure you want to delete your account? This action cannot be undone.

Type your password to confirm

{actionData?.errors?.password ? (
{actionData.errors.password}
) : null}
); }