import { FC, useState } from 'react' import { useTranslation } from 'react-i18next' import Input from '../../components/Input' import Select from '../../components/Select' import Textarea from '../../components/Textarea' import UploadBox from '../../components/UploadBox' import Button from '../../components/Button' import { TickCircle, TickSquare } from 'iconsax-react' import { useCreateTicket, useGetCategories } from './hooks/useTicketData' import { useGetProfile } from '../profile/hooks/useProfileData' import PageLoading from '../../components/PageLoading' import { useFormik } from 'formik' import * as Yup from 'yup' import { ErrorType } from '../../helpers/types' import { useNavigate } from 'react-router-dom' import { Pages } from '../../config/Pages' import { CreateTicketAdminType } from './types/TicketTypes' import { toast } from 'react-toastify' import { useMultiUpload } from '../service/hooks/useServiceData' import { useGetCustomers } from '../customer/hooks/useCustomerData' import { CustomerItemType } from '../customer/types/CustomerTypes' const CreateTicket: FC = () => { const { t } = useTranslation('global') const navigate = useNavigate() const [files, setFiles] = useState([]) const getProfile = useGetProfile() const getCategories = useGetCategories() const multiUpload = useMultiUpload() const createTicket = useCreateTicket() const getCustomers = useGetCustomers(1, true) const formik = useFormik({ initialValues: { subject: '', message: '', categoryId: '', priority: 'LOW', attachmentUrls: [], userId: '' }, validationSchema: Yup.object({ subject: Yup.string().required(t('errors.required')), message: Yup.string().required(t('errors.required')), categoryId: Yup.string().required(t('errors.required')), priority: 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.attachmentUrls = await data.data.map((item: { url: string }) => item?.url) }, onError: (error: ErrorType) => { toast.error(error.response?.data?.error?.message[0]) } }) } else { delete values.attachmentUrls } if (values.danakServiceId === '') { delete values.danakServiceId } createTicket.mutate(values, { onSuccess: (data) => { toast.success(t('success')) formik.resetForm() navigate(Pages.ticket.detail + data.data?.ticketId) }, onError: (error: ErrorType) => { toast.error(error.response?.data?.error?.message[0]) } }) } }) return (
{t('ticket.new_ticket')}
{ getProfile.isPending || getCategories.isPending ? :
{t('ticket.submit_your_message')}
({ label: item.title, value: item.id }) )} placeholder={t('select')} className='border' name='categoryId' value={formik.values.categoryId} onChange={formik.handleChange} error_text={formik.touched.categoryId && formik.errors.categoryId ? formik.errors.categoryId : ''} />