import React, { forwardRef, useCallback } from 'react'; import { Dialog, Header, config, Box, Text, Button, Spinner, color } from 'folds'; import { AsyncStatus, useAsyncCallback } from '../hooks/useAsyncCallback'; import { logoutClient } from '../../client/initMatrix'; import { useMatrixClient } from '../hooks/useMatrixClient'; import { useCrossSigningActive } from '../hooks/useCrossSigning'; import { InfoCard } from './info-card'; import { useDeviceVerificationStatus, VerificationStatus, } from '../hooks/useDeviceVerificationStatus'; type LogoutDialogProps = { handleClose: () => void; }; export const LogoutDialog = forwardRef( ({ handleClose }, ref) => { const mx = useMatrixClient(); const hasEncryptedRoom = !!mx.getRooms().find((room) => room.hasEncryptionStateEvent()); const crossSigningActive = useCrossSigningActive(); const verificationStatus = useDeviceVerificationStatus( mx.getCrypto(), mx.getSafeUserId(), mx.getDeviceId() ?? undefined ); const [logoutState, logout] = useAsyncCallback( useCallback(async () => { await logoutClient(mx); }, [mx]) ); const ongoingLogout = logoutState.status === AsyncStatus.Loading; return (
Logout
{hasEncryptedRoom && (crossSigningActive ? ( verificationStatus === VerificationStatus.Unverified && ( ) ) : ( ))} You’re about to log out. Are you sure? {logoutState.status === AsyncStatus.Error && ( Failed to logout! {logoutState.error.message} )}
); } );