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 @@ -50,6 +50,7 @@ +qrData: QRData, +openSecondaryQRAuth: () => Promise, +closeSecondaryQRAuth: () => void, + +canGenerateQRs: boolean, }; const SecondaryDeviceQRAuthContext: React.Context = @@ -57,6 +58,7 @@ qrData: null, openSecondaryQRAuth: async () => {}, closeSecondaryQRAuth: () => {}, + canGenerateQRs: true, }); function SecondaryDeviceQRAuthContextProvider(props: Props): React.Node { @@ -240,8 +242,14 @@ qrData, openSecondaryQRAuth, closeSecondaryQRAuth, + canGenerateQRs: !socketState.isAuthorized, }), - [qrData, openSecondaryQRAuth, closeSecondaryQRAuth], + [ + qrData, + openSecondaryQRAuth, + closeSecondaryQRAuth, + socketState.isAuthorized, + ], ); return ( @@ -259,24 +267,27 @@ } function useSecondaryDeviceQRAuthURL(): ?string { - const { qrData, openSecondaryQRAuth, closeSecondaryQRAuth } = + const { qrData, openSecondaryQRAuth, closeSecondaryQRAuth, canGenerateQRs } = useSecondaryDeviceQRAuthContext(); React.useEffect(() => { - void openSecondaryQRAuth(); - return closeSecondaryQRAuth; - }, [closeSecondaryQRAuth, openSecondaryQRAuth]); + if (canGenerateQRs) { + void openSecondaryQRAuth(); + return closeSecondaryQRAuth; + } + return undefined; + }, [closeSecondaryQRAuth, canGenerateQRs, openSecondaryQRAuth]); const { platform } = getConfig().platformDetails; const qrCodeURL = React.useMemo(() => { - if (!qrData) { + if (!qrData || !canGenerateQRs) { return undefined; } const identityDeviceType = platformToIdentityDeviceType[platform]; return qrCodeLinkURL(qrData.aesKey, qrData.deviceID, identityDeviceType); - }, [platform, qrData]); + }, [canGenerateQRs, platform, qrData]); React.useEffect(() => { if (qrCodeURL) { diff --git a/native/account/qr-code-screen.react.js b/native/account/qr-code-screen.react.js --- a/native/account/qr-code-screen.react.js +++ b/native/account/qr-code-screen.react.js @@ -26,25 +26,28 @@ }; function QRCodeScreen(props: QRCodeScreenProps): React.Node { - const { qrData, openSecondaryQRAuth, closeSecondaryQRAuth } = + const { qrData, openSecondaryQRAuth, closeSecondaryQRAuth, canGenerateQRs } = useSecondaryDeviceQRAuthContext(); useFocusEffect( React.useCallback(() => { - void openSecondaryQRAuth(); - return closeSecondaryQRAuth; - }, [closeSecondaryQRAuth, openSecondaryQRAuth]), + if (canGenerateQRs) { + void openSecondaryQRAuth(); + return closeSecondaryQRAuth; + } + return undefined; + }, [canGenerateQRs, closeSecondaryQRAuth, openSecondaryQRAuth]), ); const { platform } = getConfig().platformDetails; const qrCodeURL = React.useMemo(() => { - if (!qrData) { + if (!qrData || !canGenerateQRs) { return undefined; } const deviceType = platformToIdentityDeviceType[platform]; return qrCodeLinkURL(qrData.aesKey, qrData.deviceID, deviceType); - }, [platform, qrData]); + }, [canGenerateQRs, platform, qrData]); const styles = useStyles(unboundStyles);