import React, { JSX, useEffect, useState } from 'react'
import { View, Image, Text, StyleSheet, Dimensions } from 'react-native'
import { useForm, Controller } from 'react-hook-form'
import { useNavigate } from 'react-router-native'
import { CustomInput, Button, TextHelper, ErrorMessage } from '../components/FormElements'
import { useAppDispatch, useAppSelector } from '../redux/hooks'
import { setRegistrationInformation, setToken, startAuthentication, completeAuthentication, setRecaptcha, MedTechApiState } from '../services/api'
import { WebViewComponent } from '../components/WebViewComponent'
import { createSelector } from '@reduxjs/toolkit'
import { routes } from '../navigation/Routes'
import { CustomActivityIndicator } from '../components/CustomActivityIndicator'
const selectMedTechApiData = createSelector([(state: { medTechApi: MedTechApiState }) => state.medTechApi], (medTechApi: MedTechApiState) => ({
online: medTechApi.online,
loginProcessStarted: medTechApi.loginProcessStarted,
}))
const WIDTH_MODAL = Dimensions.get('window').width
const HEIGHT_MODAL = Dimensions.get('window').height
export const Register = (): JSX.Element => {
const {
control,
handleSubmit,
formState: { errors },
} = useForm({
defaultValues: {
userFirstName: '',
userLastName: '',
userEmail: '',
userCode: '',
},
})
const navigate = useNavigate()
const dispatch = useAppDispatch()
const [isWaitingForCode, setWaitingForCode] = useState(false)
const { online, loginProcessStarted } = useAppSelector(selectMedTechApiData)
useEffect(() => {
if (online) {
navigate(routes.home)
}
}, [online, navigate])
const onAskCode = (data: { userEmail: string; userFirstName: string; userLastName: string }) => {
setWaitingForCode(true)
dispatch(setRegistrationInformation({ email: data.userEmail, firstName: data.userFirstName, lastName: data.userLastName }))
dispatch(startAuthentication())
}
const onRegister = (data: { userCode: string }) => {
setWaitingForCode(false)
dispatch(setToken({ token: data.userCode }))
dispatch(completeAuthentication())
}
return (
<>
{loginProcessStarted && }
Registration
(
)}
name="userFirstName"
/>
{errors.userFirstName?.message && }
(
)}
name="userLastName"
/>
{errors.userLastName?.message && }
(
)}
name="userEmail"
/>
{errors.userEmail?.message && }
{isWaitingForCode ? (
(
)}
name="userCode"
/>
{errors.userCode?.message && }
) : null}
dispatch(setRecaptcha({ recaptcha: value }))} />
{isWaitingForCode ? (
) : (
)}
>
)
}
const styles = StyleSheet.create({
registerScreen: {
flex: 1,
width: WIDTH_MODAL,
height: HEIGHT_MODAL,
paddingTop: 24,
backgroundColor: '#FFFDFE',
},
heading: {
fontSize: 24,
color: '#303443',
textAlign: 'center',
marginBottom: 32,
marginTop: 24,
fontFamily: 'Nunito-Regular',
},
contentHolder: {
alignItems: 'center',
padding: 24,
},
logo: {
width: 150,
height: 60,
marginBottom: 32,
},
inputsContainer: {
width: '100%',
gap: 16,
marginBottom: 12,
},
input: {
gap: 4,
},
textHelperContainer: {
marginTop: 24,
},
webviewContainer: {
width: '100%',
marginBottom: 24,
},
})