"use client" import { FormError } from "@/components/forms/error" import { FormInput } from "@/components/forms/simple" import { Button } from "@/components/ui/button" import { authClient } from "@/lib/auth-client" import { useRouter } from "next/navigation" import { useState } from "react" export function LoginForm({ defaultEmail }: { defaultEmail?: string }) { const [email, setEmail] = useState(defaultEmail || "") const [otp, setOtp] = useState("") const [isOtpSent, setIsOtpSent] = useState(false) const [isLoading, setIsLoading] = useState(false) const [error, setError] = useState(null) const router = useRouter() const handleSendOtp = async (e: React.FormEvent) => { e.preventDefault() setIsLoading(true) setError(null) try { const result = await authClient.emailOtp.sendVerificationOtp({ email, type: "sign-in", }) if (result.error) { setError(result.error.message || "Failed to send the code") return } setIsOtpSent(true) } catch (err) { setError(err instanceof Error ? err.message : "Failed to send the code") } finally { setIsLoading(false) } } const handleVerifyOtp = async (e: React.FormEvent) => { e.preventDefault() setIsLoading(true) setError(null) try { const result = await authClient.signIn.emailOtp({ email, otp, }) if (result.error) { setError("The code is invalid or expired") return } router.push("/dashboard") } catch (err) { setError(err instanceof Error ? err.message : "Failed to verify the code") } finally { setIsLoading(false) } } return (
setEmail(e.target.value)} required disabled={isOtpSent} /> {isOtpSent && ( setOtp(e.target.value)} required maxLength={6} pattern="[0-9]{6}" /> )} {error && {error}} ) }