import { FC } from 'react' import Button from '../../components/Button' import { TickCircle } from 'iconsax-react' import Input from '../../components/Input' import CreateSidebar from './components/CreateSidebar' import { useTranslation } from 'react-i18next' import { useFormik } from 'formik' import * as Yup from 'yup' import { CreateCompanyType } from './types/CompanyTypes' import { useState } from 'react' import { useMultiUpload, useSingleUpload } from '../service/hooks/useServiceData' import { useCreateCompany } from './hooks/useCompanyData' import { toast } from 'react-toastify' import { ErrorType } from '../../helpers/types' import { Pages } from '../../config/Pages' import { useNavigate } from 'react-router-dom' import CompanyServices from './components/CompanyServices' import CompanyProducts from './components/CompanyProducts' import DatePickerComponent from '../../components/DatePicker' import moment from 'moment-jalaali' const CreateCompany: FC = () => { const navigate = useNavigate() const { t } = useTranslation('global') const [profileImage, setProfileImage] = useState(null) const [coverImage, setCoverImage] = useState(null) const multiUpload = useMultiUpload() const singleUpload = useSingleUpload() const createCompany = useCreateCompany() const formik = useFormik({ initialValues: { phone: '', firstName: '', lastName: '', nationalCode: '', password: '', name: '', email: '', identificationNumber: '', dateOfEstablishment: '', address: '', mapAddressLink: '', description: '', websiteUrl: '', profileImageUrl: '', coverImageUrl: '', isActive: true, industryId: '', products: [], services: [], }, validationSchema: Yup.object({ phone: Yup.string().required(t('errors.required')), firstName: Yup.string().required(t('errors.required')), lastName: Yup.string().required(t('errors.required')), nationalCode: Yup.string().required(t('errors.required')), password: Yup.string().required(t('errors.required')), name: Yup.string().required(t('errors.required')), email: Yup.string().email(t('errors.invalid_email')).required(t('errors.required')), identificationNumber: Yup.string().required(t('errors.required')), dateOfEstablishment: Yup.string().required(t('errors.required')), address: Yup.string().required(t('errors.required')), mapAddressLink: Yup.string().url(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')), industryId: Yup.string().required(t('errors.required')), // products and services validation can be added if needed }), onSubmit: async (values) => { if (!profileImage || !coverImage) { toast.error('لطفا تصاویر را انتخاب کنید') return } // آپلود تصاویر خدمات let serviceImages: string[] = [] if (services.length > 0) { const formDataServices = new FormData() services.forEach(s => s.image && formDataServices.append('files', s.image)) const serviceUploadRes = await multiUpload.mutateAsync(formDataServices) serviceImages = serviceUploadRes.data.map((item: { url: string }) => item?.url) } // آپلود تصاویر محصولات let productImages: string[] = [] if (products.length > 0) { const formDataProducts = new FormData() products.forEach(p => p.image && formDataProducts.append('files', p.image)) const productUploadRes = await multiUpload.mutateAsync(formDataProducts) productImages = productUploadRes.data.map((item: { url: string }) => item?.url) } // مقداردهی به values values.services = services.map((s, idx) => ({ title: s.title, imageUrl: serviceImages[idx] ? serviceImages[idx] : '' })) values.products = products.map((p, idx) => ({ title: p.title, imageUrl: productImages[idx] ? productImages[idx] : '' })) const formDataProfile = new FormData() formDataProfile.append('file', profileImage) const profileUploadRes = await singleUpload.mutateAsync(formDataProfile) values.profileImageUrl = profileUploadRes.data.url const formDataCover = new FormData() formDataCover.append('file', coverImage) const coverUploadRes = await singleUpload.mutateAsync(formDataCover) values.coverImageUrl = coverUploadRes.data.url await createCompany.mutateAsync(values, { onSuccess: () => { toast.success('شرکت با موفقیت ثبت شد') navigate(Pages.company.list) }, onError: (error: ErrorType) => { toast.error(error.response?.data?.error?.message[0]) } }) } }) const [services, setServices] = useState<{ title: string; image?: File }[]>([]) const [products, setProducts] = useState<{ title: string; image?: File }[]>([]) return (
افزودن شرکت
اطلاعات شرکت
formik.setFieldValue('dateOfEstablishment', moment(date).format('YYYY-MM-DD'))} error_text={formik.touched.dateOfEstablishment && formik.errors.dateOfEstablishment ? formik.errors.dateOfEstablishment : ''} />
) } export default CreateCompany