diff --git a/src/app/features/room/Room.tsx b/src/app/features/room/Room.tsx index 5e5d7d784..4e7fead2d 100644 --- a/src/app/features/room/Room.tsx +++ b/src/app/features/room/Room.tsx @@ -18,12 +18,15 @@ import { CallView } from '../call/CallView'; import { RoomViewHeader } from './RoomViewHeader'; import { callChatAtom } from '../../state/callEmbed'; import { CallChatView } from './CallChatView'; +import { useCallEmbed } from '../../hooks/useCallEmbed'; export function Room() { const { eventId } = useParams(); const room = useRoom(); const mx = useMatrixClient(); + const callEmbed = useCallEmbed(); + const [isDrawer] = useSetting(settingsAtom, 'isPeopleDrawer'); const [hideActivity] = useSetting(settingsAtom, 'hideActivity'); const screenSize = useScreenSizeContext(); @@ -43,7 +46,7 @@ export function Room() { ) ); - const callView = room.isCallRoom(); + const callView = callEmbed?.roomId === room.roomId || room.isCallRoom(); return ( diff --git a/src/app/features/room/RoomViewHeader.tsx b/src/app/features/room/RoomViewHeader.tsx index eee9ae423..a38290f78 100644 --- a/src/app/features/room/RoomViewHeader.tsx +++ b/src/app/features/room/RoomViewHeader.tsx @@ -68,6 +68,7 @@ import { useRoomPermissions } from '../../hooks/useRoomPermissions'; import { InviteUserPrompt } from '../../components/invite-user-prompt'; import { ContainerColor } from '../../styles/ContainerColor.css'; import { RoomSettingsPage } from '../../state/roomSettings'; +import { useCallEmbed, useCallStart } from '../../hooks/useCallEmbed'; type RoomMenuProps = { room: Room; @@ -304,6 +305,11 @@ export function RoomViewHeader({ callView }: { callView?: boolean }) { setPeopleDrawer(!peopleDrawer); }; + const callEmbed = useCallEmbed(); + const startCall = useCallStart(direct); + const callStarted = callEmbed && callEmbed.roomId === room.roomId; + const inAnotherCall = callEmbed && !callStarted; + return ( } /> - + {direct && !callStarted && ( + + {inAnotherCall ? ( + Already in another call — End the current call to join! + ) : ( + Start Call + )} + + } + > + {(triggerRef) => ( + startCall(room, { microphone: true, video: true, sound: true })} + disabled={inAnotherCall} + > + + + )} + + )} {screenSize === ScreenSize.Desktop && (