"use client"; import Button from "@/components/button/PrimaryButton"; import { toast } from "@/components/Toast"; import { Skeleton } from "@/components/ui/skeleton"; import Prompt from "@/components/utils/Prompt"; import useToggle from "@/hooks/helpers/useToggle"; import { extractErrorMessage } from "@/lib/func"; import ordersTranslations from "@/locales/fa/orders.json"; import { useQueryClient } from "@tanstack/react-query"; import clsx from "clsx"; import { Clock } from "iconsax-react"; import Image from "next/image"; import { useParams, useRouter } from "next/navigation"; import React from "react"; import { OrderStatus } from "../../checkout/enum/Enum"; import { useCancelOrder, useGetOrderDetail } from "../../checkout/hooks/useOrderData"; const getDeliveryMethodTitle = (method: string) => { switch (method) { case "deliveryCourier": return "ارسال توسط پیک"; case "deliveryCar": return "تحویل به خودرو"; case "pickup": return "تحویل حضوری"; case "dineIn": return "سرو در رستوران"; default: return "روش ارسال"; } }; const getPaymentMethodTitle = (method: string, fallback?: string) => { const methodKey = method as keyof typeof ordersTranslations.paymentMethod; return ordersTranslations.paymentMethod[methodKey] || fallback || "نامشخص"; }; // const getStatusPercentage = (status: string) => { // switch (status) { // case 'new': // case 'pendingPayment': // return 0; // case 'paid': // case 'confirmed': // return 20; // case 'preparing': // return 40; // case 'ready': // return 60; // case 'shipped': // case 'delivering': // return 80; // case 'completed': // case 'delivered': // return 100; // default: // return 0; // } // }; const getStatusText = (status: string): string => { const statusKey = status as keyof typeof ordersTranslations.status; return ordersTranslations.status[statusKey] || "نامشخص"; }; const formatDate = (dateString: string): string => { const date = new Date(dateString); return date.toLocaleDateString("fa-IR", { year: "numeric", month: "long", day: "numeric", }); }; // const formatTime = (dateString: string): string => { // const date = new Date(dateString); // return date.toLocaleTimeString('fa-IR', { // hour: '2-digit', // minute: '2-digit' // }); // }; function OrderTrackingPage() { const { id, name } = useParams(); const router = useRouter(); const queryClient = useQueryClient(); const { state: cancelModal, toggle: toggleCancelModal } = useToggle(); const { data: orderDetail, isLoading } = useGetOrderDetail(id as string); const { mutate: cancelOrder } = useCancelOrder(); const onCancelOrder = (e: React.MouseEvent | null) => { if (!e || !id) return; cancelOrder(id as string, { onSuccess: () => { toggleCancelModal(); queryClient.invalidateQueries({ queryKey: ["order-detail", id] }); toast("سفارش با موفقیت لغو شد", "success"); }, onError: (error) => { toast(extractErrorMessage(error), "error"); }, }); }; return (
{isLoading ? ( <>
) : orderDetail?.data ? ( <>

{getDeliveryMethodTitle(orderDetail.data.deliveryMethod.method)}

زمان سفارش
{formatDate(orderDetail.data.createdAt)} {/* {formatTime(orderDetail.data.createdAt)} */}
زمان آماده‌سازی {orderDetail.data.prepareTime ? `${orderDetail.data.prepareTime.toLocaleString("fa-IR")} دقیقه` : "-"}
نوع ارسال {orderDetail.data?.deliveryMethod?.description}
{orderDetail.data.carAddress && (
اطلاعات خودرو
{orderDetail.data.carAddress.carModel} {orderDetail.data.carAddress.carColor} - پلاک: {orderDetail.data.carAddress.plateNumber}
)}
شماره سفارش #{orderDetail.data.orderNumber}
وضعیت سفارش {getStatusText(orderDetail.data.status)}
{orderDetail.data.tableNumber && (
شماره میز #{orderDetail.data.tableNumber}
)} {orderDetail.data.userAddress && (
آدرس تحویل
{orderDetail.data.userAddress.address}
)} {orderDetail.data.paymentMethod && (
نوع پرداخت {getPaymentMethodTitle(orderDetail.data.paymentMethod.method, orderDetail.data.paymentMethod.description)}
)} {orderDetail.data.payments?.[0]?.description?.trim() && (
توضیحات پرداخت
{orderDetail.data.payments[0].description}
)} {orderDetail.data.payments?.[0]?.attachments?.length ? (
پیوست پرداخت
{orderDetail.data.payments[0].attachments.map((attachment, index) => (
{`پیوست
))}
) : null}
مجموع سفارش {orderDetail.data.total.toLocaleString("fa-IR")} تومان
) : (
اطلاعات سفارش یافت نشد
)}
); } export default OrderTrackingPage;