This commit is contained in:
hamid zarghami
2026-02-16 14:40:27 +03:30
parent a2a095836e
commit 6238e3e1a7
5 changed files with 170 additions and 141 deletions
+1 -1
View File
@@ -57,7 +57,7 @@ const DatePickerComponent: FC<Props> = (props: Props) => {
)}>
<DatePicker
placeholder={props.placeholder}
value={value}
value={props.defaulValue}
onChange={(date) => setValue(date as DateObject)}
calendar={persian}
locale={persian_fa}
+1
View File
@@ -837,6 +837,7 @@
"establishment_date": "تاریخ تاسیس",
"address": "آدرس",
"map_link": "لینک نقشه شرکت",
"metrage": "متراژ",
"short_description": "توضیح کوتاه شرکت",
"website_url": "آدرس وبسایت",
"profile_image_url": "تصویر پروفایل",
+13
View File
@@ -41,6 +41,7 @@ const CreateCompany: FC = () => {
dateOfEstablishment: '',
address: '',
mapAddressLink: '',
metrage: undefined,
description: '',
websiteUrl: '',
profileImageUrl: '',
@@ -62,6 +63,7 @@ const CreateCompany: FC = () => {
dateOfEstablishment: Yup.string().required(t('errors.required')),
address: Yup.string().required(t('errors.required')),
mapAddressLink: Yup.string().url(t('errors.invalid_url')),
metrage: Yup.number().required(t('errors.invalid_url')),
description: Yup.string().required(t('errors.required')),
websiteUrl: Yup.string().url(t('errors.invalid_url')).required(t('errors.required')),
isActive: Yup.boolean().required(t('errors.required')),
@@ -75,6 +77,9 @@ const CreateCompany: FC = () => {
return
}
values.metrage = Number(values.metrage)
// آپلود تصاویر خدمات
let serviceImages: string[] = []
if (services.length > 0) {
@@ -240,6 +245,14 @@ const CreateCompany: FC = () => {
onChange={formik.handleChange}
error_text={formik.touched.mapAddressLink && formik.errors.mapAddressLink ? formik.errors.mapAddressLink : ''}
/>
<Input
label={t('company.metrage')}
name='metrage'
value={formik.values.metrage}
onChange={formik.handleChange}
error_text={formik.touched.metrage && formik.errors.metrage ? formik.errors.metrage : ''}
placeholder='متر مربع'
/>
</div>
<div className='mt-6'>
+154 -140
View File
@@ -57,6 +57,7 @@ const UpdateCompany: FC = () => {
dateOfEstablishment: '',
address: '',
mapAddressLink: '',
metrage: undefined,
description: '',
websiteUrl: '',
profileImageUrl: '',
@@ -77,6 +78,7 @@ const UpdateCompany: FC = () => {
dateOfEstablishment: Yup.string().required(t('errors.required')),
address: Yup.string().required(t('errors.required')),
mapAddressLink: Yup.string().url(t('errors.invalid_url')),
metrage: Yup.string(),
description: Yup.string().required(t('errors.required')),
websiteUrl: Yup.string().url(t('errors.invalid_url')).required(t('errors.required')),
isActive: Yup.boolean().required(t('errors.required')),
@@ -84,6 +86,9 @@ const UpdateCompany: FC = () => {
// products and services validation can be added if needed
}),
onSubmit: async (values) => {
values.metrage = Number(values.metrage)
// آپلود تصاویر خدمات
let serviceImages: string[] = []
const serviceImageIndices: number[] = []
@@ -200,13 +205,14 @@ const UpdateCompany: FC = () => {
useEffect(() => {
if (companyDetail) {
formik.setValues(companyDetail?.data?.company)
formik.setFieldValue('dateOfEstablishment', moment(companyDetail?.data?.company?.dateOfEstablishment).format('YYYY-MM-DD'))
formik.setFieldValue('dateOfEstablishment', moment(companyDetail?.data?.company?.dateOfEstablishment, 'jYYYY-jMM-jDD').format('jYYYY-jMM-jDD'))
formik.setFieldValue('firstName', companyDetail?.data?.company?.user?.firstName)
formik.setFieldValue('lastName', companyDetail?.data?.company?.user?.lastName)
formik.setFieldValue('nationalCode', companyDetail?.data?.company?.user?.nationalCode)
formik.setFieldValue('phone', companyDetail?.data?.company?.user?.phone)
formik.setFieldValue('email', companyDetail?.data?.company?.user?.email)
formik.setFieldValue('address', companyDetail?.data?.company?.address)
formik.setFieldValue('metrage', companyDetail?.data?.company?.metrage ?? '')
formik.setFieldValue("industryId", companyDetail?.data?.company?.industry?.id)
// ذخیره سرویس‌ها با URL تصاویر موجود
@@ -227,152 +233,160 @@ const UpdateCompany: FC = () => {
const [services, setServices] = useState<{ title: string; image?: File; existingImageUrl?: string }[]>([])
const [products, setProducts] = useState<{ title: string; image?: File; existingImageUrl?: string }[]>([])
console.log(formik.errors);
return (
<div className='mt-4'>
<div className='flex justify-between items-center'>
<div>
ویرایش شرکت
</div>
<Button
className='w-fit px-4'
onClick={() => formik.handleSubmit()}
isLoading={updateCompany.isPending || singleUpload.isPending || multiUpload.isPending}
>
<div className='flex items-center gap-2'>
<TickCircle size={20} color='white' />
<div>بروزرسانی شرکت</div>
</div>
</Button>
</div>
<div className='flex gap-6'>
<div className='flex-1'>
<div className='flex-1 mt-10 bg-white py-8 xl:px-10 px-4 rounded-3xl'>
<div>اطلاعات شرکت</div>
<div className='mt-6'>
<Input
label='نام شرکت'
name='name'
value={formik.values.name}
onChange={formik.handleChange}
error_text={formik.touched.name && formik.errors.name ? formik.errors.name : ''}
/>
</div>
<div className='rowTwoInput mt-6'>
<Input
label='نام'
name='firstName'
value={formik.values.firstName}
onChange={formik.handleChange}
error_text={formik.touched.firstName && formik.errors.firstName ? formik.errors.firstName : ''}
/>
<Input
label='نام خانوادگی'
name='lastName'
value={formik.values.lastName}
onChange={formik.handleChange}
error_text={formik.touched.lastName && formik.errors.lastName ? formik.errors.lastName : ''}
/>
</div>
<div className='rowTwoInput mt-6'>
<Input
label='کد ملی'
name='nationalCode'
value={formik.values.nationalCode}
onChange={formik.handleChange}
error_text={formik.touched.nationalCode && formik.errors.nationalCode ? formik.errors.nationalCode : ''}
/>
<Input
label='رمز عبور'
name='password'
type='password'
value={formik.values.password}
onChange={formik.handleChange}
error_text={formik.touched.password && formik.errors.password ? formik.errors.password : ''}
/>
</div>
<div className='rowTwoInput mt-6'>
<Input
label={t('company.phone_number')}
name='phone'
value={formik.values.phone}
onChange={formik.handleChange}
error_text={formik.touched.phone && formik.errors.phone ? formik.errors.phone : ''}
/>
<Input
label={t('company.email')}
name='email'
value={formik.values.email}
onChange={formik.handleChange}
error_text={formik.touched.email && formik.errors.email ? formik.errors.email : ''}
/>
</div>
<div className='rowTwoInput mt-6'>
<Input
label={t('company.national_id')}
name='identificationNumber'
value={formik.values.identificationNumber}
onChange={formik.handleChange}
error_text={formik.touched.identificationNumber && formik.errors.identificationNumber ? formik.errors.identificationNumber : ''}
/>
<DatePickerComponent
label={t('company.establishment_date')}
placeholder='تاریخ تاسیس'
onChange={(date) => formik.setFieldValue('dateOfEstablishment', moment(date).format('YYYY-MM-DD'))}
error_text={formik.touched.dateOfEstablishment && formik.errors.dateOfEstablishment ? formik.errors.dateOfEstablishment : ''}
defaulValue={formik.values.dateOfEstablishment}
/>
</div>
<div className='rowTwoInput mt-6'>
<Input
label={t('company.map_link')}
name='mapAddressLink'
value={formik.values.mapAddressLink}
onChange={formik.handleChange}
error_text={formik.touched.mapAddressLink && formik.errors.mapAddressLink ? formik.errors.mapAddressLink : ''}
/>
</div>
<div className='mt-6'>
<Input
label={t('company.address')}
name='address'
value={formik.values.address}
onChange={formik.handleChange}
error_text={formik.touched.address && formik.errors.address ? formik.errors.address : ''}
/>
</div>
<div className='mt-6'>
<Input
label={t('company.short_description')}
name='description'
value={formik.values.description}
onChange={formik.handleChange}
error_text={formik.touched.description && formik.errors.description ? formik.errors.description : ''}
/>
</div>
<CompanyServices value={services} onChange={setServices} />
<CompanyProducts value={products} onChange={setProducts} />
if (formik.values?.dateOfEstablishment)
return (
<div className='mt-4'>
<div className='flex justify-between items-center'>
<div>
ویرایش شرکت
</div>
<Button
className='w-fit px-4'
onClick={() => formik.handleSubmit()}
isLoading={updateCompany.isPending || singleUpload.isPending || multiUpload.isPending}
>
<div className='flex items-center gap-2'>
<TickCircle size={20} color='white' />
<div>بروزرسانی شرکت</div>
</div>
</Button>
</div>
<UpdateSidebar formik={formik} setProfileImage={setProfileImage} setCoverImage={setCoverImage} />
<div className='flex gap-6'>
<div className='flex-1'>
<div className='flex-1 mt-10 bg-white py-8 xl:px-10 px-4 rounded-3xl'>
<div>اطلاعات شرکت</div>
<div className='mt-6'>
<Input
label='نام شرکت'
name='name'
value={formik.values.name}
onChange={formik.handleChange}
error_text={formik.touched.name && formik.errors.name ? formik.errors.name : ''}
/>
</div>
<div className='rowTwoInput mt-6'>
<Input
label='نام'
name='firstName'
value={formik.values.firstName}
onChange={formik.handleChange}
error_text={formik.touched.firstName && formik.errors.firstName ? formik.errors.firstName : ''}
/>
<Input
label='نام خانوادگی'
name='lastName'
value={formik.values.lastName}
onChange={formik.handleChange}
error_text={formik.touched.lastName && formik.errors.lastName ? formik.errors.lastName : ''}
/>
</div>
<div className='rowTwoInput mt-6'>
<Input
label='کد ملی'
name='nationalCode'
value={formik.values.nationalCode}
onChange={formik.handleChange}
error_text={formik.touched.nationalCode && formik.errors.nationalCode ? formik.errors.nationalCode : ''}
/>
<Input
label='رمز عبور'
name='password'
type='password'
value={formik.values.password}
onChange={formik.handleChange}
error_text={formik.touched.password && formik.errors.password ? formik.errors.password : ''}
/>
</div>
<div className='rowTwoInput mt-6'>
<Input
label={t('company.phone_number')}
name='phone'
value={formik.values.phone}
onChange={formik.handleChange}
error_text={formik.touched.phone && formik.errors.phone ? formik.errors.phone : ''}
/>
<Input
label={t('company.email')}
name='email'
value={formik.values.email}
onChange={formik.handleChange}
error_text={formik.touched.email && formik.errors.email ? formik.errors.email : ''}
/>
</div>
<div className='rowTwoInput mt-6'>
<Input
label={t('company.national_id')}
name='identificationNumber'
value={formik.values.identificationNumber}
onChange={formik.handleChange}
error_text={formik.touched.identificationNumber && formik.errors.identificationNumber ? formik.errors.identificationNumber : ''}
/>
<DatePickerComponent
label={t('company.establishment_date')}
placeholder='تاریخ تاسیس'
onChange={(date) => formik.setFieldValue('dateOfEstablishment', moment(date).format('YYYY-MM-DD'))}
error_text={formik.touched.dateOfEstablishment && formik.errors.dateOfEstablishment ? formik.errors.dateOfEstablishment : ''}
defaulValue={formik.values.dateOfEstablishment}
/>
</div>
<div className='rowTwoInput mt-6'>
<Input
label={t('company.map_link')}
name='mapAddressLink'
value={formik.values.mapAddressLink}
onChange={formik.handleChange}
error_text={formik.touched.mapAddressLink && formik.errors.mapAddressLink ? formik.errors.mapAddressLink : ''}
/>
<Input
label={t('company.metrage')}
name='metrage'
value={formik.values.metrage}
onChange={formik.handleChange}
error_text={formik.touched.metrage && formik.errors.metrage ? formik.errors.metrage : ''}
placeholder='متر مربع'
/>
</div>
<div className='mt-6'>
<Input
label={t('company.address')}
name='address'
value={formik.values.address}
onChange={formik.handleChange}
error_text={formik.touched.address && formik.errors.address ? formik.errors.address : ''}
/>
</div>
<div className='mt-6'>
<Input
label={t('company.short_description')}
name='description'
value={formik.values.description}
onChange={formik.handleChange}
error_text={formik.touched.description && formik.errors.description ? formik.errors.description : ''}
/>
</div>
<CompanyServices value={services} onChange={setServices} />
<CompanyProducts value={products} onChange={setProducts} />
</div>
</div>
<UpdateSidebar formik={formik} setProfileImage={setProfileImage} setCoverImage={setCoverImage} />
</div>
</div>
</div>
)
)
}
export default UpdateCompany
+1
View File
@@ -24,6 +24,7 @@ export type CreateCompanyType = {
dateOfEstablishment: string;
address: string;
mapAddressLink: string;
metrage?: number;
description: string;
websiteUrl: string;
profileImageUrl: string;