0f96669f8c
* WIP * Update email * Fire off confirmation email after change * Verify step, integrate stateful control * Remove tentative EnterCode step * Handle token step * Handle instructions and integrate into 2FA setting * Fix load state when reusing same email * Add new state * Add 2FA screens * Clean up state in Update step * Clean up verify state, handle normal callback * Normalize convetions * Add verification reminder screen * Improve session refresh * Handle verification requirements for composer and convo * Fix lint * Do better * Couple missing translations * Format * Use listeners for easier to grok logic * Clean errors * Move to global context * [APP-1158] Gate features by email verification state (#8305) * Use new hook in all locations * Format * Seems to work, not great duplication * Wrap all open composer calls * Remove unneeded spans * Missed one * Fix handler on Conversation * Gate new chat in header * Add comment * Remove whoopsie * Format * add hackfix for dialog not showing * add prompt to accept chat btn * navigation not necessary * send back one screen, rather than home * Update comment --------- Co-authored-by: Samuel Newman <mozzius@protonmail.com> * Clear dialog state Co-authored-by: Samuel Newman <mozzius@protonmail.com> * Update icon * Check color * Add 2FA warning * Update instructions * Fix X button * Use an effect silly goose * Update copy Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> * Update copy Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> * Update copy Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> * Update copy Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> * Update src/components/dialaUpdate copyogs/EmailDialog/screens/Update.tsx Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> * Update copy Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> * Update copy Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> * Update copy Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> * Update copy Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> * Update copy Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> * Update copy Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> * Update copy * Update copy * Update copy * Update copy * Update copy Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> * Update copy * Add link back to update email from verify email dialog * Handle token field validation --------- Co-authored-by: Samuel Newman <mozzius@protonmail.com> Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com>
54 lines
1.4 KiB
TypeScript
54 lines
1.4 KiB
TypeScript
import {useCallback} from 'react'
|
|
import {Keyboard} from 'react-native'
|
|
|
|
import {useEmail} from '#/lib/hooks/useEmail'
|
|
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(
|
|
<T extends (...args: any[]) => any>(
|
|
cb: T,
|
|
config: Omit<
|
|
Extract<Screen, {id: EmailDialogScreenID.Verify}>,
|
|
'id'
|
|
> = {},
|
|
): ((...args: Parameters<T>) => ReturnType<T>) => {
|
|
return (...args: Parameters<T>): ReturnType<T> => {
|
|
if (!currentAccount) {
|
|
return requireAuth(() => cb(...args)) as ReturnType<T>
|
|
}
|
|
if (needsEmailVerification) {
|
|
Keyboard.dismiss()
|
|
closeAll()
|
|
emailDialogControl.open({
|
|
id: EmailDialogScreenID.Verify,
|
|
...config,
|
|
})
|
|
return undefined as ReturnType<T>
|
|
} else {
|
|
return cb(...args)
|
|
}
|
|
}
|
|
},
|
|
[
|
|
needsEmailVerification,
|
|
currentAccount,
|
|
emailDialogControl,
|
|
closeAll,
|
|
requireAuth,
|
|
],
|
|
)
|
|
}
|