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"; import EditSvg from "../../../assets/icons/edit.svg?react"; import Field from "../../Inputs/Field"; import { credentials } from "../../../Validation/validation"; import KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown'; /** * 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); //TODO - connect to redux const [orgStates, setOrgStates] = useState({ name: "Bluewave Labs", isLoading: false, isEdit: false, }); const toggleEdit = () => { setOrgStates((prev) => ({ ...prev, isEdit: !prev.isEdit })); }; const handleRename = () => {}; 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 [toInvite, setToInvite] = useState({ email: "", role: "", }); const [errors, setErrors] = useState({}); const handleChange = (event) => { const { value } = event.target; setToInvite((prev) => ({ ...prev, email: value, })); const validation = credentials.validate( { email: value }, { abortEarly: false } ); setErrors((prev) => { const updatedErrors = { ...prev }; if (validation.error) { updatedErrors.email = validation.error.details[0].message; } else { delete updatedErrors.email; } return updatedErrors; }); }; const [isOpen, setIsOpen] = useState(false); const handleInviteMember = () => {}; const closeInviteModal = () => { setIsOpen(false); setToInvite({ email: "", role: "" }); setErrors({}); }; const handleMembersQuery = (type) => { let count = 0; teamStates.members.forEach((member) => { type === "" ? count++ : member.type === type ? count++ : ""; }); return count; }; return (
Organization name setOrgStates((prev) => ({ ...prev, name: event.target.value, })) } disabled={!orgStates.isEdit} sx={{ color: theme.palette.otherColors.bluishGray, "& .Mui-disabled": { WebkitTextFillColor: "initial !important", }, "& .Mui-disabled fieldset": { borderColor: "transparent !important", }, }} inputProps={{ sx: { textAlign: "end", padding: theme.gap.small }, }} />