'use client'; import { useRouter } from 'next/navigation'; import { zodResolver } from '@hookform/resolvers/zod'; import { Loader } from 'lucide-react'; import { useForm } from 'react-hook-form'; import { z } from 'zod'; import { trpc } from '@documenso/trpc/react'; import { cn } from '@documenso/ui/lib/utils'; import { Button } from '@documenso/ui/primitives/button'; import { Input } from '@documenso/ui/primitives/input'; import { Label } from '@documenso/ui/primitives/label'; import { useToast } from '@documenso/ui/primitives/use-toast'; export const ZResetPasswordFormSchema = z .object({ password: z.string().min(6).max(72), repeatedPassword: z.string().min(6).max(72), }) .refine((data) => data.password === data.repeatedPassword, { path: ['repeatedPassword'], message: "Password don't match", }); export type TResetPasswordFormSchema = z.infer; export type ResetPasswordFormProps = { className?: string; token: string; }; export const ResetPasswordForm = ({ className, token }: ResetPasswordFormProps) => { const router = useRouter(); const { toast } = useToast(); const { register, reset, handleSubmit, formState: { errors, isSubmitting }, } = useForm({ values: { password: '', repeatedPassword: '', }, resolver: zodResolver(ZResetPasswordFormSchema), }); const { mutateAsync: resetPassword } = trpc.profile.resetPassword.useMutation(); const onFormSubmit = async ({ password, repeatedPassword }: TResetPasswordFormSchema) => { // TODO: Handle error with try/catch console.log(password, repeatedPassword, token); await resetPassword({ password, token, }); reset(); toast({ title: 'Password updated', description: 'Your password has been updated successfully.', duration: 5000, }); router.push('/signin'); }; return (
{errors.password && ( {errors.password.message} )}
{errors.repeatedPassword && ( {errors.repeatedPassword.message} )}
); };