From 200da516337b652360f30a6aada5958d4bce3636 Mon Sep 17 00:00:00 2001 From: Peter KW <peter.k.w.96@gmail.com> Date: Mon, 18 Mar 2024 00:41:18 +0100 Subject: [PATCH] AddProject component --- frontend/src/Components/AddProject.tsx | 97 ++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 frontend/src/Components/AddProject.tsx diff --git a/frontend/src/Components/AddProject.tsx b/frontend/src/Components/AddProject.tsx new file mode 100644 index 0000000..9fdf8e9 --- /dev/null +++ b/frontend/src/Components/AddProject.tsx @@ -0,0 +1,97 @@ +import { useState } from "react"; +import { APIResponse, api } from "../API/API"; +import { NewProject, Project } from "../Types/goTypes"; +import InputField from "./InputField"; +import Logo from "../assets/Logo.svg"; +import Button from "./Button"; + +/** + * Tries to add a project to the system + * @param props - Project name and description + * @returns {boolean} True if created, false if not + */ +function CreateProject(props: { name: string; description: string }): boolean { + const project: NewProject = { + name: props.name, + description: props.name, + }; + + let created = false; + + api + .createProject(project, localStorage.getItem("accessToken") ?? "") + .then((response: APIResponse<Project>) => { + //vv_FOR DEBGUGGING_vv + console.log(localStorage.getItem("accessToken")); + + if (response.success) { + created = true; + } else { + console.error("Could not add project"); + } + }) + .catch((error) => { + console.error("An error occurred during creation:", error); + }); + return created; +} + +/** + * Tries to add a project to the system + * @returns {JSX.Element} UI for project adding + */ +function AddProject(): JSX.Element { + const [name, setName] = useState(""); + const [description, setDescription] = useState(""); + + return ( + <div className="flex flex-col h-fit w-screen items-center justify-center"> + <div className="border-4 border-black bg-white flex flex-col items-center justify-center h-fit w-fit rounded-3xl content-center pl-20 pr-20"> + <form + className="bg-white rounded px-8 pt-6 pb-8 mb-4 items-center justify-center flex flex-col w-fit h-fit" + onSubmit={(e) => { + e.preventDefault(); + CreateProject({ name: name, description: description }); + }} + > + <img + src={Logo} + className="logo w-[7vw] mb-10 mt-10" + alt="TTIME Logo" + /> + <h3 className="pb-4 mb-2 text-center font-bold text-[18px]"> + Create a new project + </h3> + <InputField + label="Name" + type="text" + value={name} + onChange={(e) => { + setName(e.target.value); + }} + /> + <InputField + label="Description" + type="text" + value={description} + onChange={(e) => { + setDescription(e.target.value); + }} + /> + <div className="flex items-center justify-between"> + <Button + text="Create" + onClick={(): void => { + return; + }} + type="submit" + /> + </div> + </form> + <p className="text-center text-gray-500 text-xs"></p> + </div> + </div> + ); +} + +export default AddProject;