import { Dispatch, SetStateAction } from 'react' import { useForm } from 'react-hook-form' import { useTranslation } from 'react-i18next' import { useAuthControllerRegister } from '@/api/query/auth/auth' import { AuthRegisterLoginDto } from '@/api/types' import { handleFormError, hapticImpact, showSuccessToast } from '@/utils' type UseSignUpFormProps = { setIsSignUpButtonDisabled?: Dispatch> } const defaultValues: AuthRegisterLoginDto = { email: '', password: '', firstName: '', lastName: '', // FIXME: hardcoded locale locale: 'en-US', termsAccepted: false, privacyPolicyAccepted: false, } export const useSignUpForm = ({ setIsSignUpButtonDisabled }: UseSignUpFormProps) => { const { mutate: signUpMutation, isPending } = useAuthControllerRegister() const { t } = useTranslation() const { control, formState: { errors }, handleSubmit, setError: setFormError, setFocus, } = useForm({ mode: 'onChange', defaultValues, }) const onSubmit = (data: AuthRegisterLoginDto) => { setIsSignUpButtonDisabled?.(true) signUpMutation( { data, }, { onSuccess: () => { showSuccessToast({ description: t('toast.success.new_account_created', { userEmail: data.email }), }) }, onError: (e) => { handleFormError( e as unknown as keyof AuthRegisterLoginDto, ({ field, description }) => { setFormError(field, { message: description }) } ) hapticImpact() }, } ) setIsSignUpButtonDisabled?.(false) } return { control, errors, isSubmitting: isPending, register: handleSubmit(onSubmit), setFocus, } }