ticket section
This commit is contained in:
@@ -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),
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
@@ -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) => ({
|
||||
|
||||
@@ -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) => {
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
@@ -206,6 +206,7 @@ export type ConvertToOrderItemType = {
|
||||
title: string;
|
||||
description?: string;
|
||||
attachments: string[];
|
||||
designerId: string;
|
||||
};
|
||||
|
||||
export type OrderPrintFieldType = {
|
||||
|
||||
@@ -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>
|
||||
)
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user