From 888256e9f6222abe1d6e97c1d4e54e961b59b89d Mon Sep 17 00:00:00 2001 From: Peter KW Date: Sun, 17 Mar 2024 19:38:51 +0100 Subject: [PATCH 01/13] Changed logincheck type and error clarification --- frontend/src/Components/LoginCheck.tsx | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/frontend/src/Components/LoginCheck.tsx b/frontend/src/Components/LoginCheck.tsx index 3658cbf..6a8a028 100644 --- a/frontend/src/Components/LoginCheck.tsx +++ b/frontend/src/Components/LoginCheck.tsx @@ -10,7 +10,7 @@ function LoginCheck(props: { username: string; password: string; setAuthority: Dispatch>; -}): number { +}): void { const user: NewUser = { username: props.username, password: props.password, @@ -42,14 +42,12 @@ function LoginCheck(props: { console.error("Token was undefined"); } } else { - console.error("Token could not be fetched"); + console.error("Token could not be fetched/No such user"); } }) .catch((error) => { console.error("An error occurred during login:", error); }); - - return 0; } export default LoginCheck; From d97516e0cda38638762cbee0067320888a955088 Mon Sep 17 00:00:00 2001 From: Peter KW Date: Mon, 18 Mar 2024 00:40:42 +0100 Subject: [PATCH 02/13] Added some paths again --- frontend/src/main.tsx | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/frontend/src/main.tsx b/frontend/src/main.tsx index c63ef22..7fa0780 100644 --- a/frontend/src/main.tsx +++ b/frontend/src/main.tsx @@ -5,6 +5,10 @@ import { createBrowserRouter, RouterProvider } from "react-router-dom"; import App from "./Pages/App"; import AdminMenuPage from "./Pages/AdminPages/AdminMenuPage"; import YourProjectsPage from "./Pages/YourProjectsPage"; +import AdminAddProject from "./Pages/AdminPages/AdminAddProject"; +import AdminManageProjects from "./Pages/AdminPages/AdminManageProjects"; +import AdminManageUsers from "./Pages/AdminPages/AdminManageUsers"; +import AdminAddUser from "./Pages/AdminPages/AdminAddUser"; // This is where the routes are mounted const router = createBrowserRouter([ @@ -20,6 +24,26 @@ const router = createBrowserRouter([ path: "/pm", element: , }, + { + path: "/user", + element: , + }, + { + path: "/addProject", + element: , + }, + { + path: "/adminAddUser", + element: , + }, + { + path: "/adminManageProject", + element: , + }, + { + path: "/adminManageUser", + element: , + }, ]); // Semi-hacky way to get the root element From 200da516337b652360f30a6aada5958d4bce3636 Mon Sep 17 00:00:00 2001 From: Peter KW Date: Mon, 18 Mar 2024 00:41:18 +0100 Subject: [PATCH 03/13] 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) => { + //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 ( +
+
+
{ + e.preventDefault(); + CreateProject({ name: name, description: description }); + }} + > + TTIME Logo +

+ Create a new project +

+ { + setName(e.target.value); + }} + /> + { + setDescription(e.target.value); + }} + /> +
+
+ +

