diff --git a/src/langs/fa.json b/src/langs/fa.json index a64d29d..940803b 100644 --- a/src/langs/fa.json +++ b/src/langs/fa.json @@ -371,7 +371,8 @@ "username_available": "نام کاربری موجود", "username_not_available": "نام کاربری موجود نیست", "username_save_success": "نام کاربری با موفقیت ذخیره شد", - "image_uploaded_successfully": "تصویر با موفقیت آپلود شد" + "image_uploaded_successfully": "تصویر با موفقیت آپلود شد", + "confrim_email": "تایید ایمیل" }, "email": "ایمیل", "save": "ذخیره", diff --git a/src/pages/criticisms/Add.tsx b/src/pages/criticisms/Add.tsx index e873ba3..267ca37 100644 --- a/src/pages/criticisms/Add.tsx +++ b/src/pages/criticisms/Add.tsx @@ -1,14 +1,68 @@ -import { FC } from 'react' +import { FC, useState } from 'react' import { useTranslation } from 'react-i18next' import Input from '../../components/Input' import Textarea from '../../components/Textarea' import UploadBox from '../../components/UploadBox' import Button from '../../components/Button' import { TickSquare } from 'iconsax-react' +import { useMultiUpload } from '../ticket/hooks/useTicketData' +import { useFormik } from 'formik' +import { CreateCriticismsTypes } from './types/CriticismsTypes' +import * as Yup from 'yup' +import { toast } from 'react-toastify' +import { ErrorType } from '../../helpers/types' +import { useCreateCriticisms } from './hooks/useCriticismsData' const AddCriticisms: FC = () => { const { t } = useTranslation('global') + const [files, setFiles] = useState([]) + const multiUpload = useMultiUpload() + const createCriticisms = useCreateCriticisms() + + const formik = useFormik({ + initialValues: { + content: '', + files: [], + title: '', + }, + validationSchema: Yup.object({ + title: Yup.string().required(t('errors.required')), + content: Yup.string().required(t('errors.required')), + }), + onSubmit: async (values) => { + if (files.length > 0) { + const images = new FormData() + files.forEach(file => { + images.append('files', file) + }) + await multiUpload.mutateAsync(images, { + onSuccess: async (data) => { + values.files = await data.data.map((item: { url: string }) => item?.url) + }, + onError: (error: ErrorType) => { + toast.error(error.response?.data?.error?.message[0]) + } + }) + + } else { + delete values.files + } + + createCriticisms.mutate(values, { + onSuccess: () => { + toast.success(t('success')) + formik.resetForm() + setTimeout(() => { + window.location.reload() + }, 1000); + }, + onError: (error: ErrorType) => { + toast.error(error.response?.data?.error?.message[0]) + } + }) + } + }) return (
@@ -30,6 +84,8 @@ const AddCriticisms: FC = () => {
@@ -37,12 +93,16 @@ const AddCriticisms: FC = () => {