import { Divider, Modal, Radio, Select, Switch, Tooltip } from "antd"; import React, { useEffect, useState } from "react"; import toast from "react-hot-toast"; import { useAuth } from "../../contexts/authContext"; import { ShowModalType, useKeyboardContext, } from "../../contexts/keyboardContext"; import { useTeamDashboardContext } from "../../contexts/teamDashboardContext"; import Room, { RoomStatus, RoomType } from "../../models/room"; import { User } from "../../models/user"; import RoomService from "../../services/roomService"; const { Option } = Select; const roomService = new RoomService(); interface IModalProps { show: boolean; updateRoom: Room; handleClose: Function; } export default function CreateOrUpdateRoomModal(props: IModalProps) { const { currUser } = useAuth(); const { teamUsers, team, user } = useTeamDashboardContext(); const { pastedLink, handleModalType, showModalType } = useKeyboardContext(); // handle when we want to update a room and props changes // prefill with existing stuff useEffect(() => { console.log("change in props"); if (props.updateRoom) { setRoomLink(props.updateRoom.link); setRoomName(props.updateRoom.name); setRoomDescription(props.updateRoom.description); if (props.updateRoom.attachments && props.updateRoom.attachments[0]) { setRoomAttachment(props.updateRoom.attachments[0]); } setMembersSelected(props.updateRoom.members); setRoomType(props.updateRoom.type); setRoomAppxDateTime(props.updateRoom.approximateDateTime); } else { // update state when user does ctrl + v resetForm(); } }, [props.updateRoom]); // update state when user does ctrl + v useEffect(() => { // todo: check if link is valid google meet link? again? console.log("updated link!!!!!"); setRoomLink(pastedLink); }, [pastedLink]); const handleCloseModal = () => { resetForm(); props.handleClose(); }; const handleSubmit = async (e) => { e.preventDefault(); // make sure link, room, and type are selected if (!roomLink || !roomName) { toast.error("Please fill in room link and name."); return; } try { const newRoom = new Room(); if (roomAttachment) { newRoom.attachments = [roomAttachment]; } if (roomType == RoomType.now) { newRoom.status = RoomStatus.live; } newRoom.approximateDateTime = roomAppxDateTime; newRoom.link = roomLink; newRoom.members = [...membersSelected]; // add currUser to the list of "people" newRoom.type = roomType; newRoom.description = roomDescription; newRoom.name = roomName; newRoom.createdByUserId = currUser.uid; newRoom.teamId = team.id; if (props.updateRoom) { newRoom.id = props.updateRoom.id; newRoom.membersInRoom = props.updateRoom.membersInRoom; } await roomService.createOrUpdateRoom(newRoom); resetForm(); toast.success("done"); handleModalType(ShowModalType.na); } catch (error) { toast.error("problem creating room"); console.log(error); } }; function resetForm() { setRoomLink(""); setRoomName(""); setRoomDescription(""); setMembersSelected([currUser.uid] as string[]); setRoomAttachment(""); setRoomAppxDateTime(""); setRoomType(RoomType.now); setShowMoreDetails(false); } const [roomLink, setRoomLink] = useState(pastedLink ?? ""); const [roomName, setRoomName] = useState(""); const [roomDescription, setRoomDescription] = useState(""); const [roomAttachment, setRoomAttachment] = useState(""); const [membersSelected, setMembersSelected] = useState([ currUser.uid, ]); const [roomType, setRoomType] = useState(RoomType.now); const [roomAppxDateTime, setRoomAppxDateTime] = useState(""); // for certain room types const [showMoreDetails, setShowMoreDetails] = useState(false); function handleSelectMember(value) { // passed in array of selections...userIds setMembersSelected(value); console.log(value); } const allUsersForSelection: User[] = [...teamUsers, user]; const MemberSelection = () => { return ( ); }; return (
Link {roomLink ? ( Please make sure this is valid so that your team can join properly. ) : ( Click here to create one. )} setRoomLink(e.target.value)} /> Room Name Be specific enough, everyone down the hall will see this. setRoomName(e.target.value)} /> {/* room type selection */} Type setRoomType(event.target.value)} > {RoomType.now} {RoomType.scheduled} {RoomType.recurring} {roomType == RoomType.recurring || roomType == RoomType.scheduled ? ( Approximate Slot The calendar way of doing things is overwhelming. Put a rough day/time that makes sense to you. setRoomAppxDateTime(e.target.value)} /> ) : ( <> )} {showMoreDetails ? ( <> People {/* team or personal */} Whole team sees this room. Optional - Add any mandatory attendees you want or just tell them later and they will see it in the team section. {MemberSelection()} Agenda Optional