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; } // first array of all members invited var allMembersInvited = props.room.members?.reduce((results, userId) => { if (userId in teamUsersMap) { results.push(teamUsersMap[userId]); } if (userId == currUser.uid) { results.push(user); } return results; }, [] as User[]); // second array of all members in room var allMembersInRoom = props.room.membersInRoom?.reduce((results, userId) => { if (userId in teamUsersMap) { results.push(teamUsersMap[userId]); } if (userId == currUser.uid) { results.push(user); } return results; }, [] as User[]); // third array all members invited and not in the array of users in room const allMembersInvitedButNotInRoom = allMembersInvited.filter( (invitedMember) => { if (allMembersInRoom.some((user) => user.id === invitedMember.id)) { /* vendors contains the element we're looking for */ return false; } return true; } ); // show members who are in the invite list but not already in the room const membersInvited = () => { if (allMembersInvited?.length == 0) { return; } const listOfNames = allMembersInvited .map((user) => user.nickName) .join(", "); return ( {allMembersInvitedButNotInRoom.map((user, i) => { return ( ); })} ); }; const membersInRoom = () => { if (allMembersInRoom?.length == 0) { return; } const listOfNames = allMembersInRoom .map((user) => user.nickName) .join(", "); return ( {allMembersInRoom.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()} {" "} ); }