import { Avatar, Button, ListItemIcon, ListItemText, Menu, MenuItem, MenuList, } from "@mui/material"; import { GlobalHotKeys, KeyMap } from "react-hotkeys"; import { HeadsetMicSharp, VideocamSharp } from "@mui/icons-material"; import { useCallback, useEffect, useMemo, useRef, useState } from "react"; import { $selectedOutputMode } from "../../controller/recoil"; import { FaSearch } from "react-icons/fa"; import Logo from "../Logo"; import { useGetUserDetails } from "../../controller/index"; import { useRecoilState } from "recoil"; export default function NirvanaHeader() { const { data: userDetailsRes, isLoading } = useGetUserDetails(); const inputRef = useRef(null); const [searchInput, setSearchInput] = useState(""); const [anchorEl, setAnchorEl] = useState(null); const [outputMode, setOutputMode] = useRecoilState($selectedOutputMode); const [userVideoStream, setUserVideoStream] = useState(undefined); // todo: show user local video stream useEffect(() => { navigator.mediaDevices .getUserMedia({ video: true, audio: true }) .then((stream: MediaStream) => { setUserVideoStream(stream); }); }, []); useEffect(() => { if (userVideoStream && outputMode === "video") document.querySelector("video").srcObject = userVideoStream; }, [userVideoStream, outputMode]); const menuOpen = useMemo(() => Boolean(anchorEl), [anchorEl]); const handleOpenMenu = useCallback((event: React.MouseEvent) => { setAnchorEl(event.currentTarget); }, []); const handleCloseMenu = useCallback(() => { setAnchorEl(null); }, []); const selectSearch = () => { inputRef.current?.focus(); }; const onSearchChange = (e) => { setSearchInput(e.target.value); }; const keyMap: KeyMap = { SELECT_SEARCH: { name: "select search to start searching", sequence: "/", action: "keyup", }, }; const handlers = { SELECT_SEARCH: selectSearch, }; if (isLoading) return <>loading; return ( <>
{/* todo: move this ghost button to components */}
{outputMode === "video" && (
{/* menu for the output options */} setOutputMode("audio")}> Audio Only setOutputMode("video")}> Video
); }