import { useEffect, useState } from "react"; import Button from "./Button"; import AddMember, { AddMemberInfo } from "./AddMember"; import GetUsersInProject, { ProjectMember } from "./GetUsersInProject"; import GetAllUsers from "./GetAllUsers"; import InputField from "./InputField"; /** * Provides UI for adding a member to a project. * @returns {JSX.Element} - Returns the component UI for adding a member */ function AddUserToProject(props: { projectName: string }): JSX.Element { const [names, setNames] = useState([]); const [users, setUsers] = useState([]); const [usersProj, setUsersProj] = useState([]); const [search, setSearch] = useState(""); // Gets all users and project members for filtering GetAllUsers({ setUsersProp: setUsers }); GetUsersInProject({ setUsersProp: setUsersProj, projectName: props.projectName, }); /* * Filters the members from users so that users who are already * members are not shown */ useEffect(() => { setUsers((prevUsers) => { const filteredUsers = prevUsers.filter( (user) => !usersProj.some((projectUser) => projectUser.Username === user), ); return filteredUsers; }); }, [usersProj]); // Attempts to add all of the selected users to the project const handleAddClick = async (): Promise => { if (names.length === 0) { alert("You have to choose at least one user to add"); return; } for (const name of names) { const newMember: AddMemberInfo = { userName: name, projectName: props.projectName, }; await AddMember({ memberToAdd: newMember }); } setNames([]); location.reload(); }; // Updates the names that have been selected const handleUserClick = (user: string): void => { setNames((prevNames): string[] => { if (!prevNames.includes(user)) { return [...prevNames, user]; } return prevNames.filter((name) => name !== user); }); }; return (

{props.projectName}

Choose users to add:

{ setSearch(e.target.value); }} />
    {users .filter((user) => { return search.toLowerCase() === "" ? user : user.toLowerCase().includes(search.toLowerCase()); }) .map((user) => (
  • { handleUserClick(user); }} > {user}
  • ))}

Number of users to be added: {names.length}

); } export default AddUserToProject;