From f94b493a9757181a66c0452ed4f030c964afac17 Mon Sep 17 00:00:00 2001 From: Arjun Patel Date: Sat, 22 Jan 2022 17:00:31 -0800 Subject: [PATCH] handle data joining and leaving office room --- components/Dashboard/Office.tsx | 19 ++++-- components/Dashboard/Rooms.tsx | 2 +- components/OfficeCard.tsx | 101 ++++++++++++++++++++++++++++---- services/officeRoomService.tsx | 41 +++++++------ 4 files changed, 127 insertions(+), 36 deletions(-) diff --git a/components/Dashboard/Office.tsx b/components/Dashboard/Office.tsx index 1a112f2..2bb9fe6 100644 --- a/components/Dashboard/Office.tsx +++ b/components/Dashboard/Office.tsx @@ -1,3 +1,4 @@ +import { Tooltip } from "antd"; import { collection, getFirestore, @@ -81,15 +82,21 @@ export default function Office() { // if there are none, then show user button to create initial office rooms and then create them return ( -
- - - Office +
+ + + + Office + - + {/* all office rooms */} - + {allOfficeRooms.map((officeRoom) => ( ))} diff --git a/components/Dashboard/Rooms.tsx b/components/Dashboard/Rooms.tsx index d8d7ce4..03e8c17 100644 --- a/components/Dashboard/Rooms.tsx +++ b/components/Dashboard/Rooms.tsx @@ -362,7 +362,7 @@ export default function DashboardRoom() { } return ( -
+
{/* modal for creating room */} memberId != currUser.uid + ); + + await officeRoomService.updateMembersInOfficeRoom( + props.officeRoom.id, + newMembersInRoom + ); + } catch (error) { + console.error(error); + toast.error("problem leaving office room"); + } + } + + // check if user is in the office room + var isUserInRoom: boolean = false; + if (props.officeRoom.members?.includes(currUser.uid)) { + isUserInRoom = true; + } + return ( - + {renderOfficePulse(props.officeRoom.state)} @@ -35,19 +96,39 @@ export default function OfficeCard(props: IOfficeCard) { {/* all members in room */} - + {allMembersInRoom.map((member) => { - - {member.nickName[0]} - ; + return ( + + + {member.nickName[0]} + + + ); })} + + {isUserInRoom ? ( + + ) : ( + + )} ); diff --git a/services/officeRoomService.tsx b/services/officeRoomService.tsx index c32f115..73cbbc2 100644 --- a/services/officeRoomService.tsx +++ b/services/officeRoomService.tsx @@ -9,7 +9,7 @@ import { setDoc, writeBatch, } from "firebase/firestore"; -import OfficeRoom from "../models/officeRoom"; +import OfficeRoom, { OfficeRoomState } from "../models/officeRoom"; import { Collections } from "./collections"; export default class OfficeRoomService { @@ -23,7 +23,7 @@ export default class OfficeRoomService { const corner = new OfficeRoom("Corner", teamId, createdByUserId); const main = new OfficeRoom("Team Hub", teamId, createdByUserId); const handsOnDeck = new OfficeRoom( - "All Hand On Deck", + "All Hands On Deck", teamId, createdByUserId ); @@ -58,24 +58,27 @@ export default class OfficeRoomService { // } // } - // async updateMembersInRoom(roomId: string, newMembersInRoom: string[]) { - // // if the room is going to be empty, then change status accordingly - // var status: RoomStatus = RoomStatus.live; - // if (newMembersInRoom.length == 0) { - // status = RoomStatus.empty; - // } + async updateMembersInOfficeRoom( + officeRoomId: string, + newMembersInRoom: string[] + ) { + // if the room is going to be empty, then change status accordingly + var state: OfficeRoomState = OfficeRoomState.active; + if (newMembersInRoom.length == 0) { + state = OfficeRoomState.idle; + } - // const docRef = doc(this.db, Collections.rooms, roomId); - // await setDoc( - // docRef, - // { - // status, - // membersInRoom: newMembersInRoom, - // lastUpdatedDate: serverTimestamp(), - // }, - // { merge: true } - // ); - // } + const docRef = doc(this.db, Collections.officeRooms, officeRoomId); + await setDoc( + docRef, + { + state, + members: newMembersInRoom, + lastUpdatedDate: serverTimestamp(), + }, + { merge: true } + ); + } // async updateRoom(room: Room) { // const docRef = doc(this.db, Collections.rooms, room.id);