import { useTheme } from "@emotion/react"; import TabPanel from "@mui/lab/TabPanel"; import { Box, Checkbox, Container, Divider, MenuItem, Modal, Select, Stack, Table, TableBody, TableCell, TableHead, TableRow, TextField, Typography, } from "@mui/material"; import ButtonSpinner from "../../ButtonSpinner"; import Button from "../../Button"; import { useState } from "react"; /** * TeamPanel component manages the organization and team members, * providing functionalities like renaming the organization, managing team members, * and inviting new members. * * @returns {JSX.Element} */ const teamColumns = [ { id: "checkbox", label: "", sx: { minWidth: "20px", width: "40px" }, }, { id: "name", label: "NAME", sx: { fontSize: "12px" }, }, { id: "email", label: "EMAIL", sx: { fontSize: "12px" } }, { id: "role", label: "ROLE", sx: { fontSize: "12px" } }, ]; //for testing, will be removed later const teamConfig = [ { id: 0, isChecked: false, name: "John Connor", email: "john@domain.com", type: "admin", role: "Administrator", createdAt: "10/4/2022", }, { id: 1, isChecked: false, name: "Adam McFadden", email: "adam@domain.com", type: "member", role: "Member", createdAt: "10/4/2022", }, { id: 2, isChecked: false, name: "Cris Cross", email: "cris@domain.com", type: "member", role: "Member", createdAt: "10/4/2022", }, { id: 3, isChecked: false, name: "Prince", email: "prince@domain.com", type: "member", role: "Member", createdAt: "10/4/2022", }, ]; const actionsConfig = [ { value: "bulk", label: "Bulk actions", }, ]; const roleConfig = [ { value: "role", label: "Change role to", }, ]; const TeamPanel = () => { const theme = useTheme(); //TODO - use redux loading state //!! - currently all loading buttons are tied to the same state const [isLoading, setIsLoading] = useState(false); const [orgStates, setOrgStates] = useState({ name: "Bluewave Labs", isLoading: false, isOpen: false, newName: "", }); const toggleOrgModal = (state) => { setOrgStates((prev) => ({ ...prev, isOpen: state, })); }; const toggleOrgLoading = (state) => { setOrgStates((prev) => ({ ...prev, isLoading: state, })); }; const handleRenameOrg = () => { toggleOrgLoading(true); setTimeout(() => { setOrgStates((prev) => ({ ...prev, name: prev.newName !== "" ? prev.newName : prev.name, isLoading: false, isOpen: false, newName: "", })); }, 2000); }; const [teamStates, setTeamStates] = useState({ members: teamConfig, filter: "", }); const handleCheckCell = (id) => { const updatedTeamStates = [...teamStates.members]; updatedTeamStates[id] = { ...updatedTeamStates[id], isChecked: !updatedTeamStates[id].isChecked, }; setTeamStates((prev) => ({ ...prev, members: updatedTeamStates, })); }; const handleFilter = (filter) => { setTeamStates((prev) => ({ ...prev, filter: filter, })); }; //TODO - implement select action function const handleSelectActionType = () => { setIsLoading(true); setTimeout(() => { setIsLoading(false); }, 2000); }; //TODO - implement select role function const handleSelectRoleType = () => { setIsLoading(true); setTimeout(() => { setIsLoading(false); }, 2000); }; //TODO - implement save team function const handleSaveTeam = () => { setIsLoading(true); setTimeout(() => { setIsLoading(false); }, 2000); }; const [toggleInviteModal, setToggleInviteModal] = useState(false); const handleInviteMember = () => {}; const handleMembersQuery = (type) => { let count = 0; teamStates.members.forEach((member) => { type === "" ? count++ : member.type === type ? count++ : ""; }); return count; }; return (
Organization name toggleOrgModal(true)} isLoading={orgStates.isLoading} sx={{ fontSize: "13px" }} />
Team members
handleFilter("")} sx={{ cursor: "pointer" }}> All {handleMembersQuery("")} handleFilter("admin")} sx={{ cursor: "pointer" }} > Administrator {handleMembersQuery("admin")} handleFilter("member")} sx={{ cursor: "pointer" }} > Member {handleMembersQuery("member")}
{teamColumns.map((cell) => ( {cell.label} ))} {teamStates.members.map((cell) => teamStates.filter === "" || teamStates.filter === cell.type ? ( handleCheckCell(cell.id)} inputProps={{ "aria-label": "controlled" }} /> {cell.name} Created at {cell.createdAt} {cell.email} {cell.role} ) : ( "" ) )}