interstellar_ai/app/components/Login.tsx

194 lines
6.5 KiB
TypeScript
Raw Normal View History

import React, { useState, useEffect } from 'react';
2024-09-20 10:00:54 +02:00
import Settings from './Settings'; // Import the Settings component
const Login: React.FC = () => {
2024-09-20 10:00:54 +02:00
// State to handle popup visibility
const [showLoginPopup, setShowLoginPopup] = useState(false);
const [showSignUpPopup, setShowSignUpPopup] = useState(false);
2024-09-20 10:00:54 +02:00
const [isLoggedIn, setIsLoggedIn] = useState(false);
const [showSettingsPopup, setShowSettingsPopup] = useState(false);
// Credentials state
const [email, setEmail] = useState('');
const [password, setPassword] = useState('');
2024-09-26 14:57:31 +02:00
const [accountName, setAccountName] = useState('');
const [newAccountEmail, setNewAccountEmail] = useState('');
const [newAccountPassword, setNewAccountPassword] = useState('');
2024-09-25 11:33:21 +02:00
const [newAccountName, setNewAccountName] = useState('');
2024-09-20 10:00:54 +02:00
// On component mount, check if there are credentials in localStorage
useEffect(() => {
const savedAccountName = localStorage.getItem('accountName');
const savedAccountEmail = localStorage.getItem('accountEmail');
const savedAccountPassword = localStorage.getItem('accountPassword');
// If credentials are found in localStorage, log the user in
if (savedAccountName && savedAccountEmail && savedAccountPassword) {
setAccountName(savedAccountName);
setEmail(savedAccountEmail);
setPassword(savedAccountPassword);
setIsLoggedIn(true); // Automatically log in
}
}, []);
2024-09-20 10:00:54 +02:00
// Function to toggle the login popup
const toggleLoginPopup = () => setShowLoginPopup(!showLoginPopup);
// Function to toggle the sign-up popup
const toggleSignUpPopup = () => {
setShowSignUpPopup(!showSignUpPopup);
2024-09-26 14:57:31 +02:00
setShowLoginPopup(false);
2024-09-20 10:00:54 +02:00
};
// Function to handle login
const handleLogin = () => {
const savedAccountEmail = localStorage.getItem('accountEmail');
const savedAccountPassword = localStorage.getItem('accountPassword');
const savedAccountName = localStorage.getItem('accountName');
2024-09-27 09:54:38 +02:00
if (
(email === savedAccountEmail || accountName === savedAccountName) &&
password === savedAccountPassword
) {
2024-09-20 10:00:54 +02:00
setIsLoggedIn(true); // Successful login
setShowLoginPopup(false); // Close the login popup
2024-09-27 09:54:38 +02:00
// Save credentials to localStorage (optional in case of changes)
localStorage.setItem('accountName', savedAccountName || accountName);
localStorage.setItem('accountEmail', savedAccountEmail || email);
localStorage.setItem('accountPassword', savedAccountPassword || password);
2024-09-20 10:00:54 +02:00
} else {
alert('Incorrect credentials');
}
};
// Function to handle account creation
const handleCreateAccount = () => {
localStorage.setItem('accountName', newAccountName);
localStorage.setItem('accountEmail', newAccountEmail);
localStorage.setItem('accountPassword', newAccountPassword);
alert('Account created successfully! You can now log in.');
toggleSignUpPopup(); // Close sign-up popup
};
2024-09-20 10:00:54 +02:00
// Function to toggle the settings popup
const toggleSettingsPopup = () => setShowSettingsPopup(!showSettingsPopup);
return (
<div>
{/* Login or Settings Button */}
2024-09-25 11:40:17 +02:00
<button className='header-login-button' onClick={isLoggedIn ? toggleSettingsPopup : toggleLoginPopup}>
2024-09-27 09:54:38 +02:00
{isLoggedIn ? <img src="" alt="Settings" /> : 'Log In'}
2024-09-25 11:22:59 +02:00
</button>
2024-09-20 10:00:54 +02:00
{/* Conditional rendering of the Login Popup */}
{showLoginPopup && (
2024-09-20 10:00:54 +02:00
<div className="popup-overlay">
<div className="popup-content">
<h2>Log In</h2>
{/* Close Button */}
<button className="close-popup" onClick={toggleLoginPopup} aria-label="Close popup">
Close
</button>
2024-09-20 10:00:54 +02:00
{/* Name or Email Input */}
<div>
<input
type="text"
placeholder="Name or Email"
2024-09-27 09:54:38 +02:00
value={email || accountName} // Display whichever is set
onChange={(e) => {
const input = e.target.value;
setEmail(input); // Update both email and accountName states
setAccountName(input);
}}
2024-09-20 10:00:54 +02:00
/>
</div>
{/* Password Input */}
2024-09-20 10:00:54 +02:00
<div>
<input
type="password"
placeholder="Password"
value={password}
2024-09-20 10:00:54 +02:00
onChange={(e) => setPassword(e.target.value)}
/>
</div>
{/* Log In Button */}
<div>
<button className="log-into-account" onClick={handleLogin}>Log In</button>
2024-09-20 10:00:54 +02:00
</div>
{/* Text for creating an account */}
<p>
Don't have an account yet? Create one{' '}
<span
style={{ color: 'blue', cursor: 'pointer' }}
onClick={toggleSignUpPopup}
>
here
</span>
</p>
2024-09-20 10:00:54 +02:00
</div>
</div>
)}
{/* Conditional rendering of the Sign-Up Popup */}
{showSignUpPopup && (
2024-09-20 10:00:54 +02:00
<div className="popup-overlay">
<div className="popup-content">
<h2>Create Account</h2>
2024-09-20 10:00:54 +02:00
{/* New Account Email Input */}
2024-09-20 10:00:54 +02:00
<div>
<input
type="text"
placeholder="Email"
value={newAccountEmail}
onChange={(e) => setNewAccountEmail(e.target.value)}
2024-09-20 10:00:54 +02:00
/>
</div>
2024-09-26 14:57:31 +02:00
{/* New Account Name Input */}
<div>
2024-09-25 11:33:21 +02:00
<input
type="text"
placeholder="Name"
value={newAccountName}
2024-09-26 14:57:31 +02:00
onChange={(e) => setNewAccountName(e.target.value)}
2024-09-25 11:33:21 +02:00
/>
</div>
{/* New Account Password Input */}
2024-09-20 10:00:54 +02:00
<div>
<input
type="password"
placeholder="Password"
value={newAccountPassword}
onChange={(e) => setNewAccountPassword(e.target.value)}
2024-09-20 10:00:54 +02:00
/>
</div>
{/* Create Account Button */}
2024-09-20 10:00:54 +02:00
<div>
<button className="create-account" onClick={handleCreateAccount}>Create Account</button>
2024-09-20 10:00:54 +02:00
</div>
{/* Close Button */}
<button className="close-popup" onClick={toggleSignUpPopup} aria-label="Close popup">
2024-09-20 10:00:54 +02:00
Close
</button>
2024-09-26 14:57:31 +02:00
</div>
2024-09-20 10:00:54 +02:00
</div>
)}
{/* Conditional rendering of the Settings Popup */}
2024-09-27 09:54:38 +02:00
{showSettingsPopup && <Settings closeSettings={toggleSettingsPopup} accountName={accountName} />}
2024-09-20 10:00:54 +02:00
</div>
);
};
export default Login;