"use client"; import { useRouter } from "next/navigation"; import { useAuth } from "./context/AuthContext"; import { useState, useEffect } from "react"; import Link from "next/link"; import Button1 from "./ui/buttons/button1"; import { account, ID } from "./lib/appwrite"; export default function AuthPage() { const router = useRouter(); const { isAuthenticated, loading: authLoading, setIsAuthenticated } = useAuth(); const [isLoginForm, setIsLoginForm] = useState(true); const [darkMode, setDarkMode] = useState(false); const [loading, setLoading] = useState(false); const [showPassword, setShowPassword] = useState(false); // Form states const [loginData, setLoginData] = useState({ email: "", password: "", rememberMe: false, }); const [signupData, setSignupData] = useState({ fname: "", lname: "", email: "", password: "", agreeTerms: false, }); const [errors, setErrors] = useState({ agreeTerms: "", general: "", }); useEffect(() => { if (!authLoading && isAuthenticated) { router.push("/dashboard"); } }, [isAuthenticated, authLoading, router]); const handleLoginChange = (e) => { const { name, value, type, checked } = e.target; setLoginData({ ...loginData, [name]: type === "checkbox" ? checked : value, }); }; const handleSignupChange = (e) => { const { name, value, type, checked } = e.target; setSignupData({ ...signupData, [name]: type === "checkbox" ? checked : value, }); if (name === "agreeTerms") { setErrors({ ...errors, agreeTerms: "" }); } }; const validateSignupForm = () => { let isValid = true; const newErrors = { ...errors }; if (!signupData.agreeTerms) { newErrors.agreeTerms = "You must agree to the terms and conditions"; isValid = false; } else { newErrors.agreeTerms = ""; } setErrors(newErrors); return isValid; }; const handleLogin = async (e) => { e.preventDefault(); setLoading(true); setErrors({ ...errors, general: "" }); try { const session = await account.createEmailPasswordSession( loginData.email, loginData.password ); if (session) { const user = await account.get(); if (user) { localStorage.setItem("isLoggedIn", "true"); setIsAuthenticated(true); window.location.href = '/dashboard'; } } } catch (error) { let errorMessage = 'Login failed. Please try again.'; if (error.type === 'user_invalid_credentials') { errorMessage = 'Invalid email or password'; } else if (error.type === 'general_argument_invalid') { errorMessage = 'Invalid email format'; } setErrors({ ...errors, general: errorMessage }); } finally { setLoading(false); } }; const handleSignup = async (e) => { e.preventDefault(); if (!validateSignupForm()) { return; } setLoading(true); setErrors({ ...errors, general: "" }); try { await account.create( ID.unique(), signupData.email, signupData.password, `${signupData.fname} ${signupData.lname}` ); await account.createEmailPasswordSession(signupData.email, signupData.password); const user = await account.get(); if (user) { localStorage.setItem("isLoggedIn", "true"); setIsAuthenticated(true); router.push("/dashboard"); } } catch (error) { console.error("Signup error:", error); setErrors({ ...errors, general: error.message || "Signup failed. Please try again.", }); } finally { setLoading(false); } }; if (authLoading) { return (
Loading...
{isLoginForm ? "Enter your email and password to sign In!" : "Enter your deatils to create an account!"}
{isLoginForm ? "Don't have an account?" : "Already have an account?"}