ticket section

This commit is contained in:
hamid zarghami
2026-02-23 15:15:34 +03:30
parent 4ba62b39f9
commit 1c8e5aa849
8 changed files with 33 additions and 28 deletions
+2 -2
View File
@@ -2,10 +2,10 @@ import * as api from "../service/AdminService";
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
import type { CreateAdminType } from "../types/Types";
export const useGetAdmins = (page: number) => {
export const useGetAdmins = (page: number = 1, limit: number = 10) => {
return useQuery({
queryKey: ["admins", page],
queryFn: () => api.getAdmins(page),
queryFn: () => api.getAdmins(page, limit),
});
};
+2 -2
View File
@@ -6,9 +6,9 @@ import type {
AdminDetailResponseType,
} from "../types/Types";
export const getAdmins = async (page: number) => {
export const getAdmins = async (page: number, limit: number = 10) => {
const { data } = await axios.get<AdminsType>("/admin/admins", {
params: { page },
params: { page, limit },
});
return data;
};
+19
View File
@@ -15,6 +15,7 @@ import { useNavigate, useSearchParams } from 'react-router-dom'
import { toast } from 'react-toastify'
import { Paths } from '@/config/Paths'
import { extractErrorMessage } from '@/config/func'
import { useGetAdmins } from '../admin/hooks/useAdminData'
const getInitialValues = (invoiceItemId: string | null): ConvertToOrderItemType => ({
invoiceItemId: invoiceItemId ?? '',
@@ -25,6 +26,7 @@ const getInitialValues = (invoiceItemId: string | null): ConvertToOrderItemType
title: '',
description: '',
attachments: [],
designerId: ''
})
const getValidationSchema = (invoiceItemId: string | null) =>
@@ -36,6 +38,7 @@ const getValidationSchema = (invoiceItemId: string | null) =>
estimatedDays: Yup.number().required('تخمین روز اجباری است.').min(0, 'باید عدد مثبت باشد'),
title: Yup.string().required('عنوان اجباری است.'),
description: Yup.string(),
designerId: Yup.string().required('این فیلد اجباری است')
})
const ConvertToOrders: FC = () => {
@@ -48,6 +51,7 @@ const ConvertToOrders: FC = () => {
const { data: categories } = useGetCategory()
const { data: users } = useGetUsers()
const { data: products } = useGetProducts()
const { data: admins } = useGetAdmins(1, 50)
const { mutate: converToOrder, isPending } = useConverToOrder()
@@ -133,6 +137,21 @@ const ConvertToOrders: FC = () => {
<div className="rowTwoInput">
<Select
items={admins?.data?.map((item) => {
return {
label: item.firstName + ' ' + item.lastName,
value: item.id
}
}) || []}
label="طراح"
placeholder="انتخاب طراح"
{...formik.getFieldProps('designerId')}
error_text={
formik.touched.designerId && formik.errors.designerId ? formik.errors.designerId : ''
}
/>
<Select
items={
categories?.data?.map((item) => ({
+3 -18
View File
@@ -7,24 +7,21 @@ import { useVoiceRecorder } from '@/hooks/useVoiceRecorder'
import { Play, Pause } from 'iconsax-react'
import { useMultiUpload, useSingleUpload } from '@/pages/uploader/hooks/useUploader'
import type { AddTicketType } from '../types/Types'
import { useAddTicket, useGetOrderDetails, useGetTickets } from '../hooks/useOrderData'
import { useAddTicket, useGetTickets } from '../hooks/useOrderData'
import { useParams } from 'react-router-dom'
import { toast } from '@/shared/toast'
import { extractErrorMessage, getFileNameAndExtensionFromUrl } from '@/config/func'
import VoicePlayer from '@/components/VoicePlayer'
import Select from '@/components/Select'
const TicketSection: FC = () => {
const { id } = useParams()
const [itemId, setItemId] = useState<string>('')
const { data: order } = useGetOrderDetails(id!)
const [message, setMessage] = useState('')
const [files, setFiles] = useState<File[]>([])
const addTicket = useAddTicket()
const { data, refetch } = useGetTickets(itemId)
const { data, refetch } = useGetTickets(id!)
const singleUpload = useSingleUpload()
const multiUpload = useMultiUpload()
@@ -69,7 +66,7 @@ const TicketSection: FC = () => {
})
}
addTicket.mutate({ orderId: itemId, params: params }, {
addTicket.mutate({ orderId: id!, params: params }, {
onSuccess: () => {
toast('پیام شما با موفقیت ارسال شد')
refetch()
@@ -99,18 +96,6 @@ const TicketSection: FC = () => {
placeholder="عباس حسینی"
readOnly
/>
<Select
items={order?.data?.items?.map((item) => {
return {
label: item.product?.title,
value: item.id + ''
}
}) || []}
onChange={(e) => setItemId(e.target.value)}
label='انتخاب محصول'
placeholder='انتخاب'
/>
</div>
{
data?.data?.map((item) => {
+2 -5
View File
@@ -43,16 +43,13 @@ export const getOrderDetail = async (id: string) => {
export const getTickets = async (orderId: string) => {
const { data } = await axios.get<TicketsResponseType>(
`/admin/ticket/order/${orderId}`,
`/admin/chat/ref/${orderId}`,
);
return data;
};
export const addTicket = async (ticketId: string, params: AddTicketType) => {
const { data } = await axios.post(
`/admin/ticket/order/item/${ticketId}`,
params,
);
const { data } = await axios.post(`/admin/chat/ref/${ticketId}`, params);
return data;
};
+1
View File
@@ -206,6 +206,7 @@ export type ConvertToOrderItemType = {
title: string;
description?: string;
attachments: string[];
designerId: string;
};
export type OrderPrintFieldType = {
+3
View File
@@ -5,6 +5,7 @@ import RequestItem from './components/RequestItem'
import { Paths } from '@/config/Paths'
import Button from '@/components/Button'
import { TickSquare } from 'iconsax-react'
import TicketSection from '../order/components/TicketSection'
const RequestDetail: FC = () => {
const { id } = useParams()
@@ -38,6 +39,8 @@ const RequestDetail: FC = () => {
))}
</div>
</div>
<TicketSection />
</div>
)
}
+1 -1
View File
@@ -5,7 +5,7 @@ import { Route, Routes } from 'react-router-dom'
const AuthRouter: FC = () => {
return (
<Routes>
<Route path="/login" element={<Login />} />
<Route path="*" element={<Login />} />
</Routes>
)
}