Add a URL parameter for hiding the room header

This commit is contained in:
Robin Townsend 2022-09-09 02:04:53 -04:00
commit 3186b5f24b
6 changed files with 53 additions and 22 deletions

View file

@ -30,20 +30,24 @@ import { useSentryGroupCallHandler } from "./useSentryGroupCallHandler";
import { useLocationNavigation } from "../useLocationNavigation"; import { useLocationNavigation } from "../useLocationNavigation";
declare global { declare global {
interface Window { interface Window {
groupCall: GroupCall; groupCall?: GroupCall;
} }
} }
interface Props { interface Props {
client: MatrixClient; client: MatrixClient;
isPasswordlessUser: boolean; isPasswordlessUser: boolean;
isEmbedded: boolean; isEmbedded: boolean;
hideHeader: boolean;
roomIdOrAlias: string; roomIdOrAlias: string;
groupCall: GroupCall; groupCall: GroupCall;
} }
export function GroupCallView({ export function GroupCallView({
client, client,
isPasswordlessUser, isPasswordlessUser,
isEmbedded, isEmbedded,
hideHeader,
roomIdOrAlias, roomIdOrAlias,
groupCall, groupCall,
}: Props) { }: Props) {
@ -109,6 +113,7 @@ export function GroupCallView({
userMediaFeeds={userMediaFeeds} userMediaFeeds={userMediaFeeds}
onLeave={onLeave} onLeave={onLeave}
isEmbedded={isEmbedded} isEmbedded={isEmbedded}
hideHeader={hideHeader}
/> />
); );
} else { } else {
@ -131,6 +136,7 @@ export function GroupCallView({
screenshareFeeds={screenshareFeeds} screenshareFeeds={screenshareFeeds}
roomIdOrAlias={roomIdOrAlias} roomIdOrAlias={roomIdOrAlias}
unencryptedEventsFromUsers={unencryptedEventsFromUsers} unencryptedEventsFromUsers={unencryptedEventsFromUsers}
hideHeader={hideHeader}
/> />
); );
} }
@ -166,6 +172,7 @@ export function GroupCallView({
toggleMicrophoneMuted={toggleMicrophoneMuted} toggleMicrophoneMuted={toggleMicrophoneMuted}
roomIdOrAlias={roomIdOrAlias} roomIdOrAlias={roomIdOrAlias}
isEmbedded={isEmbedded} isEmbedded={isEmbedded}
hideHeader={hideHeader}
/> />
); );
} }

View file

