import React, { useEffect, useState } from "react"; import { FaAngleDown, FaBell, FaClock, FaPlus, FaLink } from "react-icons/fa"; import { IoTimer } from "react-icons/io5"; import { BsThreeDots } from "react-icons/bs"; import Image from "next/image"; import CreateRoom from "../Modals/CreateRoom"; import { ShowModalType, useKeyboardContext, } from "../../contexts/keyboardContext"; import { collection, getFirestore, onSnapshot, orderBy, query, where, } from "firebase/firestore"; import { Collections } from "../../services/collections"; import { useTeamDashboardContext } from "../../contexts/teamDashboardContext"; import Room, { RoomStatus, RoomType } from "../../models/room"; import { useAuth } from "../../contexts/authContext"; import { Dropdown, Menu, Radio } from "antd"; import RoomCard from "../RoomCard"; enum RoomTypeFilter { all = "all", me = "me", live = "live", archived = "archived", } enum RoomTimeFilter { today = "today", week = "week", month = "month", } const db = getFirestore(); const lastWeek = new Date(); lastWeek.setDate(lastWeek.getDate() - 7); export default function DashboardRoom() { const { currUser } = useAuth(); const { handleModalType } = useKeyboardContext(); const { team } = useTeamDashboardContext(); const [roomsMap, setRoomsMap] = useState>( new Map() ); // get rooms data realtime useEffect(() => { /** * QUERY: * all rooms in the past week * order createdDate desc * */ const q = query( collection(db, Collections.rooms), where("teamId", "==", team.id), where("createdDate", ">", lastWeek), orderBy("createdDate", "desc") ); // return unsubscribe return onSnapshot(q, (snapshot) => { snapshot.docChanges().forEach((change) => { let updatedRoom = change.doc.data() as Room; updatedRoom.id = change.doc.id; if (change.type === "added" || change.type === "modified") { console.log("New or updated room: ", updatedRoom); // update rooms map setRoomsMap((prevMap) => { return new Map(prevMap.set(updatedRoom.id, updatedRoom)); }); } if (change.type === "removed") { console.log("Removed room: ", updatedRoom); } }); }); }, []); // on CTRL + Q, new tab to google meet // on CTRL + V, show modal to create meeting with the link const [selectedTabPane, setSelectedTabPane] = useState( RoomTypeFilter.all ); // tab pane ui from scratch // function renderTabPane() { // return ( // // setSelectedTabPane(RoomTypeFilter.all)} // className={`${ // selectedTabPane == RoomTypeFilter.all // } underline underline-offset-8 decoration-white text-white hover:text-white hover:cursor-pointer`} // > // All // // setSelectedTabPane(RoomTypeFilter.me)} // className="text-gray-300 hover:text-white hover:cursor-pointer" // > // Me // // setSelectedTabPane(RoomTypeFilter.now)} // className="text-gray-300 hover:text-white hover:cursor-pointer" // > // Now // // setSelectedTabPane(RoomTypeFilter.scheduled)} // className="text-gray-300 hover:text-white hover:cursor-pointer" // > // Scheduled // // setSelectedTabPane(RoomTypeFilter.recurring)} // className="text-gray-300 hover:text-white hover:cursor-pointer" // > // Recurring // // setSelectedTabPane(RoomTypeFilter.archived)} // className="text-gray-300 hover:text-white hover:cursor-pointer" // > // Archive // // // ); // } const allRooms = Array.from(roomsMap.values()); const meRooms = allRooms.filter((room) => room.members.includes(currUser.uid) ); const liveRooms = allRooms.filter((room) => room.status == RoomStatus.live); const archivedRooms = allRooms.filter( (room) => room.status == RoomStatus.archived ); function getRoomContent() { // return data based on the selected filters switch (selectedTabPane) { case RoomTypeFilter.all: return allRooms; case RoomTypeFilter.me: return meRooms; case RoomTypeFilter.live: return liveRooms; default: return allRooms; } } const TimePeriodFilterMenu = ( Past 24 Hours (Coming Soon) This Month(Coming Soon) ); return (
{/* modal for creating room */} {/* header */} ROOMS setSelectedTabPane(e.target.value)} > {RoomTypeFilter.all}{" "} {allRooms.length} {RoomTypeFilter.me}{" "} {meRooms.length} {RoomTypeFilter.live}{" "} {liveRooms.length} {RoomTypeFilter.archived}{" "} {archivedRooms.length} Week {/* all rooms */} {getRoomContent().map((room) => { return ; })}
); }