diff --git a/src/app/profile/orders/components/OrderTabs.tsx b/src/app/profile/orders/components/OrderTabs.tsx index afed547..5eda0ba 100644 --- a/src/app/profile/orders/components/OrderTabs.tsx +++ b/src/app/profile/orders/components/OrderTabs.tsx @@ -2,14 +2,14 @@ import React from 'react' interface Tab { - key: 'Processing' | 'Delivered' | 'Cancelled' + key: 'Processing' | 'Delivered' | 'Cancelled' | 'Returned' label: string count: number } interface OrderTabsProps { - activeTab: 'Processing' | 'Delivered' | 'Cancelled' - setActiveTab: (tab: 'Processing' | 'Delivered' | 'Cancelled') => void + activeTab: 'Processing' | 'Delivered' | 'Cancelled' | 'Returned' + setActiveTab: (tab: 'Processing' | 'Delivered' | 'Cancelled' | 'Returned') => void tabCounts: { current: number delivered: number @@ -22,7 +22,7 @@ const OrderTabs: React.FC = ({ activeTab, setActiveTab, tabCount const tabs: Tab[] = [ { key: 'Processing', label: 'جاری', count: tabCounts.current }, { key: 'Delivered', label: 'تحویل شده', count: tabCounts.delivered }, - // { key: 'Returned', label: 'مرجوع شده', count: tabCounts.returned }, + { key: 'Returned', label: 'مرجوع شده', count: tabCounts.returned }, { key: 'Cancelled', label: 'لغو شده', count: tabCounts.cancelled } ] diff --git a/src/app/profile/orders/components/ReturnOrderItem.tsx b/src/app/profile/orders/components/ReturnOrderItem.tsx new file mode 100644 index 0000000..fc02f4b --- /dev/null +++ b/src/app/profile/orders/components/ReturnOrderItem.tsx @@ -0,0 +1,80 @@ +'use client' +import React from 'react' +import { ReturnOrder } from '../types/Types' +import moment from 'moment-jalaali' +import { Button } from '@/components/ui/button' +import { useRouter } from 'next/navigation' +import { TruckFast } from 'iconsax-react' +import { PRIMARY_COLOR } from '@/config/const' + +interface ReturnOrderItemProps { + order: ReturnOrder +} + +const ReturnOrderItem: React.FC = ({ order }) => { + const router = useRouter(); + + const getStatusText = (status: string) => { + const statusMap: { [key: string]: string } = { + 'pending': 'در انتظار بررسی', + 'approved': 'تایید شده', + 'rejected': 'رد شده', + 'processing': 'در حال پردازش', + 'completed': 'تکمیل شده' + }; + return statusMap[status.toLowerCase()] || status; + }; + + return ( +
+
+
+
+
+ شماره سفارش: {order.order} +
+
+ مبلغ: {order.total_price.toLocaleString('fa-IR')} تومان +
+
+ +
+
+ وضعیت مرجوعی: {getStatusText(order.status)} +
+
+ تاریخ ثبت مرجوعی: {moment(order.createdAt).format('jYYYY-jMM-jDD')} +
+
+ +
+ +
+
+ +
+
+
+ +
+
+ درخواست مرجوع کالا ثبت شده است +
+
+ شماره مرجوعی: {order._id} +
+
+
+
+
+ ) +} + +export default ReturnOrderItem + diff --git a/src/app/profile/orders/hooks/useOrdersData.ts b/src/app/profile/orders/hooks/useOrdersData.ts index 6c83e6e..b3aed93 100644 --- a/src/app/profile/orders/hooks/useOrdersData.ts +++ b/src/app/profile/orders/hooks/useOrdersData.ts @@ -43,3 +43,10 @@ export const useReturnOrder = () => { mutationFn: api.returnOrder, }); }; + +export const useGetReturnOrder = () => { + return useQuery({ + queryKey: ["returnOrder"], + queryFn: api.getReturnOrder, + }); +}; diff --git a/src/app/profile/orders/page.tsx b/src/app/profile/orders/page.tsx index d21a67e..2aebc23 100644 --- a/src/app/profile/orders/page.tsx +++ b/src/app/profile/orders/page.tsx @@ -3,17 +3,18 @@ import Layout from '@/hoc/Layout' import { NextPage } from 'next' import React, { useState, useMemo } from 'react' import Menu from '../components/Menu' -import { useGetOrders } from './hooks/useOrdersData' -import { Order } from './types/Types' +import { useGetOrders, useGetReturnOrder } from './hooks/useOrdersData' +import { Order, ReturnOrder } from './types/Types' import OrderTabs from './components/OrderTabs' import OrderItem from './components/OrderItem' +import ReturnOrderItem from './components/ReturnOrderItem' const Orders: NextPage = () => { - const [activeTab, setActiveTab] = useState<'Processing' | 'Delivered' | 'Cancelled'>('Processing') + const [activeTab, setActiveTab] = useState<'Processing' | 'Delivered' | 'Cancelled' | 'Returned'>('Processing') const { data: ordersData } = useGetOrders(activeTab); - + const { data: returnOrderData } = useGetReturnOrder(); // محاسبه تعداد سفارشات در هر تب از داده‌های اصلی const tabCounts = useMemo(() => { @@ -61,13 +62,24 @@ const Orders: NextPage = () => { {/* Orders List */}
- {ordersData?.results?.orders.map((order) => ( - - ))} + {activeTab === 'Returned' ? ( + // نمایش سفارشات مرجوعی + returnOrderData?.results?.returnOrders?.map((order: ReturnOrder) => ( + + )) + ) : ( + // نمایش سفارشات عادی + ordersData?.results?.orders?.map((order: Order) => ( + + )) + )}
) diff --git a/src/app/profile/orders/service/Service.ts b/src/app/profile/orders/service/Service.ts index 2b1b59d..7ae70bc 100644 --- a/src/app/profile/orders/service/Service.ts +++ b/src/app/profile/orders/service/Service.ts @@ -6,6 +6,7 @@ import { CancelReasonsResponse, ReturnOrderType, ReturnReasonsResponse, + ReturnOrdersResponse, } from "../types/Types"; export const getOrders = async (activeTab: string): Promise => { @@ -46,3 +47,8 @@ export const returnOrder = async (params: ReturnOrderType) => { const { data } = await axios.post(`/returns/user`, params); return data; }; + +export const getReturnOrder = async (): Promise => { + const { data } = await axios.get(`/returns/user`); + return data; +}; diff --git a/src/app/profile/orders/types/Types.ts b/src/app/profile/orders/types/Types.ts index e8d5fba..2ef182d 100644 --- a/src/app/profile/orders/types/Types.ts +++ b/src/app/profile/orders/types/Types.ts @@ -341,3 +341,21 @@ export interface ReturnOrderType { orderId: number; items: ReturnOrderItem[]; } + +export interface ReturnOrder { + _id: string; + order: number; + user: string; + status: string; + total_price: number; + createdAt: string; + updatedAt: string; +} + +export interface ReturnOrdersResponse { + status: number; + success: boolean; + results: { + returnOrders: ReturnOrder[]; + }; +}