import { Button } from "@/components/ui/button"; import { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, } from "@/components/ui/form"; import { CardTitle } from "@/components/ui/card"; import { api } from "@/utils/api"; import { zodResolver } from "@hookform/resolvers/zod"; import { AlertTriangle } from "lucide-react"; import { useEffect } from "react"; import { useForm } from "react-hook-form"; import { toast } from "sonner"; import { z } from "zod"; import { InputOTP, InputOTPGroup, InputOTPSlot, } from "@/components/ui/input-otp"; import { useRouter } from "next/router"; const Login2FASchema = z.object({ pin: z.string().min(6, { message: "Pin is required", }), }); type Login2FA = z.infer; interface Props { authId: string; } export const Login2FA = ({ authId }: Props) => { const { push } = useRouter(); const { mutateAsync, isLoading, isError, error } = api.auth.verifyLogin2FA.useMutation(); const form = useForm({ defaultValues: { pin: "", }, resolver: zodResolver(Login2FASchema), }); useEffect(() => { form.reset({ pin: "", }); }, [form, form.reset, form.formState.isSubmitSuccessful]); const onSubmit = async (data: Login2FA) => { await mutateAsync({ pin: data.pin, id: authId, }) .then(() => { toast.success("Signin successfully", { duration: 2000, }); push("/dashboard/projects"); }) .catch(() => { toast.error("Signin failed", { duration: 2000, }); }); }; return (
{isError && (
{error?.message}
)} 2FA Setup ( Pin Please enter the 6 digits code provided by your authenticator app. )} /> ); };