import { Button, Container, FormControl, FormErrorMessage, Heading, Input, Text, } from "@chakra-ui/react" import { useMutation } from "@tanstack/react-query" import { createFileRoute, redirect } from "@tanstack/react-router" import { type SubmitHandler, useForm } from "react-hook-form" import { type ApiError, LoginService } from "../client" import { isLoggedIn } from "../hooks/useAuth" import useCustomToast from "../hooks/useCustomToast" import { emailPattern } from "../utils" interface FormData { email: string } export const Route = createFileRoute("/recover-password")({ component: RecoverPassword, beforeLoad: async () => { if (isLoggedIn()) { throw redirect({ to: "/", }) } }, }) function RecoverPassword() { const { register, handleSubmit, reset, formState: { errors, isSubmitting }, } = useForm() const showToast = useCustomToast() const recoverPassword = async (data: FormData) => { await LoginService.recoverPassword({ email: data.email, }) } const mutation = useMutation({ mutationFn: recoverPassword, onSuccess: () => { showToast( "Email sent.", "We sent an email with a link to get back into your account.", "success", ) reset() }, onError: (err: ApiError) => { const errDetail = (err.body as any)?.detail showToast("Something went wrong.", `${errDetail}`, "error") }, }) const onSubmit: SubmitHandler = async (data) => { mutation.mutate(data) } return ( Password Recovery A password recovery email will be sent to the registered account. {errors.email && ( {errors.email.message} )} ) }