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,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 ? (
|
||||||
|
|
|
||||||
|
|
@ -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