"use client"; import React, { useState, useEffect, type FC } from "react"; import { fmtDate, fmtAmount, statusColor, statusLabel, clearSession, type ClientSession, type OrderStatus, } from "@/utils/helperFun"; import { Spinner } from "../UI"; const API_BASE = process.env.NEXT_PUBLIC_API_BASE_URL!; // ─── Types ─────────────────────────────────── export interface Order { id: string; createdAt: string; status: OrderStatus; totalAmount: number; description: string; } // ─── Order Tracker ─────────────────────────── const STATUS_STEPS: OrderStatus[] = ["CREATED", "IN_TRANSIT", "DELIVERED"]; const STEP_LABELS = ["تم الإنشاء", "قيد التوصيل", "تم التسليم"]; const STEP_ICONS = [ , , , ]; const OrderTracker: FC<{ status: OrderStatus }> = ({ status }) => { const idx = STATUS_STEPS.indexOf(status === "CANCELLED" ? "CREATED" : status); return (
{STATUS_STEPS.map((s, i) => (
{STEP_ICONS[i]}
{STEP_LABELS[i]}
{i < STATUS_STEPS.length - 1 && (
)} ))}
); }; // ─── DashboardStep ─────────────────────────── interface DashboardStepProps { session: ClientSession; } const DashboardStep: FC = ({ session }) => { const [orders, setOrders] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(""); // جلب الطلبات من الـ API useEffect(() => { (async () => { try { const res = await fetch(`${API_BASE}/client/${session.id}/orders`); const data = await res.json(); if (!res.ok) throw new Error(data.message ?? "فشل جلب الطلبات"); // الـ API يُرجع: { orders: [...] } أو مصفوفة مباشرة const list: Order[] = Array.isArray(data) ? data : (data.orders ?? []); setOrders(list); } catch (err: unknown) { setError(err instanceof Error ? err.message : "تعذّر تحميل الطلبات"); } finally { setLoading(false); } })(); }, [session.id]); // أحدث طلب نشط (CREATED أو IN_TRANSIT) const activeOrder = orders.find( o => o.status === "CREATED" || o.status === "IN_TRANSIT" ); const pastOrders = orders.filter(o => o !== activeOrder); const summary = { total: orders.length, delivered: orders.filter(o => o.status === "DELIVERED").length, pending: orders.filter(o => o.status === "CREATED" || o.status === "IN_TRANSIT").length, }; return (
{/* الرأس */}

لوحة الطلبات

مرحبًا بعودتك، {session.name}

نشط
{/* حالة التحميل أو الخطأ */} {loading ? (

جارٍ تحميل الطلبات…

) : error ? (

{error}

) : ( <> {/* إحصائيات */}
{[ { label: "إجمالي الطلبات", value: summary.total, color: "text-[#111827]" }, { label: "مُسلَّمة", value: summary.delivered, color: "text-[#34A853]" }, { label: "قيد التنفيذ", value: summary.pending, color: "text-[#1A73E8]" }, ].map(s => (

{s.label}

{s.value}

))}
{/* متتبع الطلب النشط */} {activeOrder ? (

الطلب الحالي

{activeOrder.id}

{statusLabel(activeOrder.status)}
) : (

لا يوجد طلب نشط حاليًا.

)} {/* جدول الطلبات السابقة */} {pastOrders.length > 0 && (

سجل الطلبات

{pastOrders.length} طلبات
{["رقم الطلب", "التاريخ", "الوصف", "الحالة", "المبلغ"].map(h => ( ))} {pastOrders.map((order, i) => ( ))}
{h}
{order.id} {fmtDate(order.createdAt)} {order.description} {statusLabel(order.status)} {fmtAmount(order.totalAmount)}
)} )} {/* مسح الجلسة */}
); }; export default DashboardStep;