diff --git a/packages/call/src/components/actions.tsx b/packages/call/src/components/actions.tsx index 0002e2f..6ff4661 100644 --- a/packages/call/src/components/actions.tsx +++ b/packages/call/src/components/actions.tsx @@ -6,18 +6,22 @@ import { TooltipContent, TooltipTrigger, } from "@tensamin/ui"; +import { useEffect, useState } from "react"; import MuteButton from "./buttons/mute"; import DeafButton from "./buttons/deaf"; import ScreenshareButton from "./buttons/screenshare"; import LeaveButton from "./buttons/leave"; import { setCallIsPopout, + setUsersInFocusedViewHidden, stopWatchingFocusedStream, triggerCallLayoutCalculation, useCall, } from "../store"; import InviteButton from "./buttons/invite"; import { + ChevronDown, + ChevronUp, Maximize, Minimize, SquareArrowOutDownLeft, @@ -37,9 +41,15 @@ export default function Actions() { focusedParticipantId != null && watchedStreamParticipantIds.includes(focusedParticipantId); + // Fullscreen stuff const callIsPopout = useCall((state) => state.callIsPopout); const callIsFullscreen = useCall((state) => state.callIsFullscreen); const screenRef = useCall((state) => state.screenRef); + const [portalContainer, setPortalContainer] = useState(); + + useEffect(() => { + setPortalContainer(screenRef?.current ?? undefined); + }, [screenRef]); const toggleFullscreen = async () => { if (callIsFullscreen) { @@ -51,18 +61,93 @@ export default function Actions() { triggerCallLayoutCalculation(); }; + // Hide users in focused view + const usersInFocusedViewHidden = useCall( + (state) => state.usersInFocusedViewHidden, + ); + return (
-
+
+ {view === "focused" && ( + + + setUsersInFocusedViewHidden(!usersInFocusedViewHidden) + } + variant="link" + className="w-11 h-11 p-0! ml-3 text-foreground" + > + {usersInFocusedViewHidden ? ( + + ) : ( + + )} + + } + /> + + Hide users + + + )} +
- - - - + + + } + /> + + Mute + + + + + } + /> + + Deafen + + + + + } + /> + + Screenshare + + + + + } + /> + + Invite + + {isWatchingFocusedStream ? (
diff --git a/packages/call/src/components/modals/base.tsx b/packages/call/src/components/modals/base.tsx index 03327d9..b75c129 100644 --- a/packages/call/src/components/modals/base.tsx +++ b/packages/call/src/components/modals/base.tsx @@ -90,10 +90,12 @@ function Overlay({ export default function Base({ participant, type, + fill = false, flush = false, }: { participant: Participant | undefined; type: "user" | "stream"; + fill?: boolean; flush?: boolean; }) { const { get } = useUser(); @@ -170,9 +172,9 @@ export default function Base({ render={
<> @@ -219,6 +221,7 @@ export default function Base({ {type === "stream" && (showStream ? ( store.state); + const screenRef = useCall((store) => store.screenRef); const isMobile = useIsMobile(); + const [portalContainer, setPortalContainer] = useState(); + + useEffect(() => { + setPortalContainer(screenRef?.current ?? undefined); + }, [screenRef]); return state === "closed" ? null : (