Merge branch 'gruppPP' into frontend
This commit is contained in:
commit
03f6edd320
5 changed files with 79 additions and 29 deletions
|
@ -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;
|
||||||
|
|
|
@ -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}
|
||||||
|
|
|
@ -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 (
|
||||||
|
<Link to="/AdminChangeUserName">
|
||||||
|
<p className="mb-[20px] hover:font-bold hover:cursor-pointer underline">
|
||||||
|
(Change Username)
|
||||||
|
</p>
|
||||||
|
</Link>
|
||||||
|
);
|
||||||
|
};
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
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-lg text-center flex flex-col">
|
||||||
<p className="font-bold text-[30px]">{props.username}</p>
|
<p className="font-bold text-[30px]">{props.username}</p>
|
||||||
<Link to="/AdminChangeUserName">
|
{ManageUserOrMember(props.manageMember)}
|
||||||
<p className="mb-[20px] hover:font-bold hover:cursor-pointer underline">
|
|
||||||
(Change Username)
|
|
||||||
</p>
|
|
||||||
</Link>
|
|
||||||
<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:
|
||||||
|
|
|
@ -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}
|
||||||
/>
|
/>
|
||||||
|
|
Loading…
Add table
Reference in a new issue