diff --git a/GuessWho/frontend/src/App.jsx b/GuessWho/frontend/src/App.jsx index 7a6d04c..e0687a8 100644 --- a/GuessWho/frontend/src/App.jsx +++ b/GuessWho/frontend/src/App.jsx @@ -2,12 +2,15 @@ import { Routes, Route } from 'react-router-dom'; import SignUp from './signup/SignUp'; import Dashboard from './dashboard/Dashboard'; +import Profile from './profile/Profile'; + function App() { return ( } /> } /> + } /> ); } diff --git a/GuessWho/frontend/src/components/Container/Container.jsx b/GuessWho/frontend/src/components/Container/Container.jsx new file mode 100644 index 0000000..97135d1 --- /dev/null +++ b/GuessWho/frontend/src/components/Container/Container.jsx @@ -0,0 +1,9 @@ +import styles from "./Container.module.css"; + +export default function Container({ children }) { + return ( +
+ {children} +
+ ); +} \ No newline at end of file diff --git a/GuessWho/frontend/src/components/Container/Container.module.css b/GuessWho/frontend/src/components/Container/Container.module.css new file mode 100644 index 0000000..73b11fa --- /dev/null +++ b/GuessWho/frontend/src/components/Container/Container.module.css @@ -0,0 +1,4 @@ +.container { + max-width: 900px; + margin: 0 auto; +} \ No newline at end of file diff --git a/GuessWho/frontend/src/profile/Profile.jsx b/GuessWho/frontend/src/profile/Profile.jsx new file mode 100644 index 0000000..685153b --- /dev/null +++ b/GuessWho/frontend/src/profile/Profile.jsx @@ -0,0 +1,181 @@ +import { useState } from 'react'; +import { useNavigate } from 'react-router-dom'; +import styles from './Profile.module.css'; +import Container from "../components/Container/Container"; + +const programmingLanguages = [ + 'JavaScript', + 'TypeScript', + 'Python', + 'Java', + 'C#', + 'C++', + 'Go' +]; + +const softSkills = [ + 'Communication', + 'Teamwork', + 'LeaderShip', + 'Problem Solving', + 'Adaptability', +]; + +const sports = [ + 'Football', + 'Basketball', + 'Gym', + 'Running', + 'Swimming', +]; + +const hobbies = [ + 'Reading', + 'Gaming', + 'Music', + 'Travel', + 'Cooking', +]; + +export default function Profile() { + + const navigate = useNavigate(); + + const [profile, setProfile] = useState({ + fullName: '', + programming: [], + softSkills: [], + sports: [], + hobbies: [] + }); + + const handleInput = (e) => { + setProfile({ + ...profile, + [e.target.name]: e.target.value, + }); + }; + + const toggleItem = (field, value) => { + const currentItems = profile[field]; + + if (currentItems.includes(value)) { + setProfile({ + ...profile, + [field]: currentItems.filter((item) => item !== value), + }); + } else { + setProfile({ + ...profile, + [field]: [...currentItems, value], + }); + } +}; + + const handleSubmit = (e) => { + e.preventDefault(); + + if (!profile.fullName.trim()) { + alert('Please complete all required fields'); + return; + } + + console.log(profile); + + alert("Profile saved!"); + + navigate("/dashboard"); +}; + + return ( +
+ + +

Create Profile

+ +
+

Player Name

+ + +

Programming Languages

+ +
+ {programmingLanguages.map((language) => ( + + ))} +
+ +

Soft Skills

+ +
+ {softSkills.map((skill) => ( + + ))} +
+ +

Sports

+ +
+ {sports.map((sport) => ( + + ))} +
+ +

Hobbies

+
+ {hobbies.map((hobby) => ( + + ))} +
+ + +
+
+
+ ); +} + \ No newline at end of file diff --git a/GuessWho/frontend/src/profile/Profile.module.css b/GuessWho/frontend/src/profile/Profile.module.css new file mode 100644 index 0000000..91e89eb --- /dev/null +++ b/GuessWho/frontend/src/profile/Profile.module.css @@ -0,0 +1,131 @@ +.profilePage{ + width: 100%; + margin: 20px auto; + padding: 20px; + background: #fff; + border-radius: 15px; + box-shadow: 0 5px 20px rgba(0, 0, 0, .08); +} + +.profileContainer{ + padding: 20px; +} +.profileContainer h2 { + text-align: center; + color: #2563eb; + margin-bottom: 25px; +} + +.profileContainer h3 { + margin: 20px 0 10px; + color: #333; + font-size: 18px; +} + +.profileContainer button { + width: 50%; + margin-top: 25px; + padding: 14px; + border: none; + border-radius: 10px; + background: #2563eb; + color: white; + font-size: 17px; + cursor: pointer; + transition: .3s; +} + +.profileContainer label { + display: flex; + align-items: center; + gap: 10px; + padding: 10px; + margin-bottom: 10px; + background: #f8f9fc; + border: 1px solid #ddd; + border-radius: 10px; + cursor: pointer; + transition: .2s; +} + +.profileContainer input[type="text"], +.profileContainer textarea { + width: 100%; + padding: 14px; + margin-bottom: 20px; + border: 2px solid #ddd; + border-radius: 10px; + font-size: 16px; + transition: .3s; +} + +.profileContainer input[type="text"]:focus, +.profileContainer textarea:focus { + outline: none; + border-color: #2563eb; +} + +.profileContainer textarea { + min-height: 120px; + resize: vertical; +} + + +.profileContainer label:hover { + background: #e8f0ff; + border-color: #2563eb; +} + +.profileContainer input[type="checkbox"] { + width: 18px; + height: 18px; + accent-color: #2563eb; +} + + +.profileContainer button:hover { + background: #1d4ed8; +} + +.checkboxGroup { + margin-bottom: 20px; +} + +/* ---------- Tablet ------ */ + +@media (min-width: 768px) { +.profileContainer { + padding: 35px; + } + +.profileContainer label { + display: inline-flex; + width: 48%; + margin-right: 2%; + margin-bottom: 12px; + } + +.profileContainer button { + width: 250px; + display: block; + margin: 30px auto 0; + } +} + +/* -------- Desktop -------- */ + +@media (min-width: 1200px) { + + .profileContainer label { + width: 30%; + margin-right: 3%; + } + + .profileContainer h2 { + font-size: 34px; + } + + .profileContainer h3 { + font-size: 22px; + } +} \ No newline at end of file diff --git a/GuessWho/frontend/src/signup/SignUp.jsx b/GuessWho/frontend/src/signup/SignUp.jsx index 5e45256..2399a79 100644 --- a/GuessWho/frontend/src/signup/SignUp.jsx +++ b/GuessWho/frontend/src/signup/SignUp.jsx @@ -49,7 +49,7 @@ function SignUp() { setSuccessMessage('Account created successfully!') setTimeout(() => { - navigate('/dashboard') + navigate('/profile') }, 1500) } catch (error) { console.error(error)