"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 => (
))}
{/* متتبع الطلب النشط */}
{activeOrder ? (
الطلب الحالي
{activeOrder.id}
{statusLabel(activeOrder.status)}
) : (
)}
{/* جدول الطلبات السابقة */}
{pastOrders.length > 0 && (
سجل الطلبات
{pastOrders.length} طلبات
{["رقم الطلب", "التاريخ", "الوصف", "الحالة", "المبلغ"].map(h => (
| {h} |
))}
{pastOrders.map((order, i) => (
|
{order.id}
|
{fmtDate(order.createdAt)} |
{order.description} |
{statusLabel(order.status)}
|
{fmtAmount(order.totalAmount)}
|
))}
)}
>
)}
{/* مسح الجلسة */}
);
};
export default DashboardStep;