Add a URL parameter for hiding the room header
This commit is contained in:
		
					parent
					
						
							
								ca5ce7d468
							
						
					
				
			
			
				commit
				
					
						3186b5f24b
					
				
			
		
					 6 changed files with 53 additions and 22 deletions
				
			
		| 
						 | 
					@ -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}
 | 
				
			||||||
        />
 | 
					        />
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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} />
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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,14 +92,16 @@ export function LobbyView({
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  return (
 | 
					  return (
 | 
				
			||||||
    <div className={styles.room}>
 | 
					    <div className={styles.room}>
 | 
				
			||||||
      <Header>
 | 
					      {!hideHeader && (
 | 
				
			||||||
        <LeftNav>
 | 
					        <Header>
 | 
				
			||||||
          <RoomHeaderInfo roomName={roomName} avatarUrl={avatarUrl} />
 | 
					          <LeftNav>
 | 
				
			||||||
        </LeftNav>
 | 
					            <RoomHeaderInfo roomName={roomName} avatarUrl={avatarUrl} />
 | 
				
			||||||
        <RightNav>
 | 
					          </LeftNav>
 | 
				
			||||||
          <UserMenuContainer />
 | 
					          <RightNav>
 | 
				
			||||||
        </RightNav>
 | 
					            <UserMenuContainer />
 | 
				
			||||||
      </Header>
 | 
					          </RightNav>
 | 
				
			||||||
 | 
					        </Header>
 | 
				
			||||||
 | 
					      )}
 | 
				
			||||||
      <div className={styles.joinRoom}>
 | 
					      <div className={styles.joinRoom}>
 | 
				
			||||||
        <div className={styles.joinRoomContent}>
 | 
					        <div className={styles.joinRoomContent}>
 | 
				
			||||||
          {groupCall.isPtt ? (
 | 
					          {groupCall.isPtt ? (
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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>
 | 
				
			||||||
  );
 | 
					  );
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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"),
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue