Disable call button while the call is connecting.

This commit is contained in:
Half-Shot
2025-10-06 16:02:44 +01:00
parent d24da1859e
commit 8691473329
2 changed files with 17 additions and 5 deletions

View File

@@ -436,7 +436,7 @@ export const GroupCallView: FC<Props> = ({
client={client} client={client}
matrixInfo={matrixInfo} matrixInfo={matrixInfo}
muteStates={muteStates} muteStates={muteStates}
onEnter={() => void enterRTCSessionOrError(rtcSession)} onEnter={() => enterRTCSessionOrError(rtcSession)}
confineToRoom={confineToRoom} confineToRoom={confineToRoom}
hideHeader={header === HeaderStyle.None} hideHeader={header === HeaderStyle.None}
participantCount={participantCount} participantCount={participantCount}

View File

@@ -57,7 +57,7 @@ interface Props {
client: MatrixClient; client: MatrixClient;
matrixInfo: MatrixInfo; matrixInfo: MatrixInfo;
muteStates: MuteStates; muteStates: MuteStates;
onEnter: () => void; onEnter: () => Promise<void>;
enterLabel?: JSX.Element | string; enterLabel?: JSX.Element | string;
confineToRoom: boolean; confineToRoom: boolean;
hideHeader: boolean; hideHeader: boolean;
@@ -193,6 +193,17 @@ export const LobbyView: FC<Props> = ({
useTrackProcessorSync(videoTrack); useTrackProcessorSync(videoTrack);
const onEnterCall = useCallback(async () => {
try {
setWaiting(true);
await onEnter();
} finally {
setWaiting(false);
}
}, [onEnter]);
const [waiting, setWaiting] = useState(waitingForInvite);
// TODO: Unify this component with InCallView, so we can get slick joining // TODO: Unify this component with InCallView, so we can get slick joining
// animations and don't have to feel bad about reusing its CSS // animations and don't have to feel bad about reusing its CSS
return ( return (
@@ -222,11 +233,12 @@ export const LobbyView: FC<Props> = ({
> >
<Button <Button
className={classNames(styles.join, { className={classNames(styles.join, {
[styles.wait]: waitingForInvite, [styles.wait]: waiting,
})} })}
size={waitingForInvite ? "sm" : "lg"} size={waiting ? "sm" : "lg"}
disabled={waiting}
onClick={() => { onClick={() => {
if (!waitingForInvite) onEnter(); if (!waiting) onEnterCall();
}} }}
data-testid="lobby_joinCall" data-testid="lobby_joinCall"
> >