2024-03-18 00:41:18 +01:00
|
|
|
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
|
2024-03-20 20:36:34 +01:00
|
|
|
* @param {Object} props - Project name and description
|
2024-03-18 00:41:18 +01:00
|
|
|
* @returns {boolean} True if created, false if not
|
|
|
|
*/
|
|
|
|
function CreateProject(props: { name: string; description: string }): boolean {
|
|
|
|
const project: NewProject = {
|
|
|
|
name: props.name,
|
2024-03-18 01:31:58 +01:00
|
|
|
description: props.description,
|
2024-03-18 00:41:18 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
let created = false;
|
|
|
|
|
|
|
|
api
|
|
|
|
.createProject(project, localStorage.getItem("accessToken") ?? "")
|
|
|
|
.then((response: APIResponse<Project>) => {
|
|
|
|
if (response.success) {
|
|
|
|
created = true;
|
|
|
|
} else {
|
2024-03-18 01:31:58 +01:00
|
|
|
console.error(response.message);
|
2024-03-18 00:41:18 +01:00
|
|
|
}
|
|
|
|
})
|
|
|
|
.catch((error) => {
|
|
|
|
console.error("An error occurred during creation:", error);
|
|
|
|
});
|
|
|
|
return created;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2024-03-20 20:36:34 +01:00
|
|
|
* Provides UI for adding a project to the system.
|
|
|
|
* @returns {JSX.Element} - Returns the component UI for adding a project
|
2024-03-18 00:41:18 +01:00
|
|
|
*/
|
|
|
|
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;
|