diff --git a/lib/components/secondary-device-qr-auth-context-provider.react.js b/lib/components/secondary-device-qr-auth-context-provider.react.js --- a/lib/components/secondary-device-qr-auth-context-provider.react.js +++ b/lib/components/secondary-device-qr-auth-context-provider.react.js @@ -76,7 +76,11 @@ const [primaryDeviceID, setPrimaryDeviceID] = React.useState(); const [qrData, setQRData] = React.useState(); - const [qrAuthFinished, setQRAuthFinished] = React.useState(false); + + const [qrAuthState, setQRAuthState] = React.useState< + 'not_started' | 'started' | 'finished', + >('not_started'); + const qrAuthFinished = qrAuthState === 'finished'; const loggedIn = useSelector(isLoggedIn); const prevLoggedIn = React.useRef(loggedIn); @@ -118,7 +122,7 @@ setUnauthorizedDeviceID(ed25519); setQRData({ deviceID: ed25519, aesKey: aesKeyAsHexString }); - setQRAuthFinished(false); + setQRAuthState('not_started'); }, [generateAESKey, setUnauthorizedDeviceID]); const closeSecondaryQRAuth = React.useCallback(() => { @@ -169,7 +173,7 @@ errorMessage, ); } - setQRAuthFinished(true); + setQRAuthState('finished'); setQRData(null); })(); }, [ @@ -260,6 +264,7 @@ backupData, } = qrCodeAuthMessage; setPrimaryDeviceID(receivedPrimaryDeviceID); + setQRAuthState('started'); try { await confirmMessageToTunnelbroker(message.messageID); @@ -310,12 +315,14 @@ openSecondaryQRAuth, closeSecondaryQRAuth, canGenerateQRs: !socketState.isAuthorized, + qrAuthInProgress: qrAuthState === 'started', }), [ qrData, openSecondaryQRAuth, closeSecondaryQRAuth, socketState.isAuthorized, + qrAuthState, ], );