@@ -57,7 +57,7 @@ interface Props {
5757 client : MatrixClient ;
5858 matrixInfo : MatrixInfo ;
5959 muteStates : MuteStates ;
60- onEnter : ( ) => void ;
60+ onEnter : ( ) => Promise < void > ;
6161 enterLabel ?: JSX . Element | string ;
6262 confineToRoom : boolean ;
6363 hideHeader : boolean ;
@@ -193,6 +193,14 @@ export const LobbyView: FC<Props> = ({
193193
194194 useTrackProcessorSync ( videoTrack ) ;
195195
196+ const [ waitingToEnter , setWaitingToEnter ] = useState ( false ) ;
197+ const onEnterCall = useCallback ( ( ) => {
198+ setWaitingToEnter ( true ) ;
199+ void onEnter ( ) . finally ( ( ) => setWaitingToEnter ( false ) ) ;
200+ } , [ onEnter ] ) ;
201+
202+ const waiting = waitingForInvite || waitingToEnter ;
203+
196204 // TODO: Unify this component with InCallView, so we can get slick joining
197205 // animations and don't have to feel bad about reusing its CSS
198206 return (
@@ -222,11 +230,12 @@ export const LobbyView: FC<Props> = ({
222230 >
223231 < Button
224232 className = { classNames ( styles . join , {
225- [ styles . wait ] : waitingForInvite ,
233+ [ styles . wait ] : waiting ,
226234 } ) }
227- size = { waitingForInvite ? "sm" : "lg" }
235+ size = { waiting ? "sm" : "lg" }
236+ disabled = { waiting }
228237 onClick = { ( ) => {
229- if ( ! waitingForInvite ) onEnter ( ) ;
238+ if ( ! waiting ) onEnterCall ( ) ;
230239 } }
231240 data-testid = "lobby_joinCall"
232241 >
0 commit comments