import { HTMLAttributes, useState } from 'react' import { z } from 'zod' import { useForm } from 'react-hook-form' import { zodResolver } from '@hookform/resolvers/zod' import { useNavigate } from '@tanstack/react-router' import { cn } from '@/lib/utils' import { showSubmittedData } from '@/utils/show-submitted-data' import { Button } from '@/components/ui/button' import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from '@/components/ui/form' import { InputOTP, InputOTPGroup, InputOTPSlot, InputOTPSeparator, } from '@/components/ui/input-otp' type OtpFormProps = HTMLAttributes const formSchema = z.object({ otp: z.string().min(1, { message: 'Please enter your otp code.' }), }) export function OtpForm({ className, ...props }: OtpFormProps) { const navigate = useNavigate() const [isLoading, setIsLoading] = useState(false) const form = useForm>({ resolver: zodResolver(formSchema), defaultValues: { otp: '' }, }) const otp = form.watch('otp') function onSubmit(data: z.infer) { setIsLoading(true) showSubmittedData(data) setTimeout(() => { setIsLoading(false) navigate({ to: '/' }) }, 1000) } return (
( One-Time Password )} /> ) }