"use client"; import { useState, useEffect } from "react"; import { Button } from "@/components/ui/button"; import { useAppTheme } from "@/components/ThemeProvider"; import { Input } from "@/components/ui/input"; import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import { Eye, EyeOff, Loader2, X } from "lucide-react"; import { useAuth } from "@/hooks/useAuth"; import { loginSchema, type LoginInput } from "@/lib/schema/auth"; import { toast } from "sonner"; import { useRouter } from "next/navigation"; import { ForgotPasswordDialog } from "./ForgotPasswordDialog"; interface LoginDialogProps { open: boolean; onOpenChange: (open: boolean) => void; onLoginSuccess: () => void; prefillEmail?: string; onSwitchToSignup?: () => void; } // Login Dialog component export function LoginDialog({ open, onOpenChange, onLoginSuccess, prefillEmail, onSwitchToSignup }: LoginDialogProps) { const { theme } = useAppTheme(); const isDark = theme === "dark"; const router = useRouter(); const { login, loginMutation } = useAuth(); const [loginData, setLoginData] = useState({ email: "", password: "", }); const [showPassword, setShowPassword] = useState(false); const [forgotPasswordDialogOpen, setForgotPasswordDialogOpen] = useState(false); // Pre-fill email if provided useEffect(() => { if (prefillEmail && open) { setLoginData(prev => ({ ...prev, email: prefillEmail })); } }, [prefillEmail, open]); const handleLogin = async (e: React.FormEvent) => { e.preventDefault(); // Validate form const validation = loginSchema.safeParse(loginData); if (!validation.success) { const firstError = validation.error.issues[0]; toast.error(firstError.message); return; } try { const result = await login(loginData); if (result.tokens && result.user) { toast.success("Login successful!"); setShowPassword(false); onOpenChange(false); // Reset form setLoginData({ email: "", password: "" }); // Redirect to user dashboard router.push("/user/dashboard"); onLoginSuccess(); } } catch (err) { const errorMessage = err instanceof Error ? err.message : "Login failed. Please try again."; toast.error(errorMessage); } }; // Reset form when dialog closes const handleDialogChange = (isOpen: boolean) => { if (!isOpen) { setLoginData({ email: "", password: "" }); } onOpenChange(isOpen); }; return ( {/* Header with Close Button - Fixed */}
Welcome back Please log in to complete your booking {/* Close Button */}
{/* Scrollable Content */}
{/* Login Form */}
{/* Email Field */}
setLoginData({ ...loginData, email: e.target.value })} className={`h-11 sm:h-12 text-sm sm:text-base ${isDark ? 'bg-gray-700 border-gray-600 text-white placeholder:text-gray-400' : 'bg-white border-gray-300 text-gray-900'}`} required />
{/* Password Field */}
setLoginData({ ...loginData, password: e.target.value })} className={`h-11 sm:h-12 pr-12 text-sm sm:text-base ${isDark ? 'bg-gray-700 border-gray-600 text-white placeholder:text-gray-400' : 'bg-white border-gray-300 text-gray-900'}`} required />
{/* Submit Button */} {/* Forgot Password */}
{/* Sign Up Prompt */}

New to Attune Heart Therapy?{" "}

{/* Forgot Password Dialog */}
); }