import { useState } from "react"; import { api } from "../API/API"; import { NewProject } from "../Types/goTypes"; import Logo from "../assets/Logo.svg"; import Button from "./Button"; import { useNavigate } from "react-router-dom"; import ProjectNameInput from "./Inputs/ProjectNameInput"; import DescriptionInput from "./Inputs/DescriptionInput"; import { alphanumeric } from "../Data/regex"; import { projNameHighLimit, projNameLowLimit } from "../Data/constants"; /** * Provides UI for adding a project to the system. * @returns {JSX.Element} - Returns the component UI for adding a project */ function AddProject(): JSX.Element { const [name, setName] = useState(""); const [description, setDescription] = useState(""); const navigate = useNavigate(); /** * Tries to add a project to the system */ const handleCreateProject = async (): Promise => { if ( !alphanumeric.test(name) || name.length > projNameHighLimit || name.length < projNameLowLimit ) { alert( "Please provide valid project name: \n-Between 10-99 characters \n-No special characters (.-!?/*)", ); return; } if (description.length > projNameHighLimit) { alert("Please provide valid description: \n-Max 100 characters"); return; } const project: NewProject = { name: name.replace(/ /g, ""), description: description.trim(), }; try { const response = await api.createProject( project, localStorage.getItem("accessToken") ?? "", ); if (response.success) { alert(`${project.name} added!`); setDescription(""); setName(""); navigate("/admin"); } else { alert("Project not added, name could be taken"); console.error(response.message); } } catch (error) { alert("Project not added"); console.error(error); } }; return (
{ e.preventDefault(); void handleCreateProject(); }} > TTIME Logo

Create a new project

{ e.preventDefault(); setName(e.target.value); }} />
{ e.preventDefault(); setDescription(e.target.value); }} placeholder={"Description (Optional)"} />

); } export default AddProject;