TTime/frontend/src/Components/AddProject.tsx

101 lines
3 KiB
TypeScript
Raw Normal View History

2024-03-18 00:41:18 +01:00
import { useState } from "react";
import { APIResponse, api } from "../API/API";
import { NewProject } from "../Types/goTypes";
2024-03-18 00:41:18 +01:00
import InputField from "./InputField";
import Logo from "../assets/Logo.svg";
import Button from "./Button";
/**
* Tries to add a project to the system
* @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 }): void {
2024-03-18 00:41:18 +01:00
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
};
api
.createProject(project, localStorage.getItem("accessToken") ?? "")
.then((response: APIResponse<void>) => {
2024-03-18 00:41:18 +01:00
if (response.success) {
alert("Project added!");
2024-03-18 00:41:18 +01:00
} else {
alert("Project NOT added!");
2024-03-18 01:31:58 +01:00
console.error(response.message);
2024-03-18 00:41:18 +01:00
}
})
.catch((error) => {
alert("Project NOT added!");
2024-03-18 00:41:18 +01:00
console.error("An error occurred during creation:", error);
});
}
/**
* 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,
});
2024-03-18 00:41:18 +01:00
}}
>
<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>
2024-04-02 13:14:08 +02:00
<div className="space-y-3">
<InputField
label="Name"
type="text"
value={name}
onChange={(e) => {
e.preventDefault();
setName(e.target.value);
}}
/>
<InputField
label="Description"
type="text"
value={description}
onChange={(e) => {
e.preventDefault();
setDescription(e.target.value);
}}
/>
</div>
2024-03-18 00:41:18 +01:00
<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;