complete profile

This commit is contained in:
2026-07-02 21:01:20 +03:30
parent 2366f5ee02
commit f7deabd52a
11 changed files with 220 additions and 17 deletions
+28
View File
@@ -0,0 +1,28 @@
import { type FC } from 'react'
import LogoImage from '../../assets/images/logo.svg'
import LogoSmallImage from '../../assets/images/logo-small.svg'
import CompleteProfileForm from './components/CompleteProfileForm'
const CompleteProfile: FC = () => {
return (
<div className='w-full h-full flex justify-center lg:py-[75px] py-4 lg:items-center lg:px-10 px-4'>
<div className='flex w-full max-h-[812px] max-w-[1200px] bg-secondary h-full rounded-3xl overflow-hidden'>
<div className='flex-1 min-w-[50%] overflow-y-auto bg-white lg:px-9 px-4 py-7'>
<div className='flex-1 h-full flex flex-col'>
<div className='flex relative flex-1 flex-col h-full justify-center'>
<img src={LogoSmallImage} className='w-8 hidden xl:block' />
<img src={LogoImage} className='w-44 right-0 left-0 mx-auto absolute top-10 xl:hidden' />
<CompleteProfileForm />
</div>
</div>
</div>
<div className='flex-1 min-w-[50%] lg:flex hidden justify-center items-center'>
<img src={LogoImage} className='h-20' />
</div>
</div>
</div>
)
}
export default CompleteProfile
@@ -0,0 +1,101 @@
import { type FC } from 'react'
import Input from '@/components/Input'
import { useFormik } from 'formik'
import * as Yup from 'yup'
import Button from '@/components/Button'
import Error from '@/components/Error'
import { useGetMe, useUpdateProfile } from '@/pages/user/hooks/useUserData'
import { toast } from '@/shared/toast'
import { extractErrorMessage } from '@/config/func'
import { Paths } from '@/config/Paths'
import type { UpdateProfileType } from '@/pages/user/types/Types'
const CompleteProfileForm: FC = () => {
const { data: user } = useGetMe()
const updateProfile = useUpdateProfile()
const formik = useFormik<UpdateProfileType>({
enableReinitialize: true,
initialValues: {
firstName: user?.firstName ?? '',
lastName: user?.lastName ?? '',
},
validationSchema: Yup.object({
firstName: Yup.string()
.trim()
.required('نام اجباری است.'),
lastName: Yup.string()
.trim()
.required('نام خانوادگی اجباری است.'),
}),
onSubmit(values) {
updateProfile.mutate(
{
firstName: values.firstName.trim(),
lastName: values.lastName.trim(),
},
{
onSuccess() {
toast('اطلاعات شما با موفقیت ثبت شد', 'success')
window.location.href = Paths.home
},
onError(error) {
toast(extractErrorMessage(error), 'error')
},
},
)
},
})
return (
<div>
<div className='mt-5'>
<h2 className='lg:text-2xl font-bold'>
تکمیل اطلاعات
</h2>
<p className='text-description text-sm lg:mt-2 mt-3'>
لطفاً نام و نام خانوادگی خود را وارد کنید .
</p>
</div>
<div className='mt-16 flex flex-col gap-6'>
<div>
<Input
label='نام'
placeholder='نام خود را وارد کنید'
name='firstName'
onChange={formik.handleChange}
onBlur={formik.handleBlur}
value={formik.values.firstName}
/>
{formik.touched.firstName && formik.errors.firstName && (
<Error errorText={formik.errors.firstName} />
)}
</div>
<div>
<Input
label='نام خانوادگی'
placeholder='نام خانوادگی خود را وارد کنید'
name='lastName'
onChange={formik.handleChange}
onBlur={formik.handleBlur}
value={formik.values.lastName}
/>
{formik.touched.lastName && formik.errors.lastName && (
<Error errorText={formik.errors.lastName} />
)}
</div>
</div>
<Button
label='ثبت و ادامه'
className='mt-8'
onClick={() => formik.handleSubmit()}
isLoading={updateProfile.isPending}
/>
</div>
)
}
export default CompleteProfileForm
+5 -2
View File
@@ -12,6 +12,7 @@ import { extractErrorMessage, setRefreshToken } from '../../../config/func'
import { setToken } from '../../../config/func'
import { toast } from '@/shared/toast'
import { Paths } from '@/config/Paths'
import { needsProfileCompletion } from '@/pages/user/utils/profileUtils'
const LoginStep2: FC = () => {
@@ -38,8 +39,10 @@ const LoginStep2: FC = () => {
onSuccess(data) {
setToken(data?.data?.tokens?.accessToken?.token)
setRefreshToken(data?.data?.tokens?.refreshToken?.token)
// Check if there's a redirect parameter in the URL
window.location.href = Paths.profile
const user = data?.data?.user
window.location.href = needsProfileCompletion(user)
? Paths.auth.completeProfile
: Paths.home
},
onError(error) {
toast(extractErrorMessage(error), 'error')