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 @@ -32,7 +32,7 @@ import { getMessageForException } from '../utils/errors.js'; import { useDispatch, useSelector } from '../utils/redux-utils.js'; import { fullBackupSupport } from '../utils/services-utils.js'; -import { waitUntilDatabaseReady } from '../utils/wait-until-db-deleted.js'; +import { waitUntilDatabaseDeleted } from '../utils/wait-until-db-deleted.js'; type Props = { +children: React.Node, @@ -77,7 +77,27 @@ const [primaryDeviceID, setPrimaryDeviceID] = React.useState(); const [qrData, setQRData] = React.useState(); const [qrAuthFinished, setQRAuthFinished] = React.useState(false); + const loggedIn = useSelector(isLoggedIn); + const prevLoggedIn = React.useRef(loggedIn); + + const logoutStateResetPromise = React.useRef>(null); + + if (prevLoggedIn.current !== loggedIn) { + console.log('[context] Logged in state changed: loggedIn =', loggedIn); + if (!loggedIn) { + logoutStateResetPromise.current = (async () => { + console.log('[context promise] Inside promise'); + await logoutStateResetPromise.current; + console.log('[context promise] Waiting for DB'); + await waitUntilDatabaseDeleted(); + console.log('[context promise] DB deleted'); + logoutStateResetPromise.current = null; + })(); + } + + prevLoggedIn.current = loggedIn; + } const { setUnauthorizedDeviceID, @@ -92,7 +112,7 @@ const identityClient = identityContext?.identityClient; const openSecondaryQRAuth = React.useCallback(async () => { - await waitUntilDatabaseReady(); + await logoutStateResetPromise.current; const [ed25519, rawAESKey] = await Promise.all([ getContentSigningKey(),