diff options
author | Hailey <me@haileyok.com> | 2024-02-17 16:03:47 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-02-17 16:03:47 -0800 |
commit | fbdf4517c29d87a2bd0d837fb732f93d255d6f64 (patch) | |
tree | 2d751e28379ce7b858a926d382d0b349930f261a /src/view/com/auth/create/CreateAccount.tsx | |
parent | dc143d6a6ed2a505e59f025f39b76fcb428ec57d (diff) | |
download | voidsky-fbdf4517c29d87a2bd0d837fb732f93d255d6f64.tar.zst |
Implement captcha (#2882)
* web height adjustment border radius incase of dark/dim mismatch rm country codes adjust height general form refactor more form refactor refactor form submission activity indicator after finished remove remaining phone stuff adjust captcha height adjust state to reflect switch move handle to the second step pass color scheme param ts ts update state when captcha is complete web views and callbacks remove old state allow specified hosts replace phone verification with a webview * remove log * height adjustment * few changes * use the correct url * remove some debug * validate handle before continuing * explicitly check if there is a did, dont rely on error * rm throw * update allowed hosts * update redirect host for webview * fix handle * fix handle check * adjust height for full challenge
Diffstat (limited to 'src/view/com/auth/create/CreateAccount.tsx')
-rw-r--r-- | src/view/com/auth/create/CreateAccount.tsx | 71 |
1 files changed, 39 insertions, 32 deletions
diff --git a/src/view/com/auth/create/CreateAccount.tsx b/src/view/com/auth/create/CreateAccount.tsx index 5d452736a..8aefffa6d 100644 --- a/src/view/com/auth/create/CreateAccount.tsx +++ b/src/view/com/auth/create/CreateAccount.tsx @@ -13,33 +13,25 @@ import {s} from 'lib/styles' import {usePalette} from 'lib/hooks/usePalette' import {msg, Trans} from '@lingui/macro' import {useLingui} from '@lingui/react' -import {useOnboardingDispatch} from '#/state/shell' -import {useSessionApi} from '#/state/session' -import {useCreateAccount, submit} from './state' +import {useCreateAccount, useSubmitCreateAccount} from './state' import {useServiceQuery} from '#/state/queries/service' -import { - usePreferencesSetBirthDateMutation, - useSetSaveFeedsMutation, - DEFAULT_PROD_FEEDS, -} from '#/state/queries/preferences' -import {FEEDBACK_FORM_URL, HITSLOP_10, IS_PROD} from '#/lib/constants' +import {FEEDBACK_FORM_URL, HITSLOP_10} from '#/lib/constants' import {Step1} from './Step1' import {Step2} from './Step2' import {Step3} from './Step3' import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries' import {TextLink} from '../../util/Link' +import {getAgent} from 'state/session' +import {createFullHandle} from 'lib/strings/handles' export function CreateAccount({onPressBack}: {onPressBack: () => void}) { const {screen} = useAnalytics() const pal = usePalette('default') const {_} = useLingui() const [uiState, uiDispatch] = useCreateAccount() - const onboardingDispatch = useOnboardingDispatch() - const {createAccount} = useSessionApi() - const {mutate: setBirthDate} = usePreferencesSetBirthDateMutation() - const {mutate: setSavedFeeds} = useSetSaveFeedsMutation() const {isTabletOrDesktop} = useWebMediaQueries() + const submit = useSubmitCreateAccount(uiState, uiDispatch) React.useEffect(() => { screen('CreateAccount') @@ -84,33 +76,48 @@ export function CreateAccount({onPressBack}: {onPressBack: () => void}) { if (!uiState.canNext) { return } - if (uiState.step < 3) { - uiDispatch({type: 'next'}) - } else { + + if (uiState.step === 2) { + uiDispatch({type: 'set-processing', value: true}) try { - await submit({ - onboardingDispatch, - createAccount, - uiState, - uiDispatch, - _, + const res = await getAgent().resolveHandle({ + handle: createFullHandle(uiState.handle, uiState.userDomain), }) - setBirthDate({birthDate: uiState.birthDate}) - if (IS_PROD(uiState.serviceUrl)) { - setSavedFeeds(DEFAULT_PROD_FEEDS) + + if (res.data.did) { + uiDispatch({ + type: 'set-error', + value: _(msg`That handle is already taken.`), + }) + return } - } catch { - // dont need to handle here + } catch (e) { + // Don't need to handle + } finally { + uiDispatch({type: 'set-processing', value: false}) + } + + if (!uiState.isCaptchaRequired) { + try { + await submit() + } catch { + // dont need to handle here + } + // We don't need to go to the next page if there wasn't a captcha required + return } } + + uiDispatch({type: 'next'}) }, [ - uiState, + uiState.canNext, + uiState.step, + uiState.isCaptchaRequired, + uiState.handle, + uiState.userDomain, uiDispatch, - onboardingDispatch, - createAccount, - setBirthDate, - setSavedFeeds, _, + submit, ]) // rendering |