track code
This commit is contained in:
@@ -5,11 +5,14 @@ import Error from '../../components/Error'
|
|||||||
import PaginationUi from '../../components/PaginationUi'
|
import PaginationUi from '../../components/PaginationUi'
|
||||||
import PageTitle from '../../components/PageTitle'
|
import PageTitle from '../../components/PageTitle'
|
||||||
import Td from '../../components/Td'
|
import Td from '../../components/Td'
|
||||||
import { Eye } from 'iconsax-react'
|
import { Eye, Add } from 'iconsax-react'
|
||||||
import { Link } from 'react-router-dom'
|
import { Link } from 'react-router-dom'
|
||||||
import { type NativeOrderType } from '@/pages/orders/types/Types'
|
import { type NativeOrderType } from '@/pages/orders/types/Types'
|
||||||
import { useGetNativeOrders } from '@/pages/orders/hooks/useOrderData'
|
import { useGetNativeOrders } from '@/pages/orders/hooks/useOrderData'
|
||||||
import { Pages } from '@/config/Pages'
|
import { Pages } from '@/config/Pages'
|
||||||
|
import Button from '@/components/Button'
|
||||||
|
import AddTrackCodeModal from '@/pages/orders/components/AddTrackCodeModal'
|
||||||
|
import { useQueryClient } from '@tanstack/react-query'
|
||||||
|
|
||||||
const STATUS_CONFIG = {
|
const STATUS_CONFIG = {
|
||||||
Cancelled: { label: 'کنسل شده', color: 'bg-red-100 text-red-800' },
|
Cancelled: { label: 'کنسل شده', color: 'bg-red-100 text-red-800' },
|
||||||
@@ -30,6 +33,9 @@ const Native: FC = () => {
|
|||||||
const [searchParams] = useSearchParams()
|
const [searchParams] = useSearchParams()
|
||||||
const status = searchParams.get('status') || ''
|
const status = searchParams.get('status') || ''
|
||||||
const [currentPage, setCurrentPage] = useState(1)
|
const [currentPage, setCurrentPage] = useState(1)
|
||||||
|
const [openTrackModal, setOpenTrackModal] = useState(false)
|
||||||
|
const [selectedOrderId, setSelectedOrderId] = useState<string | null>(null)
|
||||||
|
const queryClient = useQueryClient()
|
||||||
|
|
||||||
const { data, isLoading, error } = useGetNativeOrders(currentPage, status === 'Admin' ? undefined : status)
|
const { data, isLoading, error } = useGetNativeOrders(currentPage, status === 'Admin' ? undefined : status)
|
||||||
|
|
||||||
@@ -96,6 +102,22 @@ const Native: FC = () => {
|
|||||||
<Link to={`${Pages.orders.detailUser}${order._id}`}>
|
<Link to={`${Pages.orders.detailUser}${order._id}`}>
|
||||||
<Eye color='#8C90A3' size={16} className="cursor-pointer hover:text-blue-500 transition-colors" />
|
<Eye color='#8C90A3' size={16} className="cursor-pointer hover:text-blue-500 transition-colors" />
|
||||||
</Link>
|
</Link>
|
||||||
|
{order.orderStatus === 'process_by_sellers' && (
|
||||||
|
<Button
|
||||||
|
size='sm'
|
||||||
|
variant='outline'
|
||||||
|
className='!px-2 !py-1 w-fit'
|
||||||
|
onClick={() => {
|
||||||
|
setSelectedOrderId(order._id.toString())
|
||||||
|
setOpenTrackModal(true)
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<span className='flex items-center gap-1'>
|
||||||
|
<Add color='#8C90A3' size={16} />
|
||||||
|
افزودن کد رهگیری
|
||||||
|
</span>
|
||||||
|
</Button>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
</Td>
|
</Td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -135,6 +157,15 @@ const Native: FC = () => {
|
|||||||
onPageChange={setCurrentPage}
|
onPageChange={setCurrentPage}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
|
<AddTrackCodeModal
|
||||||
|
open={openTrackModal}
|
||||||
|
onClose={() => setOpenTrackModal(false)}
|
||||||
|
orderId={selectedOrderId}
|
||||||
|
onSuccess={() => {
|
||||||
|
queryClient.invalidateQueries({ queryKey: ['orders'] })
|
||||||
|
}}
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,86 @@
|
|||||||
|
import { type FC, useState } from 'react'
|
||||||
|
import DefaulModal from '@/components/DefaulModal'
|
||||||
|
import Input from '@/components/Input'
|
||||||
|
import DatePicker from '@/components/DatePicker'
|
||||||
|
import Button from '@/components/Button'
|
||||||
|
import { useAddTrackCode } from '@/pages/orders/hooks/useOrderData'
|
||||||
|
import type { AddTrackCodeType } from '@/pages/orders/types/ReturnTypes'
|
||||||
|
|
||||||
|
type Props = {
|
||||||
|
open: boolean
|
||||||
|
onClose: () => void
|
||||||
|
orderId: string | null
|
||||||
|
onSuccess?: () => void
|
||||||
|
}
|
||||||
|
|
||||||
|
const AddTrackCodeModal: FC<Props> = ({ open, onClose, orderId, onSuccess }) => {
|
||||||
|
const [trackCode, setTrackCode] = useState('')
|
||||||
|
const [postingDate, setPostingDate] = useState('')
|
||||||
|
const [postingReceipt, setPostingReceipt] = useState('')
|
||||||
|
|
||||||
|
const { mutateAsync, isPending } = useAddTrackCode()
|
||||||
|
|
||||||
|
const handleSubmit = async () => {
|
||||||
|
if (!orderId) return
|
||||||
|
if (!trackCode || !postingDate) return
|
||||||
|
|
||||||
|
const payload: AddTrackCodeType = {
|
||||||
|
orderId,
|
||||||
|
trackCode,
|
||||||
|
postingDate,
|
||||||
|
postingReceipt,
|
||||||
|
}
|
||||||
|
|
||||||
|
await mutateAsync(payload)
|
||||||
|
setTrackCode('')
|
||||||
|
setPostingDate('')
|
||||||
|
setPostingReceipt('')
|
||||||
|
onClose()
|
||||||
|
if (onSuccess) {
|
||||||
|
onSuccess()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<DefaulModal open={open} close={onClose} isHeader title_header='افزودن کد رهگیری' width={520}>
|
||||||
|
<div className='space-y-4 mt-4 w-[400px]'>
|
||||||
|
|
||||||
|
<DatePicker
|
||||||
|
label='تاریخ ارسال'
|
||||||
|
placeholder='انتخاب تاریخ'
|
||||||
|
defaulValue={postingDate}
|
||||||
|
onChange={(val) => setPostingDate(val)}
|
||||||
|
/>
|
||||||
|
|
||||||
|
<Input
|
||||||
|
label='کد رهگیری'
|
||||||
|
placeholder='مثال: 1234567890'
|
||||||
|
value={trackCode}
|
||||||
|
onChange={(e) => setTrackCode(e.target.value)}
|
||||||
|
/>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<Input
|
||||||
|
label='شماره رسید پست (اختیاری)'
|
||||||
|
placeholder='مثال: 98-001-ABC'
|
||||||
|
value={postingReceipt}
|
||||||
|
onChange={(e) => setPostingReceipt(e.target.value)}
|
||||||
|
/>
|
||||||
|
|
||||||
|
<div className='flex items-center gap-3 pt-2'>
|
||||||
|
<Button variant='outline' onClick={onClose} disabled={isPending}>
|
||||||
|
انصراف
|
||||||
|
</Button>
|
||||||
|
<Button onClick={handleSubmit} disabled={!trackCode || !postingDate || isPending}>
|
||||||
|
ثبت
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</DefaulModal>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export default AddTrackCodeModal
|
||||||
|
|
||||||
|
|
||||||
@@ -78,3 +78,9 @@ export const useGetOrderReturns = (page: number = 1) => {
|
|||||||
queryFn: () => api.getOrderReturns(page),
|
queryFn: () => api.getOrderReturns(page),
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const useAddTrackCode = () => {
|
||||||
|
return useMutation({
|
||||||
|
mutationFn: api.addTrackCode,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import axios from "../../../config/axios";
|
import axios from "../../../config/axios";
|
||||||
|
import type { AddTrackCodeType } from "../types/ReturnTypes";
|
||||||
import type {
|
import type {
|
||||||
CancelReasonsResponseType,
|
CancelReasonsResponseType,
|
||||||
CreateCancelReasonType,
|
CreateCancelReasonType,
|
||||||
@@ -77,3 +78,11 @@ export const getOrderReturns = async (page: number = 1) => {
|
|||||||
});
|
});
|
||||||
return data;
|
return data;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const addTrackCode = async (params: AddTrackCodeType) => {
|
||||||
|
const { data } = await axios.post(
|
||||||
|
`/order/${params.orderId}/admin/track-code`,
|
||||||
|
params
|
||||||
|
);
|
||||||
|
return data;
|
||||||
|
};
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
import type { PagerType, ShipmentAddressType } from "@/pages/orders/types/Types";
|
import type {
|
||||||
|
PagerType,
|
||||||
|
ShipmentAddressType,
|
||||||
|
} from "@/pages/orders/types/Types";
|
||||||
|
|
||||||
export type ReturnOrderItemType = {
|
export type ReturnOrderItemType = {
|
||||||
quantity: number;
|
quantity: number;
|
||||||
@@ -41,3 +44,10 @@ export type ReturnOrdersResponseType = {
|
|||||||
returnsOrders: ReturnOrderType[];
|
returnsOrders: ReturnOrderType[];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export type AddTrackCodeType = {
|
||||||
|
trackCode: string;
|
||||||
|
postingDate: string;
|
||||||
|
postingReceipt: string;
|
||||||
|
orderId: string;
|
||||||
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user