'use client'; import Button from '@/components/button/PrimaryButton'; import CalendarIcon from '@/components/icons/CalendarIcon'; import LocationPinIcon from '@/components/icons/LocationPinIcon'; import TabContainer from '@/components/tab/TabContainer' import { TabHeader } from '@/components/tab/TabHeader'; import { Receipt2, ReceiptItem, DocumentText, TickCircle } from 'iconsax-react'; import Image from 'next/image'; import Link from 'next/link'; import React, { useMemo, useState } from 'react' import { useTranslation } from 'react-i18next'; import { useGetOrders } from './hooks/useHistoryData'; import { HistoryOrderItem } from './types/Types'; import { glassSurface } from '@/lib/styles/glassSurface'; const fallbackImage = '/assets/images/food-preview.png'; const getFoodImage = (images: string[] | string | null | undefined): string => { if (!images) { return fallbackImage; } if (Array.isArray(images)) { return images.length > 0 ? images[0] : fallbackImage; } if (typeof images === 'string') { return images; } return fallbackImage; }; const formatDate = (dateString: string): string => { const date = new Date(dateString); return date.toLocaleDateString('fa-IR', { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' }); }; const getStatusColor = (status: string): string => { const statusMap: Record = { 'pendingPayment': 'text-yellow-600 dark:text-yellow-400', 'paid': 'text-green-600 dark:text-green-400', 'preparing': 'text-blue-600 dark:text-blue-400', 'deliveredToWaiter': 'text-purple-600 dark:text-purple-400', 'deliveredToReceptionist': 'text-indigo-600 dark:text-indigo-400', 'shipped': 'text-cyan-600 dark:text-cyan-400', 'completed': 'text-green-600 dark:text-green-400', 'canceled': 'text-red-600 dark:text-red-400', 'cancelled': 'text-red-600 dark:text-red-400', }; return statusMap[status] || 'text-gray-600 dark:text-gray-400'; }; function OrdersIndex() { const { t } = useTranslation('orders'); const [selectedTab, setSelectedTab] = useState(0); const status = selectedTab === 0 ? 'current' : 'old'; const { data: ordersData } = useGetOrders(status); const orders = useMemo(() => ordersData?.data || [], [ordersData?.data]); const categories = [ { id: 0, title: t('Tab.ActiveOrders'), icon: }, { id: 1, title: t('Tab.PreviousOrders'), icon: } ] const firstTab = () => { if (orders.length === 0) { return [
سفارش فعالی وجود ندارد
]; } return orders.map((order) => { const address = order.userAddress?.address || 'آدرس ثبت نشده'; const formattedDate = formatDate(order.createdAt); const formattedPrice = order.total.toLocaleString('fa-IR'); const items: HistoryOrderItem[] = order.items || []; return (

#{order.orderNumber}

{t(`status.${order.status}`)}

{address}

{formattedDate}


{items.map((item) => { const imageUrl = getFoodImage(item.food.images); const foodName = item.food.title || 'بدون نام'; const itemTotalPrice = (item.totalPrice || item.unitPrice * item.quantity).toLocaleString('fa-IR'); return (
{foodName}

{foodName}

{item.quantity}x {itemTotalPrice} T
); })}
{formattedPrice} T
) }) } const secondTab = () => { if (orders.length === 0) { return [
سفارش قبلی وجود ندارد
]; } return orders.map((order) => { const address = order.userAddress?.address || 'آدرس ثبت نشده'; const formattedDate = formatDate(order.createdAt); const formattedPrice = order.total.toLocaleString('fa-IR'); const items: HistoryOrderItem[] = order.items || []; return (

#{order.orderNumber}

{t(`status.${order.status}`)}

{address}

{formattedDate}


{items.map((item) => { const imageUrl = getFoodImage(item.food.images); const foodName = item.food.title || 'بدون نام'; const itemTotalPrice = (item.totalPrice || item.unitPrice * item.quantity).toLocaleString('fa-IR'); return (
{foodName}

{foodName}

{item.quantity}x {itemTotalPrice} T
); })}
{formattedPrice} T
) }) } return (
{firstTab()}
} title={categories[0].title} icon={categories[0].icon} /> {secondTab()}} title={categories[1].title} icon={categories[1].icon} /> ) } export default OrdersIndex