Some fixes to how they handle names and inputs

This commit is contained in:
Peter KW 2024-04-04 11:54:34 +02:00
parent 9a0f855d2b
commit 13eb6597a7
5 changed files with 44 additions and 40 deletions

View file

@ -1,37 +1,10 @@
import { useState } from "react"; import { useState } from "react";
import { APIResponse, api } from "../API/API"; import { api } from "../API/API";
import { NewProject } from "../Types/goTypes"; import { NewProject } from "../Types/goTypes";
import InputField from "./InputField"; import InputField from "./InputField";
import Logo from "../assets/Logo.svg"; import Logo from "../assets/Logo.svg";
import Button from "./Button"; import Button from "./Button";
/**
* Tries to add a project to the system
* @param {Object} props - Project name and description
* @returns {boolean} True if created, false if not
*/
function CreateProject(props: { name: string; description: string }): void {
const project: NewProject = {
name: props.name,
description: props.description,
};
api
.createProject(project, localStorage.getItem("accessToken") ?? "")
.then((response: APIResponse<void>) => {
if (response.success) {
alert("Project added!");
} else {
alert("Project NOT added!");
console.error(response.message);
}
})
.catch((error) => {
alert("Project NOT added!");
console.error("An error occurred during creation:", error);
});
}
/** /**
* Provides UI for adding a project to the system. * Provides UI for adding a project to the system.
* @returns {JSX.Element} - Returns the component UI for adding a project * @returns {JSX.Element} - Returns the component UI for adding a project
@ -40,6 +13,33 @@ function AddProject(): JSX.Element {
const [name, setName] = useState(""); const [name, setName] = useState("");
const [description, setDescription] = useState(""); const [description, setDescription] = useState("");
/**
* Tries to add a project to the system
*/
const handleCreateProject = async (): Promise<void> => {
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("");
} else {
alert("Project not added, name could be taken");
console.error(response.message);
}
} catch (error) {
alert("Project not added");
console.error(error);
}
};
return ( return (
<div className="flex flex-col h-fit w-screen items-center justify-center"> <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"> <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">
@ -47,10 +47,7 @@ function AddProject(): JSX.Element {
className="bg-white rounded px-8 pt-6 pb-8 mb-4 items-center justify-center flex flex-col w-fit h-fit" 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) => { onSubmit={(e) => {
e.preventDefault(); e.preventDefault();
CreateProject({ void handleCreateProject();
name: name,
description: description,
});
}} }}
> >
<img <img

View file

@ -2,7 +2,7 @@ import { useState } from "react";
import Button from "./Button"; import Button from "./Button";
import ChangeRole, { ProjectRoleChange } from "./ChangeRole"; import ChangeRole, { ProjectRoleChange } from "./ChangeRole";
export default function ChangeRoles(props: { export default function ChangeRoleView(props: {
projectName: string; projectName: string;
username: string; username: string;
}): JSX.Element { }): JSX.Element {

View file

@ -2,8 +2,11 @@ import { APIResponse, api } from "../API/API";
import { StrNameChange } from "../Types/goTypes"; import { StrNameChange } from "../Types/goTypes";
function ChangeUsername(props: { nameChange: StrNameChange }): void { function ChangeUsername(props: { nameChange: StrNameChange }): void {
if (props.nameChange.newName === "") { if (
alert("You have to select a new name"); props.nameChange.newName === "" ||
props.nameChange.newName === props.nameChange.prevName
) {
alert("You have to give a new name\n\nName not changed");
return; return;
} }
api api
@ -13,7 +16,7 @@ function ChangeUsername(props: { nameChange: StrNameChange }): void {
alert("Name changed successfully"); alert("Name changed successfully");
location.reload(); location.reload();
} else { } else {
alert("Name not changed"); alert("Name not changed, name could be taken");
console.error(response.message); console.error(response.message);
} }
}) })

View file

@ -15,17 +15,21 @@ export default function Register(): JSX.Element {
const [errMessage, setErrMessage] = useState<string>(); const [errMessage, setErrMessage] = useState<string>();
const handleRegister = async (): Promise<void> => { const handleRegister = async (): Promise<void> => {
if (username === "" || password === "") {
alert("Must provide username and password");
return;
}
const newUser: NewUser = { const newUser: NewUser = {
username: username ?? "", username: username?.replace(/ /g, "") ?? "",
password: password ?? "", password: password ?? "",
}; };
const response = await api.registerUser(newUser); const response = await api.registerUser(newUser);
if (response.success) { if (response.success) {
alert("User added!"); alert(`${newUser.username} added!`);
setPassword(""); setPassword("");
setUsername(""); setUsername("");
} else { } else {
alert("User not added"); alert("User not added, name could be taken");
setErrMessage(response.message ?? "Unknown error"); setErrMessage(response.message ?? "Unknown error");
console.error(errMessage); console.error(errMessage);
} }

View file

@ -28,7 +28,7 @@ function UserInfoModal(props: {
const handleClickChangeName = (): void => { const handleClickChangeName = (): void => {
const nameChange: StrNameChange = { const nameChange: StrNameChange = {
prevName: props.username, prevName: props.username,
newName: newUsername, newName: newUsername.replace(/ /g, ""),
}; };
ChangeUsername({ nameChange: nameChange }); ChangeUsername({ nameChange: nameChange });
}; };