ui for the people group icons
This commit is contained in:
+99
-34
@@ -5,52 +5,114 @@ import Room from "../models/room";
|
|||||||
import RoomTypeTag from "./RoomTypeTag";
|
import RoomTypeTag from "./RoomTypeTag";
|
||||||
import Image from "next/image";
|
import Image from "next/image";
|
||||||
import { useAuth } from "../contexts/authContext";
|
import { useAuth } from "../contexts/authContext";
|
||||||
import { Tooltip } from "antd";
|
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 {
|
interface IRoomCardProps {
|
||||||
room: Room;
|
room: Room;
|
||||||
}
|
}
|
||||||
export default function RoomCard(props: IRoomCardProps) {
|
export default function RoomCard(props: IRoomCardProps) {
|
||||||
const { currUser } = useAuth();
|
const { currUser } = useAuth();
|
||||||
|
const { teamUsersMap, user } = useTeamDashboardContext();
|
||||||
// const x = {`${
|
|
||||||
// props.room.membersInRoom?.includes(currUser.uid)
|
|
||||||
// ? " bg-white bg-opacity-80"
|
|
||||||
// : "bg-gray-300 bg-opacity-25"
|
|
||||||
// }`}
|
|
||||||
|
|
||||||
var isUserInRoom: boolean;
|
var isUserInRoom: boolean;
|
||||||
if (props.room.membersInRoom?.includes(currUser.uid)) {
|
if (props.room.membersInRoom?.includes(currUser.uid)) {
|
||||||
isUserInRoom = true;
|
isUserInRoom = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
const membersInRoom = (
|
const listOfValidUserIdsInRoom: string[] = props.room.membersInRoom?.filter(
|
||||||
<Tooltip title={"Arjun and Liam"}>
|
(userId) => userId in teamUsersMap
|
||||||
<span className="inline-flex flex-row-reverse items-center shrink-0 mr-1">
|
|
||||||
<span className="relative flex">
|
|
||||||
<span className="bg-gray-200 rounded-full shadow-md absolute w-full h-full"></span>
|
|
||||||
<Image
|
|
||||||
className=""
|
|
||||||
src={"/avatars/svg/Artboards_Diversity_Avatars_by_Netguru-20.svg"}
|
|
||||||
alt="profile"
|
|
||||||
width={30}
|
|
||||||
height={30}
|
|
||||||
/>
|
|
||||||
</span>
|
|
||||||
<span className="-mr-4 relative flex">
|
|
||||||
<span className="bg-gray-200 rounded-full shadow-md absolute w-full h-full"></span>
|
|
||||||
<Image
|
|
||||||
className=""
|
|
||||||
src={"/avatars/svg/Artboards_Diversity_Avatars_by_Netguru-22.svg"}
|
|
||||||
alt="profile"
|
|
||||||
width={30}
|
|
||||||
height={30}
|
|
||||||
/>
|
|
||||||
</span>
|
|
||||||
</span>
|
|
||||||
</Tooltip>
|
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// show members who are in the invite list but not already in the room
|
||||||
|
const membersInvited = () => {
|
||||||
|
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 (
|
||||||
|
<Tooltip title={listOfMembersString}>
|
||||||
|
<span className="inline-flex flex-row-reverse items-center shrink-0 mr-1">
|
||||||
|
<Avatar.Group>
|
||||||
|
{listOfUsersInvited.map((user, i) => {
|
||||||
|
return (
|
||||||
|
<Avatar
|
||||||
|
key={user.id}
|
||||||
|
src={user.avatarUrl}
|
||||||
|
className="shadow-xl"
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
})}
|
||||||
|
</Avatar.Group>
|
||||||
|
</span>
|
||||||
|
</Tooltip>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
const membersInRoom = () => {
|
||||||
|
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 (
|
||||||
|
<Tooltip title={listOfMembersString}>
|
||||||
|
<span className="inline-flex flex-row-reverse items-center shrink-0 mr-1">
|
||||||
|
<Avatar.Group>
|
||||||
|
{listOfUsersInRoom.map((user, i) => {
|
||||||
|
return (
|
||||||
|
<Avatar
|
||||||
|
key={user.id}
|
||||||
|
src={user.avatarUrl}
|
||||||
|
className="shadow-xl"
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
})}
|
||||||
|
</Avatar.Group>
|
||||||
|
</span>
|
||||||
|
</Tooltip>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<span
|
<span
|
||||||
className={`flex flex-col ${
|
className={`flex flex-col ${
|
||||||
@@ -71,7 +133,7 @@ export default function RoomCard(props: IRoomCardProps) {
|
|||||||
<span
|
<span
|
||||||
className={`${
|
className={`${
|
||||||
isUserInRoom ? " text-gray-400" : "text-gray-200"
|
isUserInRoom ? " text-gray-400" : "text-gray-200"
|
||||||
} text-xs overflow-wrap`}
|
} text-xs overflow-wrap mb-4`}
|
||||||
>
|
>
|
||||||
{props.room.description}
|
{props.room.description}
|
||||||
</span>
|
</span>
|
||||||
@@ -82,6 +144,9 @@ export default function RoomCard(props: IRoomCardProps) {
|
|||||||
<span>scrum</span>
|
<span>scrum</span>
|
||||||
</span>
|
</span>
|
||||||
</span> */}
|
</span> */}
|
||||||
|
|
||||||
|
{/* all invited members who are not in the room already */}
|
||||||
|
{membersInvited()}
|
||||||
</span>
|
</span>
|
||||||
|
|
||||||
{/* room status and link(s) */}
|
{/* room status and link(s) */}
|
||||||
@@ -108,7 +173,7 @@ export default function RoomCard(props: IRoomCardProps) {
|
|||||||
|
|
||||||
{/* footer */}
|
{/* footer */}
|
||||||
<span className="flex flex-row items-center bg-gray-400 bg-opacity-30 p-3">
|
<span className="flex flex-row items-center bg-gray-400 bg-opacity-30 p-3">
|
||||||
{membersInRoom}
|
{membersInRoom()}
|
||||||
<button className="ml-auto text-sm text-orange-500 font-semibold py-1 px-4 bg-gray-200 rounded">
|
<button className="ml-auto text-sm text-orange-500 font-semibold py-1 px-4 bg-gray-200 rounded">
|
||||||
👋 Leave
|
👋 Leave
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
Reference in New Issue
Block a user