diff --git a/src/langs/fa.json b/src/langs/fa.json index 9fc176c..64f597c 100644 --- a/src/langs/fa.json +++ b/src/langs/fa.json @@ -601,7 +601,12 @@ "state": "استان", "city": "شهر", "password": "رمز عبور", - "reapeat_password": "تکرار رمز عبور" + "reapeat_password": "تکرار رمز عبور", + "copany_name": "نام شرکت", + "enter_company_name": "نام ثبتی شرکت را وارد کنید", + "postal_code": "کد پستی", + "enter_postal_code": "کد پستی را وارد کنید", + "address": "آدرس" }, "messages": { "messages_list": "لیست پیام ها", diff --git a/src/pages/customer/Create.tsx b/src/pages/customer/Create.tsx index edd784e..2f2ae70 100644 --- a/src/pages/customer/Create.tsx +++ b/src/pages/customer/Create.tsx @@ -1,4 +1,4 @@ -import { FC } from 'react' +import { FC, useState } from 'react' import { useTranslation } from 'react-i18next' import Input from '../../components/Input' import UploadBoxDraggble from '../../components/UploadBoxDraggble'; @@ -6,10 +6,100 @@ import Button from '../../components/Button'; import { TickCircle } from 'iconsax-react'; import DatePickerComponent from '../../components/DatePicker'; import Select from '../../components/Select'; +import * as Yup from 'yup' +import { useFormik } from 'formik'; +import { CreateCustomerType, ProvinesItemType } from './types/CustomerTypes'; +import { useCreateCustomer, useGetCities, useGetProvines } from './hooks/useCustomerData'; +import PageLoading from '../../components/PageLoading'; +import { toast } from 'react-toastify'; +import { ErrorType } from '../../helpers/types'; +import { useSingleUpload } from '../service/hooks/useServiceData'; +import { useNavigate } from 'react-router-dom'; +import { Pages } from '../../config/Pages'; +import Textarea from '../../components/Textarea'; const AddCustomer: FC = () => { const { t } = useTranslation('global') + const navigate = useNavigate() + const [provinesId, setProvinesId] = useState('') + const [file, setFile] = useState() + const getProvines = useGetProvines() + const getCities = useGetCities(provinesId) + const singleUpload = useSingleUpload() + const createCustomer = useCreateCustomer() + + const handleCreateCustomer = (values: CreateCustomerType) => { + createCustomer.mutate(values, { + onSuccess: () => { + toast.success(t('success')) + navigate(Pages.customer.list) + }, + onError: (error: ErrorType) => { + toast.error(error.response?.data?.error.message[0]) + } + }) + } + + + + + const formik = useFormik({ + initialValues: { + phone: '', + firstName: '', + lastName: '', + email: '', + birthDate: '', + nationalCode: '', + password: '', + economicCode: '', + companyRegisteredName: '', + registrationId: '', + nationalId: '', + number: '', + postalCode: '', + address: '', + cityId: '', + profilePic: '' + }, + validationSchema: Yup.object({ + phone: Yup.string().required(t('errors.required')), + firstName: Yup.string().required(t('errors.required')), + lastName: Yup.string().required(t('errors.required')), + email: Yup.string().email(t('errors.email')).required(t('errors.required')), + birthDate: Yup.string().required(t('errors.required')), + nationalCode: Yup.string().required(t('errors.required')), + password: Yup.string().required(t('errors.required')), + economicCode: Yup.string().required(t('errors.required')), + companyRegisteredName: Yup.string().required(t('errors.required')), + registrationId: Yup.string().required(t('errors.required')), + nationalId: Yup.string().required(t('errors.required')), + number: Yup.string().required(t('errors.required')), + postalCode: Yup.string().required(t('errors.required')), + address: Yup.string().required(t('errors.required')), + cityId: Yup.string().required(t('errors.required')), + }), + onSubmit: async (values) => { + if (file) { + const formData = new FormData() + formData.append('file', file) + await singleUpload.mutateAsync(formData, { + onSuccess: (data) => { + values.profilePic = data?.data?.url + }, + onError: (error: ErrorType) => { + toast.error(error.response?.data?.error?.message[0]) + } + }) + + handleCreateCustomer(values) + } else { + values.profilePic = undefined + handleCreateCustomer(values) + } + } + }) return (
@@ -20,6 +110,8 @@ const AddCustomer: FC = () => {
-
-
+ { + getProvines.isPending ? + + : +
+
-
-
- +
+
+ - + +
+ +
+ formik.setFieldValue('birthDate', value)} + error_text={formik.touched.birthDate && formik.errors.birthDate ? formik.errors.birthDate : ''} + placeholder='' + /> + +
+ +
+ + + +
+ +
+ {t('customer.information_legal')} +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + +
+ +
+ ({ label: item.name, value: item.id })) : []} + placeholder={t('select')} + {...formik.getFieldProps('cityId')} + error_text={formik.touched.cityId && formik.errors.cityId ? formik.errors.cityId : ''} + /> +
+ +
+