import { BsThreeDots } from "react-icons/bs"; import { FaBell, FaClock, FaLink } from "react-icons/fa"; import { IoTimer } from "react-icons/io5"; import Room from "../models/room"; import RoomTypeTag from "./RoomTypeTag"; import Image from "next/image"; import { useAuth } from "../contexts/authContext"; import { Avatar, Divider, Tooltip } from "antd"; import { UserOutlined, AntDesignOutlined } from "@ant-design/icons"; import { useTeamDashboardContext } from "../contexts/teamDashboardContext"; import { User } from "../models/user"; interface IRoomCardProps { room: Room; } export default function RoomCard(props: IRoomCardProps) { const { currUser } = useAuth(); const { teamUsersMap, user } = useTeamDashboardContext(); var isUserInRoom: boolean; if (props.room.membersInRoom?.includes(currUser.uid)) { isUserInRoom = true; } const listOfValidUserIdsInRoom: string[] = props.room.membersInRoom?.filter( (userId) => userId in teamUsersMap ); // show members who are in the invite list but not already in the room const membersInvited = () => { if (!listOfValidUserIdsInRoom) { return; } const invitedMembersNotInRoom = props.room.members?.filter( (memberId) => !listOfValidUserIdsInRoom.includes(memberId) ); console.log(invitedMembersNotInRoom); var listOfUsersInvited = invitedMembersNotInRoom.reduce( (results, userId) => { if (userId in teamUsersMap) { results.push(teamUsersMap[userId]); } if (userId == currUser.uid) { results.push(user); } return results; }, [] as User[] ); console.log(listOfUsersInvited); if (!listOfUsersInvited || listOfUsersInvited.length == 0) { console.log("no invited members to show"); return; } const listOfMembersString = listOfUsersInvited .map((user) => user.nickName ?? user.firstName) .join(", "); console.log(listOfMembersString); return ( {listOfUsersInvited.map((user, i) => { return ( ); })} ); }; const membersInRoom = () => { if (!listOfValidUserIdsInRoom) { return; } const listOfUsersInRoom: User[] = listOfValidUserIdsInRoom.map( (userId) => teamUsersMap[userId] ); const listOfMembersString = listOfUsersInRoom .map((user) => user.nickName) .join(", "); // handle if I am in the room if (isUserInRoom) { listOfUsersInRoom.push(user); } return ( {listOfUsersInRoom.map((user, i) => { return ( ); })} ); }; return ( {/* header */} {/* meeting details */} {props.room.name} {props.room.description} {/* badges and tags */} {/* scrum */} {/* all invited members who are not in the room already */} {membersInvited()} {/* room status and link(s) */} {/* room attachments */} {props.room.attachments && props.room.attachments.length > 0 && ( )} {/* footer */} {membersInRoom()} {" "} ); }