diff options
author | dan <dan.abramov@gmail.com> | 2024-08-22 22:43:23 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-08-22 22:43:23 +0100 |
commit | 27bb3832683275be0c778a38c526bfd55cebee59 (patch) | |
tree | 02b0e1a9c802b0f75ac33d3e00daa95203e322cc /src/screens/Signup/state.ts | |
parent | df5bf28e614150bda5d58b22b7db308f71f70e07 (diff) | |
download | voidsky-27bb3832683275be0c778a38c526bfd55cebee59.tar.zst |
Submit fix (#4978)
* Fix submit logic * Fix type * Align submit task creation 1:1 with callsites * blegh. `useThrottledValue` * make `useThrottledValue`'s time required --------- Co-authored-by: Hailey <me@haileyok.com>
Diffstat (limited to 'src/screens/Signup/state.ts')
-rw-r--r-- | src/screens/Signup/state.ts | 43 |
1 files changed, 21 insertions, 22 deletions
diff --git a/src/screens/Signup/state.ts b/src/screens/Signup/state.ts index 826cbf1d3..0ee266564 100644 --- a/src/screens/Signup/state.ts +++ b/src/screens/Signup/state.ts @@ -26,6 +26,11 @@ export enum SignupStep { CAPTCHA, } +type SubmitTask = { + code: string | undefined + mutableProcessed: boolean // OK to mutate assuming it's never read in render. +} + export type SignupState = { hasPrev: boolean activeStep: SignupStep @@ -41,6 +46,8 @@ export type SignupState = { error: string isLoading: boolean + + pendingSubmit: null | SubmitTask } export type SignupAction = @@ -58,6 +65,7 @@ export type SignupAction = | {type: 'setVerificationCode'; value: string} | {type: 'setError'; value: string} | {type: 'setIsLoading'; value: boolean} + | {type: 'submit'; task: SubmitTask} export const initialState: SignupState = { hasPrev: false, @@ -74,6 +82,8 @@ export const initialState: SignupState = { error: '', isLoading: false, + + pendingSubmit: null, } export function is13(date: Date) { @@ -149,6 +159,10 @@ export function reducer(s: SignupState, a: SignupAction): SignupState { next.error = a.value break } + case 'submit': { + next.pendingSubmit = a.task + break + } } next.hasPrev = next.activeStep !== SignupStep.INFO @@ -169,19 +183,17 @@ interface IContext { export const SignupContext = React.createContext<IContext>({} as IContext) export const useSignupContext = () => React.useContext(SignupContext) -export function useSubmitSignup({ - state, - dispatch, -}: { - state: SignupState - dispatch: (action: SignupAction) => void -}) { +export function useSubmitSignup() { const {_} = useLingui() const {createAccount} = useSessionApi() const onboardingDispatch = useOnboardingDispatch() return useCallback( - async (verificationCode?: string) => { + async ( + state: SignupState, + dispatch: (action: SignupAction) => void, + verificationCode?: string, + ) => { if (!state.email) { dispatch({type: 'setStep', value: SignupStep.INFO}) return dispatch({ @@ -270,19 +282,6 @@ export function useSubmitSignup({ dispatch({type: 'setIsLoading', value: false}) } }, - [ - state.email, - state.password, - state.handle, - state.serviceDescription?.phoneVerificationRequired, - state.serviceUrl, - state.userDomain, - state.inviteCode, - state.dateOfBirth, - dispatch, - _, - onboardingDispatch, - createAccount, - ], + [_, onboardingDispatch, createAccount], ) } |