[#37] Login & Register Page UI https://project.mdnd-it.cc/work_packages/37 #3
@@ -1,3 +1,6 @@
|
|||||||
|
// src/components/Inputs/InputBox.jsx
|
||||||
|
// Gomb komponens
|
||||||
|
|
||||||
import { motion } from "framer-motion";
|
import { motion } from "framer-motion";
|
||||||
|
|
||||||
export default function Button({ text, type, onClick }) {
|
export default function Button({ text, type, onClick }) {
|
||||||
|
|||||||
@@ -1,10 +1,15 @@
|
|||||||
export default function InputBox({ type, placeholder }) {
|
// src/components/Inputs/InputBox.jsx
|
||||||
|
// InputBox komponens
|
||||||
|
|
||||||
|
export default function InputBox({ type, placeholder, value, onChange }) {
|
||||||
return (
|
return (
|
||||||
<div className="mb-6 relative">
|
<div className="mb-6 relative">
|
||||||
<input
|
<input
|
||||||
type={type}
|
type={type}
|
||||||
className="w-full px-4 py-3 border border-gray-300 rounded-lg focus:border-background focus:outline-none text-gray-700 placeholder-gray-400 bg-gray-50"
|
className="w-full px-4 py-3 border border-gray-300 rounded-lg focus:border-background focus:outline-none text-gray-700 placeholder-gray-400 bg-gray-50"
|
||||||
placeholder={placeholder}
|
placeholder={placeholder}
|
||||||
|
value={value}
|
||||||
|
onChange={onChange}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,3 +1,6 @@
|
|||||||
|
// src/pages/Auth/AuthLogin.jsx
|
||||||
|
// Kártya amelyiken a bejelentkezés és regisztráció van
|
||||||
|
|
||||||
import { motion, AnimatePresence } from "framer-motion";
|
import { motion, AnimatePresence } from "framer-motion";
|
||||||
import Animation from "../../assets/SerpentRace_Animation/SerpentRace_Animation";
|
import Animation from "../../assets/SerpentRace_Animation/SerpentRace_Animation";
|
||||||
import LoginForm from "./LoginForm";
|
import LoginForm from "./LoginForm";
|
||||||
@@ -20,7 +23,7 @@ export default function AuthCard({ isRegistering, setIsRegistering }) {
|
|||||||
<div className="h-6" />
|
<div className="h-6" />
|
||||||
<Animation sizePercentage={30} />
|
<Animation sizePercentage={30} />
|
||||||
<p className="text-lg mt-0 text-center font-light whitespace-nowrap overflow-hidden">
|
<p className="text-lg mt-0 text-center font-light whitespace-nowrap overflow-hidden">
|
||||||
Baszódj meg te kurva!
|
Lépj be és légy a legjobb!
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// pages/Auth.js
|
// src/pages/Auth/AuthLogin.jsx
|
||||||
// Login url címre érkezés (registering = false)
|
// Login url címre érkezés (registering = false)
|
||||||
|
|
||||||
import { useState } from "react";
|
import { useState } from "react";
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// pages/Auth.js
|
// src/pages/Auth/AuthRegister.jsx
|
||||||
// Register url címre érkezés (registering = true)
|
// Register url címre érkezés (registering = true)
|
||||||
|
|
||||||
import { useState } from "react";
|
import { useState } from "react";
|
||||||
@@ -11,7 +11,6 @@ export default function AuthRegister() {
|
|||||||
return (
|
return (
|
||||||
<div className="relative flex items-center justify-center min-h-screen bg-gray-100 p-0 font-poppins">
|
<div className="relative flex items-center justify-center min-h-screen bg-gray-100 p-0 font-poppins">
|
||||||
<Background />
|
<Background />
|
||||||
|
|
||||||
<AuthCard isRegistering={isRegistering} setIsRegistering={setIsRegistering} />
|
<AuthCard isRegistering={isRegistering} setIsRegistering={setIsRegistering} />
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,9 +1,35 @@
|
|||||||
// components/LoginForm.js
|
// src/pages/Auth/LoginForm.jsx
|
||||||
|
// Bejelentkezési űrlap
|
||||||
|
|
||||||
import InputBox from "../../components/Inputs/InputBox";
|
import InputBox from "../../components/Inputs/InputBox";
|
||||||
import Button from "../../components/Buttons/Button";
|
import Button from "../../components/Buttons/Button";
|
||||||
import { motion } from "framer-motion";
|
import { motion } from "framer-motion";
|
||||||
|
import { useState } from "react";
|
||||||
|
|
||||||
export default function LoginForm() {
|
export default function LoginForm() {
|
||||||
|
const [email, setEmail] = useState("");
|
||||||
|
const [password, setPassword] = useState("");
|
||||||
|
const [error, setError] = useState("");
|
||||||
|
|
||||||
|
function validateEmail(email) {
|
||||||
|
return /\S+@\S+\.\S+/.test(email);
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleSubmit = (e) => {
|
||||||
|
e.preventDefault();
|
||||||
|
setError("");
|
||||||
|
if (!email || !password) {
|
||||||
|
setError("Minden mező kitöltése kötelező.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!validateEmail(email)) {
|
||||||
|
setError("Hibás email formátum.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// Backend API
|
||||||
|
console.log("Bejelentkezés:", { email, password });
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<motion.div
|
<motion.div
|
||||||
key="login"
|
key="login"
|
||||||
@@ -13,9 +39,22 @@ export default function LoginForm() {
|
|||||||
transition={{ duration: 0.25 }}
|
transition={{ duration: 0.25 }}
|
||||||
>
|
>
|
||||||
<h2 className="text-4xl font-extrabold text-center mb-6 text-gray-800 tracking-wide">Bejelentkezés</h2>
|
<h2 className="text-4xl font-extrabold text-center mb-6 text-gray-800 tracking-wide">Bejelentkezés</h2>
|
||||||
<form>
|
{error && (
|
||||||
<InputBox type="email" placeholder="Email cím" />
|
<div className="mb-4 text-red-600 text-center font-semibold">{error}</div>
|
||||||
<InputBox type="password" placeholder="Jelszó" />
|
)}
|
||||||
|
<form onSubmit={handleSubmit}>
|
||||||
|
<InputBox
|
||||||
|
type="email"
|
||||||
|
placeholder="Email cím"
|
||||||
|
value={email}
|
||||||
|
onChange={e => setEmail(e.target.value)}
|
||||||
|
/>
|
||||||
|
<InputBox
|
||||||
|
type="password"
|
||||||
|
placeholder="Jelszó"
|
||||||
|
value={password}
|
||||||
|
onChange={e => setPassword(e.target.value)}
|
||||||
|
/>
|
||||||
<Button text="Bejelentkezés" type="submit" />
|
<Button text="Bejelentkezés" type="submit" />
|
||||||
</form>
|
</form>
|
||||||
</motion.div>
|
</motion.div>
|
||||||
|
|||||||
@@ -1,9 +1,47 @@
|
|||||||
// components/RegisterForm.js
|
// src/pages/Auth/RegisterForm.jsx
|
||||||
|
// Regisztrációs űrlap
|
||||||
|
|
||||||
import InputBox from "../../components/Inputs/InputBox";
|
import InputBox from "../../components/Inputs/InputBox";
|
||||||
import Button from "../../components/Buttons/Button";
|
import Button from "../../components/Buttons/Button";
|
||||||
import { motion } from "framer-motion";
|
import { motion } from "framer-motion";
|
||||||
|
import { useState } from "react";
|
||||||
|
|
||||||
export default function RegisterForm() {
|
export default function RegisterForm() {
|
||||||
|
const [fullName, setFullName] = useState("");
|
||||||
|
const [username, setUsername] = useState("");
|
||||||
|
const [email, setEmail] = useState("");
|
||||||
|
const [password, setPassword] = useState("");
|
||||||
|
const [confirmPassword, setConfirmPassword] = useState("");
|
||||||
|
const [error, setError] = useState("");
|
||||||
|
|
||||||
|
function validateEmail(email) {
|
||||||
|
return /\S+@\S+\.\S+/.test(email);
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleSubmit = (e) => {
|
||||||
|
e.preventDefault();
|
||||||
|
setError("");
|
||||||
|
|
||||||
|
if (!fullName || !username || !email || !password || !confirmPassword) {
|
||||||
|
setError("Minden mező kitöltése kötelező.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!validateEmail(email)) {
|
||||||
|
setError("Hibás email formátum.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (password.length < 6) {
|
||||||
|
setError("A jelszónak legalább 6 karakter hosszúnak kell lennie.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (password !== confirmPassword) {
|
||||||
|
setError("A jelszavak nem egyeznek.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// Backend API
|
||||||
|
console.log("Regisztráció:", { fullName, username, email, password });
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<motion.div
|
<motion.div
|
||||||
key="register"
|
key="register"
|
||||||
@@ -13,12 +51,40 @@ export default function RegisterForm() {
|
|||||||
transition={{ duration: 0.25 }}
|
transition={{ duration: 0.25 }}
|
||||||
>
|
>
|
||||||
<h2 className="text-4xl font-extrabold text-center mb-6 text-gray-800 tracking-wide">Regisztráció</h2>
|
<h2 className="text-4xl font-extrabold text-center mb-6 text-gray-800 tracking-wide">Regisztráció</h2>
|
||||||
<form>
|
{error && (
|
||||||
<InputBox type="text" placeholder="Teljes név" />
|
<div className="mb-4 text-red-600 text-center font-semibold">{error}</div>
|
||||||
<InputBox type="text" placeholder="Felhasználónév" />
|
)}
|
||||||
<InputBox type="email" placeholder="Email cím" />
|
<form onSubmit={handleSubmit}>
|
||||||
<InputBox type="password" placeholder="Jelszó" />
|
<InputBox
|
||||||
<InputBox type="password" placeholder="Jelszó megerősítése" />
|
type="text"
|
||||||
|
placeholder="Teljes név"
|
||||||
|
value={fullName}
|
||||||
|
onChange={e => setFullName(e.target.value)}
|
||||||
|
/>
|
||||||
|
<InputBox
|
||||||
|
type="text"
|
||||||
|
placeholder="Felhasználónév"
|
||||||
|
value={username}
|
||||||
|
onChange={e => setUsername(e.target.value)}
|
||||||
|
/>
|
||||||
|
<InputBox
|
||||||
|
type="email"
|
||||||
|
placeholder="Email cím"
|
||||||
|
value={email}
|
||||||
|
onChange={e => setEmail(e.target.value)}
|
||||||
|
/>
|
||||||
|
<InputBox
|
||||||
|
type="password"
|
||||||
|
placeholder="Jelszó"
|
||||||
|
value={password}
|
||||||
|
onChange={e => setPassword(e.target.value)}
|
||||||
|
/>
|
||||||
|
<InputBox
|
||||||
|
type="password"
|
||||||
|
placeholder="Jelszó megerősítése"
|
||||||
|
value={confirmPassword}
|
||||||
|
onChange={e => setConfirmPassword(e.target.value)}
|
||||||
|
/>
|
||||||
<Button text="Regisztráció" type="submit" />
|
<Button text="Regisztráció" type="submit" />
|
||||||
</form>
|
</form>
|
||||||
</motion.div>
|
</motion.div>
|
||||||
|
|||||||
Reference in New Issue
Block a user