From d004c2073ea029a203c1e55e331839746557a778 Mon Sep 17 00:00:00 2001 From: T'JAMPENS QUENTIN p2406187 Date: Sun, 16 Nov 2025 02:14:28 +0100 Subject: [PATCH] Create register page --- src/pages/Register/RegisterPage.jsx | 105 +++++++++++++++++++++ src/pages/Register/RegisterPage.module.css | 29 ++++++ src/router.js | 5 + src/utils/register.js | 30 ++++++ 4 files changed, 169 insertions(+) create mode 100644 src/pages/Register/RegisterPage.jsx create mode 100644 src/pages/Register/RegisterPage.module.css create mode 100644 src/utils/register.js diff --git a/src/pages/Register/RegisterPage.jsx b/src/pages/Register/RegisterPage.jsx new file mode 100644 index 0000000..489858d --- /dev/null +++ b/src/pages/Register/RegisterPage.jsx @@ -0,0 +1,105 @@ +import styles from "./RegisterPage.module.css"; +import Background from "../../components/background/background.jsx"; +import Input from "../../components/ui/input/input.jsx"; +import Button from "../../components/ui/button/button.jsx"; +import { useState } from "react"; +import register from "../../utils/register.js"; +import { useNavigate } from "react-router"; + + +function RegisterPage() { + + const navigate = useNavigate(); + + const [email, setEmail] = useState(""); + const [password, setPassword] = useState(""); + const [name, setName] = useState(""); + const [lastName, setLastName] = useState(""); + + const [showPassword, setShowPassword] = useState(false); + + + async function handleSubmit(e) { + e.preventDefault(); + const res = await register(email, password, name, lastName); + if (!res || res.status !== 200) throw new Error("Register error"); + navigate("/login"); + } + + return + +
+ +
+ +

Créer un compte

+ +
+ setName(e.target.value)} + style={{ width: '100%' }} + /> +
+ +
+ setLastName(e.target.value)} + style={{ width: '100%' }} + /> +
+ +
+ setEmail(e.target.value)} + style={{ width: '100%' }} + /> +
+
+
+ setPassword(e.target.value)} + style={{ width: '100%' }} + /> + +
+
+ +
+ + +
+
+
+ +
+} + +export default RegisterPage; + + diff --git a/src/pages/Register/RegisterPage.module.css b/src/pages/Register/RegisterPage.module.css new file mode 100644 index 0000000..7a379ee --- /dev/null +++ b/src/pages/Register/RegisterPage.module.css @@ -0,0 +1,29 @@ +.container { + position: relative; + z-index: 2; + display: flex; + width: 30%; + justify-content: center; + align-items: center; + padding: 20px; + border-radius:12px; +} + +:global(.glassCard) { + --glass-bg: #ffffff9f; +} +.logButton{ + display: flex; + justify-content: center; + flex-direction: column; + align-items: center; + margin-top: 12px; +} +.formGroup{ + margin-top:23px; +} + +h1 { + overflow: visible; + text-align: center; +} \ No newline at end of file diff --git a/src/router.js b/src/router.js index 806f2ea..791e290 100644 --- a/src/router.js +++ b/src/router.js @@ -2,12 +2,17 @@ import { createBrowserRouter } from "react-router"; import Layout from "./layout.jsx"; import HomePage from "./pages/Home/HomePage"; import LoginPage from "./pages/Login/LoginPage"; +import RegisterPage from "./pages/Register/RegisterPage.jsx"; const router = createBrowserRouter([ { path: "/login", Component: LoginPage, }, + { + path: "/register", + Component: RegisterPage, + }, { path: "/", Component: Layout, diff --git a/src/utils/register.js b/src/utils/register.js new file mode 100644 index 0000000..1612bf8 --- /dev/null +++ b/src/utils/register.js @@ -0,0 +1,30 @@ +import getXSRFToken from "./getXSRF.js"; + +export default async function register(email, password, name, lastname) { + const csrfToken = await getXSRFToken(); + + try { + const response = await fetch('http://localhost:8000/api/users/register', { + method: 'POST', + credentials: 'include', + headers: { + 'Content-Type': 'application/json', + 'X-XSRF-TOKEN': csrfToken, + 'Accept': 'application/json' + }, + body: JSON.stringify({ email, password, name, lastname }), + }); + + console.log('Code HTTP :', response.status); + + if (!response.ok) { + throw new Error(`Erreur HTTP ${response.status}`); + } + + const data = await response.json(); + + return { status: response.status, data }; + } catch (error) { + return error; + } +}