enteghad + edit phone + edit email
This commit is contained in:
@@ -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<File[]>([])
|
||||
const multiUpload = useMultiUpload()
|
||||
const createCriticisms = useCreateCriticisms()
|
||||
|
||||
const formik = useFormik<CreateCriticismsTypes>({
|
||||
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 (
|
||||
<div className='mt-4 text-sm'>
|
||||
@@ -30,6 +84,8 @@ const AddCriticisms: FC = () => {
|
||||
<Input
|
||||
label={t('criticisms.subject')}
|
||||
placeholder={t('criticisms.enter_your_subject')}
|
||||
{...formik.getFieldProps('title')}
|
||||
error_text={formik.touched.title && formik.errors.title ? formik.errors.title : ''}
|
||||
/>
|
||||
</div>
|
||||
|
||||
@@ -37,12 +93,16 @@ const AddCriticisms: FC = () => {
|
||||
<Textarea
|
||||
label={t('criticisms.description')}
|
||||
placeholder={t('criticisms.enter_description')}
|
||||
{...formik.getFieldProps('content')}
|
||||
error_text={formik.touched.content && formik.errors.content ? formik.errors.content : ''}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div className='mt-7'>
|
||||
<UploadBox
|
||||
label={t('attachment')}
|
||||
isMultiple
|
||||
onChange={setFiles}
|
||||
/>
|
||||
</div>
|
||||
|
||||
@@ -51,6 +111,8 @@ const AddCriticisms: FC = () => {
|
||||
<Button
|
||||
label={t('ticket.send')}
|
||||
className='max-w-[100px]'
|
||||
onClick={() => formik.handleSubmit()}
|
||||
isLoading={createCriticisms.isPending || multiUpload.isPending}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user