2023-07-15 17:46:19 +03:00
import { useEffect , useState } from 'react' ;
2023-07-26 23:11:00 +03:00
import { useNavigate } from 'react-router-dom' ;
import { toast } from 'react-toastify' ;
2023-07-15 17:46:19 +03:00
2023-07-25 20:27:29 +03:00
import BackendError from '../components/BackendError' ;
2023-07-15 17:46:19 +03:00
import Form from '../components/Common/Form' ;
import SubmitButton from '../components/Common/SubmitButton' ;
2023-07-25 20:27:29 +03:00
import TextInput from '../components/Common/TextInput' ;
import { useAuth } from '../context/AuthContext' ;
import { type IUserSignupData } from '../utils/models' ;
2023-07-15 17:46:19 +03:00
function RegisterPage() {
2023-07-26 23:11:00 +03:00
const navigate = useNavigate ( ) ;
2023-07-31 23:47:18 +03:00
const { user , signup , loading , error , setError } = useAuth ( ) ;
2023-07-15 17:46:19 +03:00
const [ username , setUsername ] = useState ( '' ) ;
const [ email , setEmail ] = useState ( '' ) ;
const [ password , setPassword ] = useState ( '' ) ;
const [ password2 , setPassword2 ] = useState ( '' ) ;
const [ firstName , setFirstName ] = useState ( '' ) ;
const [ lastName , setLastName ] = useState ( '' ) ;
2023-07-25 20:27:29 +03:00
2023-07-15 17:46:19 +03:00
useEffect ( ( ) = > {
setError ( undefined ) ;
} , [ username , email , password , password2 , setError ] ) ;
2023-07-31 23:47:18 +03:00
function handleSubmit ( event : React.FormEvent < HTMLFormElement > ) {
2023-07-15 17:46:19 +03:00
event . preventDefault ( ) ;
if ( ! loading ) {
2023-07-25 20:27:29 +03:00
const data : IUserSignupData = {
username ,
email ,
password ,
password2 ,
first_name : firstName ,
last_name : lastName
2023-07-15 17:46:19 +03:00
} ;
2023-07-26 23:11:00 +03:00
signup ( data , createdUser = > {
navigate ( ` /login?username= ${ createdUser . username } ` ) ;
toast . success ( ` Пользователь успешно создан: ${ createdUser . username } ` ) ;
} ) ;
2023-07-15 17:46:19 +03:00
}
2023-07-31 23:47:18 +03:00
}
2023-07-15 17:46:19 +03:00
return (
2023-07-25 20:27:29 +03:00
< div className = 'w-full py-2' >
2023-07-26 23:11:00 +03:00
{ user &&
2023-08-10 14:30:20 +03:00
< b > { ` Вы вошли в систему как ${ user . username } . Если хотите зарегистрировать нового пользователя, выйдите из системы (меню в правом верхнем углу экрана) ` } < / b > }
2023-07-26 23:11:00 +03:00
{ ! user &&
2023-08-27 15:39:49 +03:00
< Form
title = 'Регистрация пользователя'
onSubmit = { handleSubmit }
widthClass = 'w-[24rem]'
>
2023-07-15 17:46:19 +03:00
< TextInput id = 'username' label = 'Имя пользователя' type = 'text'
required
value = { username }
2023-08-27 16:35:17 +03:00
onChange = { event = > setUsername ( event . target . value ) }
2023-07-15 17:46:19 +03:00
/ >
2023-07-25 20:27:29 +03:00
< TextInput id = 'password' label = 'Пароль' type = 'password'
2023-07-15 17:46:19 +03:00
required
value = { password }
2023-08-27 16:35:17 +03:00
onChange = { event = > setPassword ( event . target . value ) }
2023-07-15 17:46:19 +03:00
/ >
< TextInput id = 'password2' label = 'Повторите пароль' type = 'password'
required
value = { password2 }
2023-08-27 16:35:17 +03:00
onChange = { event = > setPassword2 ( event . target . value ) }
2023-07-15 17:46:19 +03:00
/ >
< div className = 'text-sm' >
2023-08-22 20:29:07 +03:00
< p > - и с п о л ь з у й т е у н и к а л ь н ы й п а р о л ь < / p >
< p > - п о р т а л ф у н к ц и о н и р у е т в т е с т о в о м р е ж и м е < / p >
2023-08-27 15:39:49 +03:00
< p className = 'font-semibold text-red' > - б е з о п а с н о с т ь и н ф о р м а ц и и н е г а р а н т и р у е т с я < / p >
2023-08-22 20:29:07 +03:00
{ / * < p > - м и н и м у м 8 с и м в о л о в < / p >
2023-07-15 17:46:19 +03:00
< p > - б о л ь ш и е , м а л е н ь к и е б у к в ы , ц и ф р ы < / p >
2023-08-22 20:29:07 +03:00
< p > - м и н и м у м 1 с п е ц . с и м в о л < / p > * / }
2023-07-15 17:46:19 +03:00
< / div >
< TextInput id = 'email' label = 'email' type = 'text'
required
value = { email }
2023-08-27 16:35:17 +03:00
onChange = { event = > setEmail ( event . target . value ) }
2023-07-15 17:46:19 +03:00
/ >
< TextInput id = 'first_name' label = 'Имя' type = 'text'
value = { firstName }
2023-08-27 16:35:17 +03:00
onChange = { event = > setFirstName ( event . target . value ) }
2023-07-15 17:46:19 +03:00
/ >
< TextInput id = 'last_name' label = 'Фамилия' type = 'text'
value = { lastName }
2023-08-27 16:35:17 +03:00
onChange = { event = > setLastName ( event . target . value ) }
2023-07-15 17:46:19 +03:00
/ >
2023-08-27 15:39:49 +03:00
< div className = 'flex items-center justify-center w-full my-4' >
2023-07-15 17:46:19 +03:00
< 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
) ;
}
2023-07-25 20:27:29 +03:00
export default RegisterPage ;