import { Divider } from "antd"; import { useRouter } from "next/router"; import { useEffect, useState } from "react"; import Loading from "../../../components/Loading"; import { TeamDashboardContextProvider, useTeamDashboardContext, } from "../../../contexts/teamDashboardContext"; import { TeamMember, TeamMemberRole, TeamMemberStatus, } from "../../../models/teamMember"; import { toast } from "react-hot-toast"; import { Team, TeamStatus } from "../../../models/team"; import { FaMoneyBillWave, FaTrash, FaPaperPlane, FaArrowLeft, } from "react-icons/fa"; import TeamService from "../../../services/teamService"; import Router from "next/router"; import Moment from "react-moment"; export default function TeamAdminWrapper() { return ( ); } const initialSite: string = "https://"; function renderTeamMemberStatus(status: TeamMemberStatus) { switch (status) { case TeamMemberStatus.invited: return ( invited ); case TeamMemberStatus.activated: return ( active ); case TeamMemberStatus.deleted: return ( deleted ); } } const teamService = new TeamService(); function TeamAdmin() { const router = useRouter(); const { teamid } = router.query; const { team, userTeamMember, teamMembers, user } = useTeamDashboardContext(); const [error, setError] = useState(""); const [teamName, setTeamName] = useState(team.name); const [companySite, setcompanySite] = useState(team.companySite); const [inviteEmail, setInviteEmail] = useState(""); const [loading, setLoading] = useState(true); useEffect(() => { (async function () { // have checks for team and part of team or not in context try { // if not admin, I shouldn't be here if (userTeamMember.role != TeamMemberRole.admin) { toast.error("You are not allowed here!"); router.push("/teams"); } } catch (error) { console.log("something went wrong in admin team page"); router.push("/teams"); } setLoading(false); })(); }, []); async function handleSubmitTeamUpdate(e) { e.preventDefault(); setLoading(true); if (!teamName) { setError("You must input a team name!"); return; } try { const updatedTeam = new Team(); updatedTeam.id = team.id; updatedTeam.name = teamName; updatedTeam.createdByUserId = user.id; updatedTeam.status = TeamStatus.created; if (companySite != initialSite) { // make sure to put null in database for the team updatedTeam.companySite = companySite; } // update team name and company site if it changed await teamService.updateTeam(updatedTeam); // take user back to team dashboard router.push("/teams/" + team.id); } catch (error) { setError(error.message); console.log(error); } setLoading(false); } async function handleSubmitNewTeamMember(e) { e.preventDefault(); setLoading(true); if (!inviteEmail) { setError("You must input a valid email!"); return; } try { const newInviteTeamMember = new TeamMember(); newInviteTeamMember.inviteEmailAddress = inviteEmail; newInviteTeamMember.invitedByUserId = user.id; newInviteTeamMember.status = TeamMemberStatus.invited; newInviteTeamMember.teamId = team.id; await teamService.createTeamInvite(newInviteTeamMember); Router.reload(); } catch (error) { toast.error("something went wrong"); } } async function handleDeleteTeamMember(e, teamMemberId: string) { e.preventDefault(); setLoading(true); try { await teamService.updateTeamMemberStatus( teamMemberId, TeamMemberStatus.deleted ); Router.reload(); } catch (error) { toast.error("unable to delete team member"); } } if (loading) { return ; } async function handleInviteTeamMember(e, teamMemberId: string) { e.preventDefault(); setLoading(true); try { await teamService.updateTeamMemberStatus( teamMemberId, TeamMemberStatus.invited ); Router.reload(); } catch (error) { toast.error("unable to delete team member"); } } if (loading) { return ; } // get count of all active and invited users... const activeOrInvited = teamMembers.filter( (tmember) => tmember.status == TeamMemberStatus.invited || tmember.status == TeamMemberStatus.activated ); const teamSpotsRemaining = (team.allowedUserCount || 0) - activeOrInvited.length - 1; return (
{/* header */}
router.push("/teams/" + teamid)} />{" "} Manage Team
{error && {error}} Team Name Everyone in your team will see this. setTeamName(e.target.value)} /> Company Site optional setcompanySite(e.target.value)} />
Billing Please email{" "} {" "} to open more spots for your team. {teamSpotsRemaining} spots remaining Team {/* current user */}
asdf {user.firstName + " " + user.lastName} admin {renderTeamMemberStatus(userTeamMember.status)} {user.emailAddress}
{/* mapping all team members */} {teamMembers.map((tmember, i) => { return (
{tmember.inviteEmailAddress} {renderTeamMemberStatus(tmember.status)} {/* todo: date joined */} {/* */} {tmember.status == TeamMemberStatus.deleted && teamSpotsRemaining > 0 ? ( ) : ( <> )} {tmember.status == TeamMemberStatus.invited || tmember.status == TeamMemberStatus.activated ? ( ) : ( <> )}
); })} {/* input for adding people */} {teamSpotsRemaining > 0 ? ( <> Add Members IMPORTANT: Tell them to sign up at{" "} usenirvana.com{" "} {" "} using this same email address. setInviteEmail(e.target.value)} /> {inviteEmail ? ( ) : ( )} ) : ( <> )}
); }