busybar-ui / src / app / register.tsx
register.tsx
Raw
import { useRouter } from 'expo-router'
import axios from 'axios'
import { Env } from '@env'
import { useEffect } from 'react'

import { SignupForm, FormType } from '@/components/auth/register-form'
import { useAuth } from '@/core/auth'

export default function RegisterScreen() {
  const router = useRouter()
  const { token, refreshUserSession, userSession, status } = useAuth()

  useEffect(() => {
    if (status === 'authenticated') {
      if (userSession?.isRegistered) {
        router.replace('/')
      }
    } else if (status === 'unauthenticated') {
      router.replace('/login')
    }
  }, [status, userSession, router])

  const handleSubmit = async (data: FormType) => {
    try {
      await axios.post(
        `${Env.API_URL}/v1/user/register`,
        {
          email: data.email,
          first_name: data.firstName,
          last_name: data.lastName,
          degree_program: data.degreeProgram,
          school: data.school,
          gender: data.gender,
        },
        {
          headers: {
            Authorization: `${token?.accessToken}`,
          },
        }
      )

      await refreshUserSession()
      router.push('/')
    } catch (error) {
      console.log(error)
    }
  }

  if (status === 'loading') {
    return null
  }

  return <SignupForm onSubmit={handleSubmit} />
}