import { useRouter } from "next/router"; import { FaPlus, FaBackward, FaArrowCircleDown } from "react-icons/fa"; import { BsThreeDots } from "react-icons/bs"; import { useTeamDashboardContext } from "../../contexts/teamDashboardContext"; import { useEffect, useState } from "react"; import { toast } from "react-hot-toast"; import { TeamMemberRole, TeamMemberStatus } from "../../models/teamMember"; import { getFirestore } from "firebase/firestore"; import { Tooltip } from "antd"; import { ShowModalType, useKeyboardContext, } from "../../contexts/keyboardContext"; import UserStatusBubble, { UserPulse } from "../UserStatusBubble"; import { useAuth } from "../../contexts/authContext"; import PowerPlayer from "../Modals/PowerPlayer"; const maxNumberOfKeyboardMappings: number = 9; export default function TeamVoiceLine() { const { currUser } = useAuth(); const { addTeamShortcutBinding, selectTeamMember, selectedTeammate, isRecording, handleModalType, } = useKeyboardContext(); const router = useRouter(); const { teamid } = router.query; const { userTeamMember, teamUsers, messagesByTeamMate } = useTeamDashboardContext(); // todo use a global is loading const [loading, setLoading] = useState(false); // set up shortcuts for each teammate useEffect(() => { // create shortcuts if (!teamUsers) { console.log("no team members to map to shortcuts"); return; } teamUsers.forEach((tmUser, i) => { // make sure we don't map a user if they are past the max allowed if (i < maxNumberOfKeyboardMappings) { let shortcut: number = i + 49; // 49 is what number 1 is on the keyboard addTeamShortcutBinding(shortcut, tmUser.id); } }); }, [teamUsers]); async function handleAdminRoute() { if (userTeamMember.role == TeamMemberRole.admin) { router.push("/teams/" + teamid + "/admin"); return; } toast.error("You are not a team admin!"); } useEffect(() => { // todo move all variable stuff like shortcut mappings here }, [teamUsers]); function renderTeamMemberList() { // show loading skeleton if not yet got friend info if (loading) { return (
); } // if not teammates, stale state message to tell admin to add people if (!teamUsers) { return Please add team members.; } return teamUsers.map((tmember, i) => { var isMessageIncoming: boolean = false; if ( messagesByTeamMate.has(tmember.id) && messagesByTeamMate.get(tmember.id)[0]?.receiverUserId == currUser.uid ) { isMessageIncoming = true; } var customSelectClasses: string = ""; if (tmember.id == selectedTeammate) { customSelectClasses = "bg-white scale-150 z-20"; } else if (isMessageIncoming) { customSelectClasses = "bg-orange-500 bg-opacity-20"; } return ( selectTeamMember(tmember.id)} key={i} className={`rounded flex flex-row items-center py-2 px-2 justify-items-start ease-in-out duration-300 hover:cursor-pointer ${customSelectClasses}`} > asdf {tmember.id == selectedTeammate ? ( <> {tmember.nickName} {tmember.teamRole}{" "} ) : ( <> {tmember.nickName} {/* keyboard shortcuts start from 1 */} {i + 1} {tmember.teamRole} )} {tmember.id == selectedTeammate ? ( <> {isRecording ? ( ) : ( )} ) : ( {isMessageIncoming ? ( ) : ( "" )} )} ); }); } const [showPowerPlayer, setShowPowerPlayer] = useState(false); function handleCloseModal() { handleModalType(ShowModalType.na); setShowPowerPlayer(false); } function handleShowModal() { handleModalType(ShowModalType.powerPlayer); // disables controls setShowPowerPlayer(true); } return (
TEAM {/* list of team members */}
{renderTeamMemberList()}
); }