108 lines
3.8 KiB
TypeScript
108 lines
3.8 KiB
TypeScript
import { FC } from 'react'
|
|
import Input from '../../../components/Input'
|
|
import { useTranslation } from 'react-i18next'
|
|
import { LoginWithPasswordType } from '../types/AuthTypes'
|
|
import { useFormik } from 'formik'
|
|
import * as Yup from 'yup'
|
|
import { useAuthStore } from '../store/AuthStore'
|
|
import Error from '../../../components/Error'
|
|
import Button from '../../../components/Button'
|
|
import { Link } from 'react-router-dom'
|
|
import { Pages } from '../../../config/Pages'
|
|
import ArrowLeftIcon from '../../../assets/images/arrow-left.svg'
|
|
import { useLoginWithPassword } from '../hooks/useAuthData'
|
|
import { toast } from '../../../components/Toast'
|
|
import { ErrorType } from '../../../helpers/types'
|
|
import { setRefreshToken } from '../../../config/func'
|
|
import { setToken } from '../../../config/func'
|
|
import { getRedirectUrl } from '../../../config/func'
|
|
|
|
const LoginStep3: FC = () => {
|
|
|
|
const { t } = useTranslation('global')
|
|
const { setStepLogin, email, phone } = useAuthStore()
|
|
const loginWithPassword = useLoginWithPassword()
|
|
|
|
const formik = useFormik<LoginWithPasswordType>({
|
|
initialValues: {
|
|
password: '',
|
|
email: email ? email : undefined,
|
|
phone: phone ? phone : undefined,
|
|
},
|
|
validationSchema: Yup.object({
|
|
password: Yup.string()
|
|
.required(t('errors.required'))
|
|
}),
|
|
onSubmit(values) {
|
|
loginWithPassword.mutate(values, {
|
|
onSuccess(data) {
|
|
setToken(data?.data?.accessToken?.token)
|
|
setRefreshToken(data?.data?.refreshToken?.token)
|
|
const redirectUrl = getRedirectUrl();
|
|
if (redirectUrl) {
|
|
window.location.href = redirectUrl;
|
|
return; // Prevent the default navigation
|
|
}
|
|
window.location.href = Pages.dashboard
|
|
},
|
|
onError(error: ErrorType) {
|
|
toast(error?.response?.data?.error?.message[0], 'error')
|
|
},
|
|
})
|
|
|
|
},
|
|
})
|
|
|
|
return (
|
|
<div>
|
|
<div className='mt-5'>
|
|
<h2 className='text-2xl font-bold'>
|
|
{t('auth.enter_password_step3')}
|
|
</h2>
|
|
<p className='text-description text-sm mt-2'>
|
|
{t('auth.enter_your_password')}
|
|
</p>
|
|
</div>
|
|
|
|
<div className='mt-16'>
|
|
<Input
|
|
label={t('auth.password')}
|
|
type='password'
|
|
className='text-right'
|
|
name='password'
|
|
onChange={formik.handleChange}
|
|
value={formik.values.password}
|
|
error_text={formik.touched.password && formik.errors.password ? formik.errors.password : ''}
|
|
/>
|
|
|
|
{
|
|
formik.touched.password && formik.errors.password &&
|
|
<Error
|
|
errorText={formik.errors.password}
|
|
/>
|
|
}
|
|
|
|
</div>
|
|
<Link to={Pages.auth.forgotPassword}>
|
|
<div className='mt-4 flex justify-end text-sm'>
|
|
{t('auth.forgot_password')}
|
|
</div>
|
|
</Link>
|
|
|
|
<Button
|
|
label={t('auth.login')}
|
|
className='mt-8'
|
|
onClick={() => formik.handleSubmit()}
|
|
/>
|
|
|
|
<div onClick={() => setStepLogin(2)} className='mt-6 cursor-pointer flex gap-2 items-center text-sm'>
|
|
<p className='text-description'>
|
|
{t('auth.login_with_otp')}
|
|
</p>
|
|
<img src={ArrowLeftIcon} className='w-4' />
|
|
</div>
|
|
</div>
|
|
)
|
|
}
|
|
|
|
export default LoginStep3 |