"use client"; import { ArrowRight, Check, Package, Search, Truck } from "lucide-react"; import { useState } from "react"; import { AspectRatio } from "@/components/ui/aspect-ratio"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Separator } from "@/components/ui/separator"; import { cn } from "@/lib/utils"; type OrderStatus = "confirmed" | "processing" | "shipped" | "delivered"; interface OrderItem { name: string; designer: string; image: string; price: number; size?: string; color?: string; } interface Order { id: string; orderNumber: string; /** ISO 8601 date (YYYY-MM-DD) */ orderDate: string; status: OrderStatus; total: number; items: OrderItem[]; trackingNumber?: string; /** ISO 8601 date range for estimated delivery */ estimatedDeliveryFrom?: string; estimatedDeliveryTo?: string; } const DEFAULT_ORDERS: Order[] = [ { id: "1", orderNumber: "SB-2025-00847", orderDate: "2025-01-15", status: "shipped", total: 2450000.0, trackingNumber: "1Z999AA10123456784", estimatedDeliveryFrom: "2025-01-20", estimatedDeliveryTo: "2025-01-22", items: [ { name: "صندلی چرمی مجسمه‌وار", designer: "آتلیه کالکشن", image: "/block-media/shadcnblocks/block/ecommerce/furniture/Modern-Leather-Sofa-1.png", price: 1890000.0, color: "کانیاک", }, { name: "آویز شیشه‌دمیده دست‌ساز", designer: "استودیو لومیِر", image: "/block-media/shadcnblocks/block/ecommerce/furniture/Modern-Artistic-Lamp-1.png", price: 560000.0, color: "کهربایی", }, ], }, { id: "2", orderNumber: "SB-2025-00831", orderDate: "2025-01-08", status: "delivered", total: 3200000.0, items: [ { name: "میز کنسول گردو", designer: "نوردیک کرفت", image: "/block-media/shadcnblocks/block/ecommerce/furniture/Minimalist-Wooden-Sideboard-1.png", price: 2400000.0, size: "۱۶۰ × ۴۰ × ۸۵ سانتی‌متر", }, { name: "گلدان مجسمه‌ای سرامیکی", designer: "کالکتیو هنرمند", image: "/block-media/shadcnblocks/block/ecommerce/furniture/Modern-Artistic-Lamp-2.png", price: 420000.0, color: "سفید مات", }, { name: "پتو پشمی کتان", designer: "مزون تکستایل", image: "/block-media/shadcnblocks/block/ecommerce/furniture/Minimalist-Loveseat-1.png", price: 380000.0, color: "طبیعی", }, ], }, { id: "3", orderNumber: "SB-2024-00798", orderDate: "2024-12-28", status: "delivered", total: 1650000.0, items: [ { name: "چراغ ایستاده مینیمال", designer: "لایت اند فرم", image: "/block-media/shadcnblocks/block/ecommerce/furniture/Modern-Wooden-Cabinet-1.png", price: 1650000.0, color: "برنجی برس‌خورده", }, ], }, ]; const formatCurrency = (value: number) => `${value.toLocaleString("fa-IR")} ریال`; const dateFormatter = new Intl.DateTimeFormat("fa-IR", { year: "numeric", month: "long", day: "numeric", }); const formatOrderDate = (isoDate: string) => dateFormatter.format(new Date(isoDate + "T12:00:00")); const formatDeliveryRange = (from: string, to: string) => `${formatOrderDate(from)} تا ${formatOrderDate(to)}`; const statusSteps: { key: OrderStatus; label: string; icon: typeof Check }[] = [ { key: "confirmed", label: "تأیید‌شده", icon: Check }, { key: "processing", label: "در حال پردازش", icon: Package }, { key: "shipped", label: "ارسال‌شده", icon: Truck }, { key: "delivered", label: "تحویل‌شده", icon: Check }, ]; const getStatusIndex = (status: OrderStatus) => { return statusSteps.findIndex((s) => s.key === status); }; interface OrderHistory4Props { orders?: Order[]; className?: string; } const OrderHistory4 = ({ orders = DEFAULT_ORDERS, className, }: OrderHistory4Props) => { const [searchQuery, setSearchQuery] = useState(""); const filteredOrders = orders.filter((order) => { if (searchQuery === "") return true; const query = searchQuery.toLowerCase(); return ( order.orderNumber.toLowerCase().includes(query) || order.items.some( (item) => item.name.toLowerCase().includes(query) || item.designer.toLowerCase().includes(query), ) ); }); return (

حساب کاربری

تاریخچه سفارش‌ها

{filteredOrders.map((order) => { const currentStatusIndex = getStatusIndex(order.status); return (

{order.orderNumber}

{formatOrderDate(order.orderDate)} {formatCurrency(order.total)}
{order.status === "delivered" ? ( تحویل‌شده ) : ( )}
{order.status !== "delivered" && (
{statusSteps.map((step, index) => { const isCompleted = index <= currentStatusIndex; const isCurrent = index === currentStatusIndex; const StepIcon = step.icon; return (
{step.label}
{index < statusSteps.length - 1 && (
)}
); })}
{order.estimatedDeliveryFrom && order.estimatedDeliveryTo && (

تحویل تقریبی:{" "} {formatDeliveryRange( order.estimatedDeliveryFrom, order.estimatedDeliveryTo, )}

)}
)}
{order.items.map((item, index) => (
{item.name}

{item.designer}

{item.name}

{item.color && {item.color}} {item.size && {item.size}} {(item.color || item.size) && ( )} {formatCurrency(item.price)}
))}
{order.status === "delivered" && ( )}
{order.trackingNumber && order.status !== "delivered" && (

رهگیری:{" "} {order.trackingNumber}

)}
); })}
{filteredOrders.length === 0 && (

سفارشی با عبارت «{searchQuery}» یافت نشد.

)}
); }; export { OrderHistory4 };