Add authentication pages and routing;

This commit is contained in:
Anton Kupriianov 2025-04-16 12:02:42 -07:00
parent 18bd3aa7e9
commit ef85ff6d24
13 changed files with 661 additions and 28 deletions

64
src/pages/LoginPage.jsx Normal file
View file

@ -0,0 +1,64 @@
// Page - Login
import { useEffect, useState } from "react";
import SignInForm from "./SignIn";
import SignUpForm from "./SignUp";
import "../scss/styles.scss";
const LoginPage = () => {
const [type, setType] = useState("signIn");
useEffect(() => {
document.title = "Login / Sign Up";
}, []);
const handleOnClick = (text) => {
if (text !== type) {
setType(text);
}
};
const containerClass =
"container " + (type === "signUp" ? "right-panel-active" : "");
return (
<main className="login-page">
<section>
<h2>Sign In/Sign Up</h2>
<div className={containerClass} id="container">
<SignUpForm />
<SignInForm />
<div className="overlay-container">
<div className="overlay">
<div className="overlay-panel overlay-left">
<h1>Welcome Back!</h1>
<p>
To keep connected with us please login with your personal info
</p>
<button
className="ghost"
id="signIn"
onClick={() => handleOnClick("signIn")}
>
Sign In
</button>
</div>
<div className="overlay-panel overlay-right">
<h1>Hello, Friend!</h1>
<p>Enter your personal details and start journey with us</p>
<button
className="ghost"
id="signUp"
onClick={() => handleOnClick("signUp")}
>
Sign Up
</button>
</div>
</div>
</div>
</div>
</section>
</main>
);
};
export default LoginPage;

68
src/pages/SignIn.jsx Normal file
View file

@ -0,0 +1,68 @@
import React from "react";
import "@fortawesome/fontawesome-free/css/all.min.css";
function SignInForm() {
const [state, setState] = React.useState({
email: "",
password: "",
});
const handleChange = (evt) => {
const value = evt.target.value;
setState({
...state,
[evt.target.name]: value,
});
};
const handleOnSubmit = (evt) => {
evt.preventDefault();
const { email, password } = state;
alert(`You are login with email: ${email} and password: ${password}`);
for (const key in state) {
setState({
...state,
[key]: "",
});
}
};
return (
<div className="form-container sign-in-container">
<form onSubmit={handleOnSubmit}>
<h1>Sign in</h1>
<div className="social-container">
<a href="#" className="social">
<i className="fab fa-facebook-f" />
</a>
<a href="#" className="social">
<i className="fab fa-google-plus-g" />
</a>
<a href="#" className="social">
<i className="fab fa-linkedin-in" />
</a>
</div>
<span>or use your account</span>
<input
type="email"
placeholder="Email"
name="email"
value={state.email}
onChange={handleChange}
/>
<input
type="password"
name="password"
placeholder="Password"
value={state.password}
onChange={handleChange}
/>
<a href="#">Forgot your password?</a>
<button>Sign In</button>
</form>
</div>
);
}
export default SignInForm;

75
src/pages/SignUp.jsx Normal file
View file

@ -0,0 +1,75 @@
import React from "react";
function SignUpForm() {
const [state, setState] = React.useState({
name: "",
email: "",
password: "",
});
const handleChange = (evt) => {
const value = evt.target.value;
setState({
...state,
[evt.target.name]: value,
});
};
const handleOnSubmit = (evt) => {
evt.preventDefault();
const { name, email, password } = state;
alert(
`You are sign up with name: ${name} email: ${email} and password: ${password}`
);
for (const key in state) {
setState({
...state,
[key]: "",
});
}
};
return (
<div className="form-container sign-up-container">
<form onSubmit={handleOnSubmit}>
<h1>Create Account</h1>
<div className="social-container">
<a href="#" className="social">
<i className="fab fa-facebook-f" />
</a>
<a href="#" className="social">
<i className="fab fa-google-plus-g" />
</a>
<a href="#" className="social">
<i className="fab fa-linkedin-in" />
</a>
</div>
<span>or use your email for registration</span>
<input
type="text"
name="name"
value={state.name}
onChange={handleChange}
placeholder="Name"
/>
<input
type="email"
name="email"
value={state.email}
onChange={handleChange}
placeholder="Email"
/>
<input
type="password"
name="password"
value={state.password}
onChange={handleChange}
placeholder="Password"
/>
<button>Sign Up</button>
</form>
</div>
);
}
export default SignUpForm;