diff --git a/.env b/.env index 343e676..97cbbeb 100644 --- a/.env +++ b/.env @@ -1,4 +1,4 @@ VITE_TOKEN_NAME = 'admin_token' VITE_REFRESH_TOKEN_NAME = 'admin_refresh_token' VITE_BASE_URL = 'https://api.danakcorp.com' -# VITE_BASE_URL = 'http://192.168.1.108:4000' \ No newline at end of file +# VITE_BASE_URL = 'http://192.168.1.113:4000' \ No newline at end of file diff --git a/src/pages/receipts/List.tsx b/src/pages/receipts/List.tsx index facda77..1804a7f 100644 --- a/src/pages/receipts/List.tsx +++ b/src/pages/receipts/List.tsx @@ -100,16 +100,16 @@ const ReceiptsList: FC = () => { label: t('receip.paid'), value: 'PAID' }, - { - icon: , - label: t('receip.overdue'), - value: 'OVERDUE' - }, { icon: , label: t('receip.archive'), value: 'ARCHIVED' }, + { + icon: , + label: t('receip.overdue'), + value: 'OVERDUE' + }, ]} onChange={(value) => setActiveTab(value as InvoiceStatus)} /> diff --git a/src/pages/ticket/CreateTicket.tsx b/src/pages/ticket/CreateTicket.tsx index 5747cc5..df642a3 100644 --- a/src/pages/ticket/CreateTicket.tsx +++ b/src/pages/ticket/CreateTicket.tsx @@ -1,127 +1,241 @@ -import { FC } from 'react' +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 { TickSquare } from 'iconsax-react' +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')}
-
-
-
- {t('ticket.submit_your_message')} -
- -
- - -
- - -
- - -
-
-