import { useState, useEffect } from "react"; import { FiEye, FiEyeOff } from "react-icons/fi"; import { Link, useNavigate } from "react-router-dom"; import toast from "react-hot-toast"; // Import React Hot Toast const API_URL = import.meta.env.VITE_API_URL; // Using .env variable const Login = () => { const [showPassword, setShowPassword] = useState(false); const [email, setEmail] = useState(""); const [password, setPassword] = useState(""); const [loading, setLoading] = useState(false); const navigate = useNavigate(); // For navigation useEffect(() => { // Check if token is present in localStorage and redirect to Dashboard if (localStorage.getItem("token")) { navigate("/dashboard"); // Redirect to Dashboard } }, [navigate]); const togglePassword = () => { setShowPassword(!showPassword); }; const handleSubmit = async (e) => { e.preventDefault(); setLoading(true); // Show loading toast const toastId = toast.loading("Logging in..."); try { const response = await fetch(`${API_URL}/api/login`, { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ email, password, }), }); const data = await response.json(); // Dismiss the loading toast after the response toast.dismiss(toastId); if (response.ok) { // On success, store the token in localStorage localStorage.setItem("token", data.token); localStorage.setItem("expiresIn", data.expiresIn); fetch(`${API_URL}/api/hdfs/getUsernameByEmail?email=${email}`) .then((response) => response.text()) .then((username) => { localStorage.setItem("username", username); }) .catch((error) => { console.error("Error fetching username:", error); }); // Show success toast toast.success("Login successful!"); // Redirect to Dashboard navigate("/dashboard"); } else { // Show error toast if login fails toast.error(data.message || "Login failed."); } } catch (error) { // Dismiss the loading toast and show error toast.dismiss(toastId); toast.error("An error occurred. Please try again.", error); } finally { setLoading(false); } }; return (
Don’t have an account?{" "} Sign up