@ -77,6 +77,7 @@ interface Props {
localScreenshareFeed: CallFeed; localScreenshareFeed: CallFeed;
roomIdOrAlias: string; roomIdOrAlias: string;
unencryptedEventsFromUsers: Set<string>; unencryptedEventsFromUsers: Set<string>;
hideHeader: boolean;
} }
export interface Participant { export interface Participant {
@ -105,6 +106,7 @@ export function InCallView({
localScreenshareFeed, localScreenshareFeed,
roomIdOrAlias, roomIdOrAlias,
unencryptedEventsFromUsers, unencryptedEventsFromUsers,
hideHeader,
}: Props) { }: Props) {
usePreventScroll(); usePreventScroll();
const elementRef = useRef<HTMLDivElement>(); const elementRef = useRef<HTMLDivElement>();
@ -246,7 +248,7 @@ export function InCallView({
audioDestination={audioDestination} audioDestination={audioDestination}
/> />
)} )}
{!fullscreenParticipant && ( {!hideHeader && !fullscreenParticipant && (
<Header> <Header>
<LeftNav> <LeftNav>
<RoomHeaderInfo roomName={roomName} avatarUrl={avatarUrl} /> <RoomHeaderInfo roomName={roomName} avatarUrl={avatarUrl} />

View file

@ -47,6 +47,7 @@ interface Props {
localVideoMuted: boolean; localVideoMuted: boolean;
roomIdOrAlias: string; roomIdOrAlias: string;
isEmbedded: boolean; isEmbedded: boolean;
hideHeader: boolean;
} }
export function LobbyView({ export function LobbyView({
client, client,
@ -63,6 +64,7 @@ export function LobbyView({
toggleMicrophoneMuted, toggleMicrophoneMuted,
roomIdOrAlias, roomIdOrAlias,
isEmbedded, isEmbedded,
hideHeader,
}: Props) { }: Props) {
const { stream } = useCallFeed(localCallFeed); const { stream } = useCallFeed(localCallFeed);
const { const {
@ -90,6 +92,7 @@ export function LobbyView({
return ( return (
<div className={styles.room}> <div className={styles.room}>
{!hideHeader && (
<Header> <Header>
<LeftNav> <LeftNav>
<RoomHeaderInfo roomName={roomName} avatarUrl={avatarUrl} /> <RoomHeaderInfo roomName={roomName} avatarUrl={avatarUrl} />
@ -98,6 +101,7 @@ export function LobbyView({
<UserMenuContainer /> <UserMenuContainer />
</RightNav> </RightNav>
</Header> </Header>
)}
<div className={styles.joinRoom}> <div className={styles.joinRoom}>
<div className={styles.joinRoomContent}> <div className={styles.joinRoomContent}>
{groupCall.isPtt ? ( {groupCall.isPtt ? (

View file

@ -97,6 +97,7 @@ interface Props {
userMediaFeeds: CallFeed[]; userMediaFeeds: CallFeed[];
onLeave: () => void; onLeave: () => void;
isEmbedded: boolean; isEmbedded: boolean;
hideHeader: boolean;
} }
export const PTTCallView: React.FC<Props> = ({ export const PTTCallView: React.FC<Props> = ({
@ -109,6 +110,7 @@ export const PTTCallView: React.FC<Props> = ({
userMediaFeeds, userMediaFeeds,
onLeave, onLeave,
isEmbedded, isEmbedded,
hideHeader,
}) => { }) => {
const { modalState: inviteModalState, modalProps: inviteModalProps } = const { modalState: inviteModalState, modalProps: inviteModalProps } =
useModalTriggerState(); useModalTriggerState();
@ -176,7 +178,7 @@ export const PTTCallView: React.FC<Props> = ({
// https://github.com/vector-im/element-call/issues/328 // https://github.com/vector-im/element-call/issues/328
show={false} show={false}
/> />
{showControls && ( {!hideHeader && showControls && (
<Header className={styles.header}> <Header className={styles.header}>
<LeftNav> <LeftNav>
<RoomSetupHeaderInfo <RoomSetupHeaderInfo

View file

@ -29,8 +29,15 @@ export const RoomPage: FC = () => {
const { loading, isAuthenticated, error, client, isPasswordlessUser } = const { loading, isAuthenticated, error, client, isPasswordlessUser } =
useClient(); useClient();
const { roomAlias, roomId, viaServers, isEmbedded, isPtt, displayName } = const {
useRoomParams(); roomAlias,
roomId,
viaServers,
isEmbedded,
hideHeader,
isPtt,
displayName,
} = useRoomParams();
const roomIdOrAlias = roomId ?? roomAlias; const roomIdOrAlias = roomId ?? roomAlias;
if (!roomIdOrAlias) throw new Error("No room specified"); if (!roomIdOrAlias) throw new Error("No room specified");
@ -53,6 +60,20 @@ export const RoomPage: FC = () => {
registerPasswordlessUser, registerPasswordlessUser,
]); ]);
const groupCallView = useCallback(
(groupCall: GroupCall) => (
<GroupCallView
client={client}
roomIdOrAlias={roomIdOrAlias}
groupCall={groupCall}
isPasswordlessUser={isPasswordlessUser}
isEmbedded={isEmbedded}
hideHeader={hideHeader}
/>
),
[client, roomIdOrAlias, isPasswordlessUser, isEmbedded, hideHeader]
);
if (loading || isRegistering) { if (loading || isRegistering) {
return <LoadingView />; return <LoadingView />;
} }
@ -73,15 +94,7 @@ export const RoomPage: FC = () => {
viaServers={viaServers} viaServers={viaServers}
createPtt={isPtt} createPtt={isPtt}
> >
{(groupCall) => ( {groupCallView}
<GroupCallView
client={client}
roomIdOrAlias={roomIdOrAlias}
groupCall={groupCall}
isPasswordlessUser={isPasswordlessUser}
isEmbedded={isEmbedded}
/>
)}
</GroupCallLoader> </GroupCallLoader>
</MediaHandlerProvider> </MediaHandlerProvider>
); );

View file

@ -24,6 +24,8 @@ export interface RoomParams {
// Whether the app is running in embedded mode, and should keep the user // Whether the app is running in embedded mode, and should keep the user
// confined to the current room // confined to the current room
isEmbedded: boolean; isEmbedded: boolean;
// Whether to hide the room header when in a call
hideHeader: boolean;
// Whether to start a walkie-talkie call instead of a video call // Whether to start a walkie-talkie call instead of a video call
isPtt: boolean; isPtt: boolean;
// Whether to use end-to-end encryption // Whether to use end-to-end encryption
@ -75,6 +77,7 @@ export const getRoomParams = (
roomId: getParam("roomId"), roomId: getParam("roomId"),
viaServers: getAllParams("via"), viaServers: getAllParams("via"),
isEmbedded: hasParam("embed"), isEmbedded: hasParam("embed"),
hideHeader: hasParam("hideHeader"),
isPtt: hasParam("ptt"), isPtt: hasParam("ptt"),
e2eEnabled: getParam("enableE2e") !== "false", // Defaults to true e2eEnabled: getParam("enableE2e") !== "false", // Defaults to true
userId: getParam("userId"), userId: getParam("userId"),