Merge remote-tracking branch 'origin/livekit' into dbkr/openid
This commit is contained in:
commit
4548c1af23
7 changed files with 19 additions and 27 deletions
|
@ -113,5 +113,7 @@
|
||||||
"<0>We'd love to hear your feedback so we can improve your experience.</0>": "<0>Wir würden uns freuen, deine Rückmeldung zu hören, um deine Erfahrung verbessern zu können.</0>",
|
"<0>We'd love to hear your feedback so we can improve your experience.</0>": "<0>Wir würden uns freuen, deine Rückmeldung zu hören, um deine Erfahrung verbessern zu können.</0>",
|
||||||
"How did it go?": "Wie ist es gelaufen?",
|
"How did it go?": "Wie ist es gelaufen?",
|
||||||
"{{count}} stars|one": "{{count}} Stern",
|
"{{count}} stars|one": "{{count}} Stern",
|
||||||
"<0>Thanks for your feedback!</0>": "<0>Danke für deine Rückmeldung!</0>"
|
"<0>Thanks for your feedback!</0>": "<0>Danke für deine Rückmeldung!</0>",
|
||||||
|
"{{displayName}} is presenting": "{{displayName}} präsentiert",
|
||||||
|
"Show connection stats": "Verbindungsstatistiken zeigen"
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,9 +24,7 @@ import styles from "./Header.module.css";
|
||||||
import { useModalTriggerState } from "./Modal";
|
import { useModalTriggerState } from "./Modal";
|
||||||
import { Button } from "./button";
|
import { Button } from "./button";
|
||||||
import { ReactComponent as Logo } from "./icons/Logo.svg";
|
import { ReactComponent as Logo } from "./icons/Logo.svg";
|
||||||
import { ReactComponent as VideoIcon } from "./icons/Video.svg";
|
|
||||||
import { Subtitle } from "./typography/Typography";
|
import { Subtitle } from "./typography/Typography";
|
||||||
import { Avatar, Size } from "./Avatar";
|
|
||||||
import { IncompatibleVersionModal } from "./IncompatibleVersionModal";
|
import { IncompatibleVersionModal } from "./IncompatibleVersionModal";
|
||||||
|
|
||||||
interface HeaderProps extends HTMLAttributes<HTMLElement> {
|
interface HeaderProps extends HTMLAttributes<HTMLElement> {
|
||||||
|
@ -116,21 +114,11 @@ export function HeaderLogo({ className }: HeaderLogoProps) {
|
||||||
|
|
||||||
interface RoomHeaderInfo {
|
interface RoomHeaderInfo {
|
||||||
roomName: string;
|
roomName: string;
|
||||||
avatarUrl: string | null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export function RoomHeaderInfo({ roomName, avatarUrl }: RoomHeaderInfo) {
|
export function RoomHeaderInfo({ roomName }: RoomHeaderInfo) {
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<div className={styles.roomAvatar}>
|
|
||||||
<Avatar
|
|
||||||
size={Size.MD}
|
|
||||||
src={avatarUrl ?? undefined}
|
|
||||||
bgKey={roomName}
|
|
||||||
fallback={roomName.slice(0, 1).toUpperCase()}
|
|
||||||
/>
|
|
||||||
<VideoIcon width={16} height={16} />
|
|
||||||
</div>
|
|
||||||
<Subtitle data-testid="roomHeader_roomName" fontWeight="semiBold">
|
<Subtitle data-testid="roomHeader_roomName" fontWeight="semiBold">
|
||||||
{roomName}
|
{roomName}
|
||||||
</Subtitle>
|
</Subtitle>
|
||||||
|
|
|
@ -34,7 +34,6 @@ import { PosthogAnalytics } from "../analytics/PosthogAnalytics";
|
||||||
import { useProfile } from "../profile/useProfile";
|
import { useProfile } from "../profile/useProfile";
|
||||||
import { UserChoices } from "../livekit/useLiveKit";
|
import { UserChoices } from "../livekit/useLiveKit";
|
||||||
import { findDeviceByName } from "../media-utils";
|
import { findDeviceByName } from "../media-utils";
|
||||||
import { useRoomAvatar } from "./useRoomAvatar";
|
|
||||||
import { OpenIDLoader } from "../livekit/OpenIDLoader";
|
import { OpenIDLoader } from "../livekit/OpenIDLoader";
|
||||||
|
|
||||||
declare global {
|
declare global {
|
||||||
|
@ -82,14 +81,12 @@ export function GroupCallView({
|
||||||
}, [groupCall]);
|
}, [groupCall]);
|
||||||
|
|
||||||
const { displayName, avatarUrl } = useProfile(client);
|
const { displayName, avatarUrl } = useProfile(client);
|
||||||
const roomAvatarUrl = useRoomAvatar(groupCall.room);
|
|
||||||
|
|
||||||
const matrixInfo: MatrixInfo = {
|
const matrixInfo: MatrixInfo = {
|
||||||
displayName,
|
displayName,
|
||||||
avatarUrl,
|
avatarUrl,
|
||||||
roomName: groupCall.room.name,
|
roomName: groupCall.room.name,
|
||||||
roomIdOrAlias,
|
roomIdOrAlias,
|
||||||
roomAvatarUrl,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
|
|
@ -390,10 +390,7 @@ export function InCallView({
|
||||||
{!hideHeader && maximisedParticipant === null && (
|
{!hideHeader && maximisedParticipant === null && (
|
||||||
<Header>
|
<Header>
|
||||||
<LeftNav>
|
<LeftNav>
|
||||||
<RoomHeaderInfo
|
<RoomHeaderInfo roomName={matrixInfo.roomName} />
|
||||||
roomName={matrixInfo.roomName}
|
|
||||||
avatarUrl={matrixInfo.roomAvatarUrl}
|
|
||||||
/>
|
|
||||||
<VersionMismatchWarning
|
<VersionMismatchWarning
|
||||||
users={unencryptedEventsFromUsers}
|
users={unencryptedEventsFromUsers}
|
||||||
room={groupCall.room}
|
room={groupCall.room}
|
||||||
|
|
|
@ -55,10 +55,7 @@ export function LobbyView(props: Props) {
|
||||||
{!props.hideHeader && (
|
{!props.hideHeader && (
|
||||||
<Header>
|
<Header>
|
||||||
<LeftNav>
|
<LeftNav>
|
||||||
<RoomHeaderInfo
|
<RoomHeaderInfo roomName={props.matrixInfo.roomName} />
|
||||||
roomName={props.matrixInfo.roomName}
|
|
||||||
avatarUrl={props.matrixInfo.roomAvatarUrl}
|
|
||||||
/>
|
|
||||||
</LeftNav>
|
</LeftNav>
|
||||||
<RightNav>
|
<RightNav>
|
||||||
<UserMenuContainer />
|
<UserMenuContainer />
|
||||||
|
|
|
@ -35,7 +35,6 @@ export type MatrixInfo = {
|
||||||
avatarUrl: string;
|
avatarUrl: string;
|
||||||
roomName: string;
|
roomName: string;
|
||||||
roomIdOrAlias: string;
|
roomIdOrAlias: string;
|
||||||
roomAvatarUrl: string | null;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
|
|
|
@ -257,6 +257,11 @@ export function NewVideoGrid<T>({
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const [lastTappedTileId, setLastTappedTileId] = useState<string | undefined>(
|
||||||
|
undefined
|
||||||
|
);
|
||||||
|
const [lastTapTime, setLastTapTime] = useState<number>(0);
|
||||||
|
|
||||||
// Callback for useDrag. We could call useDrag here, but the default
|
// Callback for useDrag. We could call useDrag here, but the default
|
||||||
// pattern of spreading {...bind()} across the children to bind the gesture
|
// pattern of spreading {...bind()} across the children to bind the gesture
|
||||||
// ends up breaking memoization and ruining this component's performance.
|
// ends up breaking memoization and ruining this component's performance.
|
||||||
|
@ -272,7 +277,14 @@ export function NewVideoGrid<T>({
|
||||||
}: Parameters<Handler<"drag", EventTypes["drag"]>>[0]
|
}: Parameters<Handler<"drag", EventTypes["drag"]>>[0]
|
||||||
) => {
|
) => {
|
||||||
if (tap) {
|
if (tap) {
|
||||||
toggleFocus?.(items.find((i) => i.id === tileId)!);
|
const now = Date.now();
|
||||||
|
|
||||||
|
if (tileId === lastTappedTileId && now - lastTapTime < 500) {
|
||||||
|
toggleFocus?.(items.find((i) => i.id === tileId)!);
|
||||||
|
}
|
||||||
|
|
||||||
|
setLastTappedTileId(tileId);
|
||||||
|
setLastTapTime(now);
|
||||||
} else {
|
} else {
|
||||||
const tileController = springRef.current.find(
|
const tileController = springRef.current.find(
|
||||||
(c) => (c.item as Tile<T>).item.id === tileId
|
(c) => (c.item as Tile<T>).item.id === tileId
|
||||||
|
|
Loading…
Add table
Reference in a new issue