diff --git a/src/pages/Signup/Signup.tsx b/src/pages/Signup/Signup.tsx index d03a921..0f104c8 100644 --- a/src/pages/Signup/Signup.tsx +++ b/src/pages/Signup/Signup.tsx @@ -1,8 +1,11 @@ -import React, { useState } from "react"; +import React, { useState, ChangeEvent, FormEvent, useContext } from "react"; import axios from "axios"; -import { useNavigate ,Link } from "react-router-dom"; -import { User, Mail, Lock } from "lucide-react"; +import { useNavigate, Link } from "react-router-dom"; +import { ThemeContext } from "../../context/ThemeContext"; +import type { ThemeContextType } from "../../context/ThemeContext"; + const backendUrl = import.meta.env.VITE_BACKEND_URL; + interface SignUpFormData { username: string; email: string; @@ -10,153 +13,205 @@ interface SignUpFormData { } const SignUp: React.FC = () => { - const [formData, setFormData] = useState({ - username: "", - email: "", - password: "" + const [formData, setFormData] = useState({ + username: "", + email: "", + password: "", }); const [message, setMessage] = useState(""); -const navigate = useNavigate(); - const handleChange = (e: React.ChangeEvent) => { + const [isLoading, setIsLoading] = useState(false); + + const navigate = useNavigate(); + const themeContext = useContext(ThemeContext) as ThemeContextType; + const { mode } = themeContext; + + const handleChange = (e: ChangeEvent) => { const { name, value } = e.target; setFormData({ ...formData, [name]: value }); }; - const handleSubmit = async (e: React.FormEvent) => { + const handleSubmit = async (e: FormEvent) => { e.preventDefault(); + setIsLoading(true); + try { - const response = await axios.post(`${backendUrl}/api/auth/signup`, - formData // Include cookies for session - ); - setMessage(response.data.message); // Show success message from backend - - // Navigate to login page after successful signup - if (response.data.message === 'User created successfully') { - navigate("/login");} - - - // // Simulate API call (replace with your actual backend integration) - // try { - // // Mock successful signup - // setMessage("Account created successfully! Redirecting to login..."); - - // // In your actual implementation, integrate with your backend here: - // // const response = await fetch(`${backendUrl}/api/auth/signup`, { - // // method: 'POST', - // // headers: { 'Content-Type': 'application/json' }, - // // body: JSON.stringify(formData) - // // }); - - // setTimeout(() => { - // // Navigate to login page in your actual implementation - // console.log("Redirecting to login page..."); - // }, 2000); - - } catch (error) { - setMessage("Something went wrong. Please try again."); + const response = await axios.post(`${backendUrl}/api/auth/signup`, formData); + setMessage(response.data.message); + + if (response.data.message === "User created successfully") { + navigate("/login"); + } + } catch (error: any) { + setMessage(error.response?.data?.message || "Something went wrong"); + } finally { + setIsLoading(false); } }; return ( -
- {/* Background decorative elements */} -
-
-
+
+ {/* Animated background elements */} +
+
+
+
+
-
- {/* Logo and Title */} -
-
- Logo -
-

GitHubTracker

-

Join your GitHub journey

+
+ {/* Branding */} +
+
+ Logo +
+ +

+ GitHubTracker +

+

+ Join your GitHub journey +

- {/* Sign Up Form */} -
-

Create Account

- -
-
-
- -
- -
+ {/* Form Card */} +
+

+ Create Account +

-
-
- -
- -
+
+ -
-
- -
- -
+ + + -
+ + {/* Message */} {message && ( -
+
{message}
)} -
-

- Already have an account?{' '} - - + {/* Footer Text */} +

+

+ Already have an account? + + Sign in here

+ +
); }; -export default SignUp; \ No newline at end of file +export default SignUp;