import {useCallback} from 'react' import {Keyboard} from 'react-native' import {useEmail} from '#/state/email-verification' import {useRequireAuth, useSession} from '#/state/session' import {useCloseAllActiveElements} from '#/state/util' import { EmailDialogScreenID, type Screen, useEmailDialogControl, } from '#/components/dialogs/EmailDialog' export function useRequireEmailVerification() { const {currentAccount} = useSession() const {needsEmailVerification} = useEmail() const requireAuth = useRequireAuth() const emailDialogControl = useEmailDialogControl() const closeAll = useCloseAllActiveElements() return useCallback( any>( cb: T, config: Omit< Extract, 'id' > = {}, ): ((...args: Parameters) => ReturnType) => { return (...args: Parameters): ReturnType => { if (!currentAccount) { return requireAuth(() => cb(...args)) as ReturnType } if (needsEmailVerification) { Keyboard.dismiss() closeAll() emailDialogControl.open({ id: EmailDialogScreenID.Verify, ...config, }) return undefined as ReturnType } else { return cb(...args) } } }, [ needsEmailVerification, currentAccount, emailDialogControl, closeAll, requireAuth, ], ) }