Merge branch 'gruppPP' into frontend

This commit is contained in:
Imbus 2024-03-20 23:55:29 +01:00
commit 03f6edd320
5 changed files with 79 additions and 29 deletions

View file

@ -3,10 +3,11 @@ import Button from "./Button";
import { UserProjectMember } from "../Types/goTypes"; import { UserProjectMember } from "../Types/goTypes";
import GetUsersInProject from "./GetUsersInProject"; import GetUsersInProject from "./GetUsersInProject";
function UserInfoModal(props: { function ProjectInfoModal(props: {
isVisible: boolean; isVisible: boolean;
projectname: string; projectname: string;
onClose: () => void; onClose: () => void;
onClick: (username: string) => void;
}): JSX.Element { }): JSX.Element {
const [users, setUsers] = useState<UserProjectMember[]>([]); const [users, setUsers] = useState<UserProjectMember[]>([]);
GetUsersInProject({ projectName: props.projectname, setUsersProp: setUsers }); GetUsersInProject({ projectName: props.projectname, setUsersProp: setUsers });
@ -17,23 +18,31 @@ function UserInfoModal(props: {
className="fixed inset-0 bg-black bg-opacity-30 backdrop-blur-sm className="fixed inset-0 bg-black bg-opacity-30 backdrop-blur-sm
flex justify-center items-center" flex justify-center items-center"
> >
<div className="border-4 border-black bg-white p-2 rounded-lg text-center"> <div className="border-4 border-black bg-white p-2 rounded-2xl text-center h-[41vh] w-[40vw] flex flex-col">
<p className="font-bold text-[30px]">{props.projectname}</p> <div className="pl-20 pr-20">
<div> <h1 className="font-bold text-[32px] mb-[20px]">Project members:</h1>
<h2 className="font-bold text-[22px] mb-[20px]"> <div className="border-2 border-black p-2 rounded-lg text-center overflow-scroll h-[26vh]">
Members of this project: <ul className="text-left font-medium space-y-2">
</h2> <div></div>
<div className="border-2 border-black bg-white p-2 rounded-lg text-center pl-6 pr-6">
<ul>
{users.map((user) => ( {users.map((user) => (
<li key={user.Username}> <li
<span>{user.Username}</span> className="items-start p-1 border-2 border-black rounded-lg bg-orange-200 hover:bg-orange-600 hover:text-slate-100 hover:cursor-pointer"
key={user.Username}
onClick={() => {
props.onClick(user.Username);
}}
>
<span>
Name: {user.Username}
<div></div>
Role: {user.UserRole}
</span>
</li> </li>
))} ))}
</ul> </ul>
</div> </div>
</div> </div>
<div className="items-center space-x-6 pr-6 pl-6"> <div className="space-x-16">
<Button <Button
text={"Delete"} text={"Delete"}
onClick={function (): void { onClick={function (): void {
@ -54,4 +63,4 @@ function UserInfoModal(props: {
); );
} }
export default UserInfoModal; export default ProjectInfoModal;

View file

@ -1,6 +1,8 @@
import { useState } from "react"; import { useState } from "react";
import { NewProject } from "../Types/goTypes"; import { NewProject } from "../Types/goTypes";
import ProjectInfoModal from "./ProjectInfoModal"; import ProjectInfoModal from "./ProjectInfoModal";
import UserInfoModal from "./UserInfoModal";
import DeleteUser from "./DeleteUser";
/** /**
* A list of projects for admin manage projects page, that sets an onClick * A list of projects for admin manage projects page, that sets an onClick
@ -16,26 +18,47 @@ import ProjectInfoModal from "./ProjectInfoModal";
export function ProjectListAdmin(props: { export function ProjectListAdmin(props: {
projects: NewProject[]; projects: NewProject[];
}): JSX.Element { }): JSX.Element {
const [modalVisible, setModalVisible] = useState(false); const [projectModalVisible, setProjectModalVisible] = useState(false);
const [projectname, setProjectname] = useState(""); const [projectname, setProjectname] = useState("");
const [userModalVisible, setUserModalVisible] = useState(false);
const [username, setUsername] = useState("");
const handleClick = (username: string): void => { const handleClickUser = (username: string): void => {
setProjectname(username); setUsername(username);
setModalVisible(true); setUserModalVisible(true);
}; };
const handleClose = (): void => { const handleClickProject = (username: string): void => {
setProjectname(username);
setProjectModalVisible(true);
};
const handleCloseProject = (): void => {
setProjectname(""); setProjectname("");
setModalVisible(false); setProjectModalVisible(false);
};
const handleCloseUser = (): void => {
setProjectname("");
setUserModalVisible(false);
}; };
return ( return (
<> <>
<ProjectInfoModal <ProjectInfoModal
onClose={handleClose} onClose={handleCloseProject}
isVisible={modalVisible} onClick={handleClickUser}
isVisible={projectModalVisible}
projectname={projectname} projectname={projectname}
/> />
<UserInfoModal
manageMember={true}
onClose={handleCloseUser}
//TODO: CHANGE TO REMOVE USER FROM PROJECT
onDelete={() => DeleteUser}
isVisible={userModalVisible}
username={username}
/>
<div> <div>
<ul className="font-bold underline text-[30px] cursor-pointer padding"> <ul className="font-bold underline text-[30px] cursor-pointer padding">
{props.projects.map((project) => ( {props.projects.map((project) => (
@ -43,7 +66,7 @@ export function ProjectListAdmin(props: {
className="pt-5" className="pt-5"
key={project.name} key={project.name}
onClick={() => { onClick={() => {
handleClick(project.name); handleClickProject(project.name);
}} }}
> >
{project.name} {project.name}

View file

@ -5,23 +5,38 @@ import UserProjectListAdmin from "./UserProjectListAdmin";
function UserInfoModal(props: { function UserInfoModal(props: {
isVisible: boolean; isVisible: boolean;
manageMember: boolean;
username: string; username: string;
onClose: () => void; onClose: () => void;
onDelete: (username: string) => void;
}): JSX.Element { }): JSX.Element {
if (!props.isVisible) return <></>; if (!props.isVisible) return <></>;
const ManageUserOrMember = (check: boolean): JSX.Element => {
if (check) {
return (
<Link to="/AdminChangeRole">
<p className="mb-[20px] hover:font-bold hover:cursor-pointer underline">
(Change Role)
</p>
</Link>
);
}
return ( return (
<div
className="fixed inset-0 bg-black bg-opacity-30 backdrop-blur-sm
flex justify-center items-center"
>
<div className="border-4 border-black bg-white p-2 rounded-lg text-center">
<p className="font-bold text-[30px]">{props.username}</p>
<Link to="/AdminChangeUserName"> <Link to="/AdminChangeUserName">
<p className="mb-[20px] hover:font-bold hover:cursor-pointer underline"> <p className="mb-[20px] hover:font-bold hover:cursor-pointer underline">
(Change Username) (Change Username)
</p> </p>
</Link> </Link>
);
};
return (
<div
className="fixed inset-0 bg-black bg-opacity-30 backdrop-blur-sm
flex justify-center items-center"
>
<div className="border-4 border-black bg-white p-2 rounded-lg text-center flex flex-col">
<p className="font-bold text-[30px]">{props.username}</p>
{ManageUserOrMember(props.manageMember)}
<div> <div>
<h2 className="font-bold text-[22px] mb-[20px]"> <h2 className="font-bold text-[22px] mb-[20px]">
Member of these projects: Member of these projects:

View file

@ -1,5 +1,6 @@
import { useState } from "react"; import { useState } from "react";
import UserInfoModal from "./UserInfoModal"; import UserInfoModal from "./UserInfoModal";
import DeleteUser from "./DeleteUser";
/** /**
* A list of users for admin manage users page, that sets an onClick * A list of users for admin manage users page, that sets an onClick
@ -29,7 +30,9 @@ export function UserListAdmin(props: { users: string[] }): JSX.Element {
return ( return (
<> <>
<UserInfoModal <UserInfoModal
manageMember={false}
onClose={handleClose} onClose={handleClose}
onDelete={() => DeleteUser}
isVisible={modalVisible} isVisible={modalVisible}
username={username} username={username}
/> />