import { useRouter } from "next/router"; import { FaPlus } from "react-icons/fa"; import { IoPulseOutline, IoRemoveOutline, IoTimer } from "react-icons/io5"; import { BsThreeDots } from "react-icons/bs"; import { useTeamDashboardContext } from "../../contexts/teamDashboardContext"; import { User, UserStatus } from "../../models/user"; import { useEffect, useState } from "react"; import { toast } from "react-hot-toast"; import { TeamMemberRole, TeamMemberStatus } from "../../models/teamMember"; import UserService from "../../services/userService"; import { doc, DocumentSnapshot, getFirestore, onSnapshot, Unsubscribe, } from "firebase/firestore"; import { Collections } from "../../services/collections"; const userService = new UserService(); const db = getFirestore(); function statusBubble(status: UserStatus) { console.log(status); switch (status) { case UserStatus.online: return ( ); case UserStatus.busy: return ( ); case UserStatus.offline: return ( ); default: return ( ); } } function renderPulse(status: UserStatus) { switch (status) { case UserStatus.online: return ( ); case UserStatus.busy: return ( ); case UserStatus.offline: return ( ); default: return ( ); } } export default function TeamVoiceLine() { const router = useRouter(); const { teamid } = router.query; const { team, user, userTeamMember, teamMembers } = useTeamDashboardContext(); const [loading, setLoading] = useState(true); const [teamUsers, setTeamUsers] = useState([]); const [count, setCount] = useState(0); useEffect(() => { const unsubs: Unsubscribe[] = []; (async function () { try { // listeners for all teammates' status if (teamMembers) { teamMembers.map((tmember) => { if (tmember.status == TeamMemberStatus.activated) { const docRef = doc(this.db, Collections.users, tmember.userId); const unsub = onSnapshot(docRef, (doc) => { console.log(doc.data()); }); unsubs.push(unsub); } return; }); } } catch (error) { console.log(error); toast.error("Something went wrong"); router.push("/teams/login"); } setLoading(false); })(); return () => { unsubs.map((listener) => listener()); }; }, []); async function handleAdminRoute() { if (userTeamMember.role == TeamMemberRole.admin) { router.push("/teams/" + teamid + "/admin"); return; } toast.error("You are not a team admin!"); } 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.length) { return Please add team members.; } return teamMembers.map((tmember, i) => { return ( {statusBubble(UserStatus.online)} asdf {tmember.inviteEmailAddress} {tmember.role} {renderPulse(UserStatus.online)} ); }); } return (
TEAM {/* list of team members */} {renderTeamMemberList()}
); }