+
+
+ ); +} + +export default AddProject; From 24e7e68ea01549e51f9aa9d175ca136340b9c5da Mon Sep 17 00:00:00 2001 From: Peter KW Date: Mon, 18 Mar 2024 00:41:46 +0100 Subject: [PATCH 04/13] Logout functionality --- frontend/src/Components/Header.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/Components/Header.tsx b/frontend/src/Components/Header.tsx index ba0a939..7a1e8ba 100644 --- a/frontend/src/Components/Header.tsx +++ b/frontend/src/Components/Header.tsx @@ -5,7 +5,7 @@ function Header({ username }: { username: string }): JSX.Element { const [isOpen, setIsOpen] = useState(false); const handleLogout = (): void => { - // Add any logout logic here + localStorage.clear(); }; return ( From 8249678488403cebc2fec756df5327af0a620a94 Mon Sep 17 00:00:00 2001 From: Peter KW Date: Mon, 18 Mar 2024 00:42:05 +0100 Subject: [PATCH 05/13] Using local storage for token --- frontend/src/Components/LoginCheck.tsx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/frontend/src/Components/LoginCheck.tsx b/frontend/src/Components/LoginCheck.tsx index 6a8a028..786a96c 100644 --- a/frontend/src/Components/LoginCheck.tsx +++ b/frontend/src/Components/LoginCheck.tsx @@ -15,12 +15,16 @@ function LoginCheck(props: { username: props.username, password: props.password, }; + + localStorage.clear(); + api .login(user) .then((response: APIResponse) => { if (response.success) { if (response.data !== undefined) { const token = response.data; + localStorage.setItem("accessToken", token); //TODO: change so that it checks for user type (admin, user, pm) instead if (token !== "" && props.username === "admin") { props.setAuthority((prevAuth) => { From 3b49faec2d6f52561cbeec2f86cbd8ca0f6c00c9 Mon Sep 17 00:00:00 2001 From: Peter KW Date: Mon, 18 Mar 2024 00:42:22 +0100 Subject: [PATCH 06/13] Import fix --- frontend/src/Components/ProjectListUser.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/Components/ProjectListUser.tsx b/frontend/src/Components/ProjectListUser.tsx index 0502159..96eeaff 100644 --- a/frontend/src/Components/ProjectListUser.tsx +++ b/frontend/src/Components/ProjectListUser.tsx @@ -1,5 +1,5 @@ import { Link } from "react-router-dom"; -import { Project } from "../Types/Project"; +import { Project } from "../Types/goTypes"; /** * The props for the ProjectsProps component From 0044b61ac8233c1309a446542d46e71a2358000d Mon Sep 17 00:00:00 2001 From: Peter KW Date: Mon, 18 Mar 2024 00:44:11 +0100 Subject: [PATCH 07/13] Uses input field component instead now --- frontend/src/Components/Register.tsx | 31 +++------------------------- 1 file changed, 3 insertions(+), 28 deletions(-) diff --git a/frontend/src/Components/Register.tsx b/frontend/src/Components/Register.tsx index 0c0fcd0..3b17890 100644 --- a/frontend/src/Components/Register.tsx +++ b/frontend/src/Components/Register.tsx @@ -1,41 +1,16 @@ import { useState } from "react"; -import { NewUser } from "../Types/Users"; +import { NewUser } from "../Types/goTypes"; import { api } from "../API/API"; import Logo from "../assets/Logo.svg"; import Button from "./Button"; - -function InputField(props: { - label: string; - type: string; - value: string; - onChange: (e: React.ChangeEvent) => void; -}): JSX.Element { - return ( -
- - -
- ); -} +import InputField from "./InputField"; export default function Register(): JSX.Element { const [username, setUsername] = useState(""); const [password, setPassword] = useState(""); const handleRegister = async (): Promise => { - const newUser: NewUser = { userName: username, password }; + const newUser: NewUser = { username: username, password }; await api.registerUser(newUser); // TODO: Handle errors }; From 844e94ed2624ad932fba166f9517068852d49cca Mon Sep 17 00:00:00 2001 From: Peter KW Date: Mon, 18 Mar 2024 00:44:56 +0100 Subject: [PATCH 08/13] Small fixes to layout and added --- .../src/Pages/AdminPages/AdminAddProject.tsx | 20 ++++--------------- 1 file changed, 4 insertions(+), 16 deletions(-) diff --git a/frontend/src/Pages/AdminPages/AdminAddProject.tsx b/frontend/src/Pages/AdminPages/AdminAddProject.tsx index 2922400..6df8851 100644 --- a/frontend/src/Pages/AdminPages/AdminAddProject.tsx +++ b/frontend/src/Pages/AdminPages/AdminAddProject.tsx @@ -1,25 +1,13 @@ +import AddProject from "../../Components/AddProject"; +import BackButton from "../../Components/BackButton"; import BasicWindow from "../../Components/BasicWindow"; -import Button from "../../Components/Button"; function AdminAddProject(): JSX.Element { - const content = <>; + const content = ; const buttons = ( <> -