From c5bc6c1c585ae0efae9b818f70d2a4333ff42688 Mon Sep 17 00:00:00 2001 From: Peter KW Date: Thu, 21 Mar 2024 03:37:37 +0100 Subject: [PATCH] Add user to project component --- frontend/src/Components/AddUserToProject.tsx | 132 +++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 frontend/src/Components/AddUserToProject.tsx diff --git a/frontend/src/Components/AddUserToProject.tsx b/frontend/src/Components/AddUserToProject.tsx new file mode 100644 index 0000000..debd0f9 --- /dev/null +++ b/frontend/src/Components/AddUserToProject.tsx @@ -0,0 +1,132 @@ +import { useState } from "react"; +import { APIResponse, api } from "../API/API"; +import { NewProjMember } from "../Types/goTypes"; +import Logo from "../assets/Logo.svg"; +import Button from "./Button"; +import GetAllUsers from "./GetAllUsers"; + +/** + * Tries to add a member to a project + * @param {Object} props - A NewProjMember + * @returns {boolean} True if added, false if not + */ +function MemberAdd(props: { memberToAdd: NewProjMember }): boolean { + let added = false; + + api + .addUserToProject( + props.memberToAdd, + localStorage.getItem("accessToken") ?? "", + ) + .then((response: APIResponse) => { + if (response.success) { + added = true; + } else { + console.error(response.message); + } + }) + .catch((error) => { + console.error("An error occurred during member add:", error); + }); + return added; +} + +/** + * Provides UI for adding a project to the system. + * @returns {JSX.Element} - Returns the component UI for adding a project + */ +function AddUserToProject(): JSX.Element { + const [name, setName] = useState(""); + const [users, setUsers] = useState([]); + const [role, setRole] = useState(""); + GetAllUsers({ setUsersProp: setUsers }); + + const handleClick = (): boolean => { + const newMember: NewProjMember = { + username: name, + projectname: localStorage.getItem("projectName") ?? "", + role: "user", + }; + return MemberAdd({ memberToAdd: newMember }); + }; + + return ( +
+
+
{ + e.preventDefault(); + MemberAdd({ + memberToAdd: { + username: "", + projectname: "", + role: "project_manager", + }, + }); + }} + > + TTIME Logo +

+ Add {name} to {localStorage.getItem("projectName") ?? ""} as {role} +

+

Role for user:

+
+
    +
  • { + setRole("user"); + }} + > + {"User"} +
  • +
  • { + setRole("project_manager"); + }} + > + {"Project manager"} +
  • +
+
+

User to add:

+
+
    +
    + {users.map((user) => ( +
  • { + setName(user); + }} + > + {user} +
  • + ))} +
+
+
+
+
+

+
+
+ ); +} + +export default AddUserToProject;