From 430ee0139523d6ab4c0fe0aabd7d20554fc06a02 Mon Sep 17 00:00:00 2001 From: talksik Date: Sat, 7 May 2022 16:19:08 -0500 Subject: [PATCH] setting simple stuff up at the start --- .../components/lines/lineRow.tsx/index.tsx | 157 +++++++++++++++--- 1 file changed, 131 insertions(+), 26 deletions(-) diff --git a/packages/desktop/src/components/lines/lineRow.tsx/index.tsx b/packages/desktop/src/components/lines/lineRow.tsx/index.tsx index 8c688d7..a89febe 100644 --- a/packages/desktop/src/components/lines/lineRow.tsx/index.tsx +++ b/packages/desktop/src/components/lines/lineRow.tsx/index.tsx @@ -1,12 +1,14 @@ import { FiActivity, FiSun } from "react-icons/fi"; -import { useCallback, useMemo } from "react"; +import { useCallback, useEffect, useMemo, useRef, useState } from "react"; import { $selectedLineId } from "../../../controller/recoil"; import { Avatar } from "antd"; import LineIcon from "../lineIcon"; import { LineMemberState } from "@nirvana/core/models/line.model"; import MasterLineData from "@nirvana/core/models/masterLineData.model"; +import Peer from "simple-peer"; import moment from "moment"; +import toast from "react-hot-toast"; import { useGetUserDetails } from "../../../controller/index"; import { useLineDataProvider } from "../../../controller/lineDataProvider"; import { useRecoilState } from "recoil"; @@ -111,37 +113,140 @@ export default function LineRow({ }, [masterLineData, userData]); return ( -
- handleSelectLine(masterLineData.lineDetails._id.toString()) - } - className={`flex flex-row items-center justify-start gap-2 p-2 px-4 h-14 hover:bg-gray-200 cursor-pointer transition-all + <> +
+ handleSelectLine(masterLineData.lineDetails._id.toString()) + } + className={`flex flex-row items-center justify-start gap-2 p-2 px-4 h-14 hover:bg-gray-200 cursor-pointer transition-all last:border-b-0 border-b border-b-gray-200 relative z-50 ${ selectedLineId === masterLineData.lineDetails._id.toString() && "bg-gray-200 scale-110 shadow-2xl translate-x-3" }`} - > - {/* status dot */} - {renderActivityIcon} + > + {/* status dot */} + {renderActivityIcon} - - {profilePictures && ( - - )} + + {profilePictures && ( + + )} -

- {masterLineData.lineDetails.name || - masterLineData.otherUserObjects[0].givenName} -

-
+

+ {masterLineData.lineDetails.name || + masterLineData.otherUserObjects[0].givenName} +

+
-
{renderRightActivity}
-
+
{renderRightActivity}
+
+ + {/* mounts and unmounts based on if in the room or now */} + {isUserTunedIn && ( + + )} + + ); +} + +function StreamRoom({ + initialTunedInUserIds, + currentBroadcasters, +}: { + initialTunedInUserIds?: string[]; + currentBroadcasters?: string[]; +}) { + // ?could move this up the tree and pass it down? or set it in the header? + // local stream specifically for this stream room + const [localStream, setLocalStream] = useState(); + const userStreamTagRef = useRef(null); + + // local peer map of userIds to peers + const [userPeers, setUserPeers] = useState<{ [userId: string]: Peer }>({}); + + useEffect(() => { + navigator.mediaDevices + .getUserMedia({ video: false, audio: true }) + .then((userStream) => { + setLocalStream(userStream); + + if (userStreamTagRef?.current) + userStreamTagRef.current.srcObject = userStream; + + // const audio = new Audio(); + // audio.autoplay = true; + // audio.srcObject = userStream; + }) + .catch((error) => { + console.error(error); + + toast.error( + "Make sure that you have permissions enabled and microphone connected" + ); + }); + }, []); + + // we only loop through peers that are associated to user Ids which exist in the currentBroadcasters array + return ( + <> +