2023-07-15 17:46:19 +03:00
import { useEffect , useState } from 'react' ;
import TextInput from '../components/Common/TextInput' ;
import Form from '../components/Common/Form' ;
import { useAuth } from '../context/AuthContext' ;
import SubmitButton from '../components/Common/SubmitButton' ;
import BackendError from '../components/BackendError' ;
2023-07-20 17:11:03 +03:00
import { IUserSignupData } from '../utils/models' ;
2023-07-15 17:46:19 +03:00
import InfoMessage from '../components/InfoMessage' ;
import TextURL from '../components/Common/TextURL' ;
function RegisterPage() {
const [ username , setUsername ] = useState ( '' ) ;
const [ email , setEmail ] = useState ( '' ) ;
const [ password , setPassword ] = useState ( '' ) ;
const [ password2 , setPassword2 ] = useState ( '' ) ;
const [ firstName , setFirstName ] = useState ( '' ) ;
const [ lastName , setLastName ] = useState ( '' ) ;
const [ success , setSuccess ] = useState ( false ) ;
const { user , signup , loading , error , setError } = useAuth ( )
useEffect ( ( ) = > {
setError ( undefined ) ;
} , [ username , email , password , password2 , setError ] ) ;
const handleSubmit = ( event : React.FormEvent < HTMLFormElement > ) = > {
event . preventDefault ( ) ;
if ( ! loading ) {
const data : IUserSignupData = {
'username' : username ,
'email' : email ,
'password' : password ,
'password2' : password2 ,
'first_name' : firstName ,
'last_name' : lastName ,
} ;
2023-07-25 00:20:37 +03:00
signup ( data , ( ) = > setSuccess ( true ) ) ;
2023-07-15 17:46:19 +03:00
}
} ;
return (
2023-07-20 17:11:03 +03:00
< div className = 'w-full py-2' >
2023-07-15 17:46:19 +03:00
{ success &&
< div className = 'flex flex-col items-center' >
< InfoMessage message = { ` Вы успешно зарегистрировали пользователя ${ username } ` } / >
2023-07-15 17:57:25 +03:00
< TextURL text = 'Войти в аккаунт' href = { ` /login?username= ${ username } ` } / >
2023-07-15 17:46:19 +03:00
< / div > }
{ ! success && user &&
< InfoMessage message = { ` Вы вошли в систему как ${ user . username } . Если хотите зарегистрировать нового пользователя, выйдите из системы (меню в правом верхнем углу экрана) ` } / > }
{ ! success && ! user &&
< Form title = 'Регистрация пользователя' onSubmit = { handleSubmit } >
< TextInput id = 'username' label = 'Имя пользователя' type = 'text'
required
value = { username }
onChange = { event = > setUsername ( event . target . value ) }
/ >
< TextInput id = 'password' label = 'Пароль' type = 'password'
required
value = { password }
onChange = { event = > setPassword ( event . target . value ) }
/ >
< TextInput id = 'password2' label = 'Повторите пароль' type = 'password'
required
value = { password2 }
onChange = { event = > setPassword2 ( event . target . value ) }
/ >
< div className = 'text-sm' >
< p > - м и н и м у м 8 с и м в о л о в < / p >
< p > - б о л ь ш и е , м а л е н ь к и е б у к в ы , ц и ф р ы < / p >
< p > - м и н и м у м 1 с п е ц . с и м в о л < / p >
< / div >
< TextInput id = 'email' label = 'email' type = 'text'
required
value = { email }
onChange = { event = > setEmail ( event . target . value ) }
/ >
< TextInput id = 'first_name' label = 'Имя' type = 'text'
value = { firstName }
onChange = { event = > setFirstName ( event . target . value ) }
/ >
< TextInput id = 'last_name' label = 'Фамилия' type = 'text'
value = { lastName }
onChange = { event = > setLastName ( event . target . value ) }
/ >
< div className = 'flex items-center justify-between my-4' >
< SubmitButton text = 'Регистрировать' loading = { loading } / >
< / div >
{ error && < BackendError error = { error } / > }
< / Form >
}
2023-07-15 17:57:25 +03:00
< / div >
2023-07-15 17:46:19 +03:00
) ;
}
export default RegisterPage ;