diff --git a/.env b/.env index d884c74..f945938 100644 --- a/.env +++ b/.env @@ -1,4 +1,4 @@ # VITE_API_BASE_URL = 'https://negareh-api.dev.danakcorp.com' -VITE_API_BASE_URL = 'http://10.29.35.88:4000' +VITE_API_BASE_URL = 'http://10.39.173.88:4000' VITE_TOKEN_NAME = 'negareh_at' VITE_REFRESH_TOKEN_NAME = 'negareh_art' diff --git a/src/config/Paths.tsx b/src/config/Paths.tsx index b691bcc..9cc6c6c 100644 --- a/src/config/Paths.tsx +++ b/src/config/Paths.tsx @@ -60,6 +60,7 @@ export const Paths = { orderDetails: '/order/', tickets: { list: '/tickets', + detail: '/tickets/', }, auth: { login: '/auth/login', diff --git a/src/locale/fa.ts b/src/locale/fa.ts index b798cf7..1f1e786 100644 --- a/src/locale/fa.ts +++ b/src/locale/fa.ts @@ -69,4 +69,37 @@ export const fa = { errors: { required: "این فیلد الزامی است", }, + ticket: { + ticket_number: "شماره تیکت", + info_ticket: "اطلاعات تیکت", + subject: "موضوع", + select_your_service: "سرویس", + user_name: "نام کاربر", + customer: "کاربر", + expert: "پشتیبانی", + your_description: "متن پاسخ به کاربر", + attachment: "پیوست", + send: "ارسال", + send_answer: "ارسال پاسخ", + close_ticket: "بستن تیکت", + date: "تاریخ", + asignto: "واگذار شده به", + category: "دسته‌بندی", + priority: "اولویت", + low: "کم", + medium: "متوسط", + high: "بالا", + update_sms: "در صورت به‌روزرسانی، از طریق پیامک مطلع می‌شوید.", + PENDING: "در حال بررسی", + pending: "در حال بررسی", + ANSWERED: "پاسخ داده شده", + answered: "پاسخ داده شده", + CLOSED: "بسته شده", + closed: "بسته شده", + status_unknown: "نامشخص", + new_ticket: "تیکت جدید", + submit_your_message: "پیام خود را ثبت کنید", + enter_your_subject: "موضوع را وارد کنید", + title_hint: "راهنما", + }, }; diff --git a/src/pages/ticket/CreateTicket.tsx b/src/pages/ticket/CreateTicket.tsx new file mode 100644 index 0000000..370f43b --- /dev/null +++ b/src/pages/ticket/CreateTicket.tsx @@ -0,0 +1,134 @@ +import { type FC, useState } from 'react' +import Input from '../../components/Input' +import UploadBox from '../../components/UploadBox' +import Button from '../../components/Button' +import { TickCircle, TickSquare } from 'iconsax-react' +import { useCreateOrReplyTicket } from './hooks/useTicketData' +import { useNavigate } from 'react-router-dom' +import { fa } from '@/locale/fa' +import Textarea from '@/components/Textarea' +import { Paths } from '@/config/Paths' + +const CreateTicket: FC = () => { + const t = (key: string): string => { + const keys = key.split('.'); + let value: unknown = fa; + for (const k of keys) { + value = (value as Record)?.[k]; + } + return (value as string) || key; + } + const navigate = useNavigate() + const [subject, setSubject] = useState('') + const [content, setContent] = useState('') + const [files, setFiles] = useState([]) + + const createTicket = useCreateOrReplyTicket() + + const handleSubmit = () => { + if (!subject.trim() || !content.trim()) return + createTicket.mutate( + { + subject: subject.trim(), + content: content.trim(), + attachments: files.length ? files.map(() => ({})) : [], + }, + { + onSuccess: () => navigate(Paths.tickets.list), + onError: (err: unknown) => console.error(err), + } + ) + } + + + return ( +
+
+ {t('ticket.new_ticket')} +
+ +
+
+
+ {t('ticket.submit_your_message')} +
+ +
+ setSubject(e.target.value)} + /> +
+ +
+