diff --git a/src/interfaces/response.interface.ts b/src/interfaces/response.interface.ts new file mode 100644 index 0000000..5f7e27e --- /dev/null +++ b/src/interfaces/response.interface.ts @@ -0,0 +1,4 @@ +export default interface Response { + status: number; + data: T; +} \ No newline at end of file diff --git a/src/pages/Admin/AdminPage.jsx b/src/pages/Admin/AdminPage.jsx index b8cf562..c300ff8 100644 --- a/src/pages/Admin/AdminPage.jsx +++ b/src/pages/Admin/AdminPage.jsx @@ -1,10 +1,10 @@ -import { useState, useContext } from "react"; +import { useContext } from "react"; import styles from "./AdminPage.module.css"; -import ParticipationChart from "./components/chart/ParticipationChart.jsx"; import IncompleteEvents from "./components/IncompleteEvent/IncompleteEvent.jsx"; import PendingMembers from "./components/pendingMembers/PendingMembers.jsx"; import { AuthContext } from "../../contexts/auth/AuthContext.js"; import { useNavigate } from "react-router"; +import RegisterMember from "./components/registerMember/registerMember.tsx"; function AdminPage() { @@ -12,18 +12,11 @@ function AdminPage() { const { user } = useContext(AuthContext); const navigate = useNavigate(); - const [selected, setSelected] = useState("3"); - const [participationRate] = useState(89); - if(!user.isAdmin) navigate("/"); return (
- +
diff --git a/src/pages/Admin/components/registerMember/registerMember.module.css b/src/pages/Admin/components/registerMember/registerMember.module.css new file mode 100644 index 0000000..071f79b --- /dev/null +++ b/src/pages/Admin/components/registerMember/registerMember.module.css @@ -0,0 +1,27 @@ +.leftBlock { + width: 40%; + display: flex; + flex-direction: column; + align-items: center; + height: 100%; + min-height: calc(100vh - 260px); + box-sizing: border-box; + padding: 20px; + margin: 0; +} + +.registerMemberHeader { + display: flex; + align-items: center; + justify-content: center; + width: 100%; + margin-bottom: 10px; +} + +.registerForm { + display: flex; + flex-direction: column; + gap: 10px; + align-items: center; + justify-content: center; +} \ No newline at end of file diff --git a/src/pages/Admin/components/registerMember/registerMember.tsx b/src/pages/Admin/components/registerMember/registerMember.tsx new file mode 100644 index 0000000..eec292b --- /dev/null +++ b/src/pages/Admin/components/registerMember/registerMember.tsx @@ -0,0 +1,46 @@ +import React, { useState } from "react" +import styles from "./registerMember.module.css" +import TextInput from "../../../../components/ui/input/input" +import Button from "../../../../components/ui/button/button"; +import Response from "../../../../interfaces/response.interface"; +import ResponseData from "./responseData.inteface"; +import adminCreateUser from "../../../../utils/users/adminCreateUser"; + + +const RegisterMember: React.FC = () => { + + const [name, setName] = useState(""); + const [lastname, setLastName] = useState(""); + const [email, setEmail] = useState(""); + const [phone, setPhone] = useState(""); + const [password, setPassword] = useState(""); + + + const handleCreate = async (): Promise => { + + if(name !== "" || lastname !== "" || email !== "" || phone !== "" ) { + const response: Response = await adminCreateUser(email, name, lastname, phone); + if(response.status === 200) setPassword(response.data.password); + } + + } + + return
+
+

Enregister un bénévole

+
+ +
+ setName(e.target.value)} /> + setLastName(e.target.value)} /> + setEmail(e.target.value)} /> + setPhone(e.target.value)} /> + +

{password !== "" && `Mot de passe: ${password}`}

+ + +
+
+} + +export default RegisterMember \ No newline at end of file diff --git a/src/pages/Admin/components/registerMember/responseData.inteface.ts b/src/pages/Admin/components/registerMember/responseData.inteface.ts new file mode 100644 index 0000000..528d1d3 --- /dev/null +++ b/src/pages/Admin/components/registerMember/responseData.inteface.ts @@ -0,0 +1,4 @@ +export default interface ResponseData { + message: string; + password: string; +} \ No newline at end of file diff --git a/src/utils/users/adminCreateUser.ts b/src/utils/users/adminCreateUser.ts new file mode 100644 index 0000000..01860d3 --- /dev/null +++ b/src/utils/users/adminCreateUser.ts @@ -0,0 +1,14 @@ +import fetchWrapper from "../fetchWrapper.js"; +import getXSRFToken from "../getXSRF.js"; +import Response from "../../interfaces/response.interface"; + +export default async function adminCreateUser(email: string, name: string, lastname: string, phone: string): Promise { + const csrfToken = await getXSRFToken(); + + return fetchWrapper( + "/api/users/create", + { email, name, lastname, phone }, + "POST", + { "X-XSRF-TOKEN": csrfToken } + ); +}