"use client"; import { useEffect, useState } from "react"; import { Alert, Button, Modal, Spinner } from "../UI"; import { getStoredToken } from "@/src/lib/auth"; import { tripService } from "@/src/services/trip.service"; import { TRIP_STATUS_MAP } from "@/src/types/trip"; import type { Trip } from "@/src/types/trip"; interface TripDetailModalProps { tripId: string; onClose: () => void; } // ── small helper components ─────────────────────────────────────────────────── // (No shared-UI equivalents — purpose-built layouts, not generic controls.) function DetailRow({ label, value }: { label: string; value?: string | null }) { return (
{label} {value || "—"}
); } function StatusBadge({ status }: { status: Trip["status"] }) { const s = TRIP_STATUS_MAP[status]; return ( {s.label} ); } // ── main component ──────────────────────────────────────────────────────────── export function TripDetailModal({ tripId, onClose }: TripDetailModalProps) { const [trip, setTrip] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); // fetch trip details on mount useEffect(() => { let cancelled = false; (async () => { try { const token = getStoredToken(); const data = await tripService.getById(tripId, token); if (!cancelled) setTrip(data); } catch { if (!cancelled) setError("تعذّر تحميل بيانات الرحلة. يرجى المحاولة لاحقاً."); } finally { if (!cancelled) setLoading(false); } })(); return () => { cancelled = true; }; }, [tripId]); // ── helpers ─────────────────────────────────────────────────────────────── const fmt = (iso?: string | null) => iso ? new Date(iso).toLocaleDateString("ar-SA", { year: "numeric", month: "long", day: "numeric", hour: "2-digit", minute: "2-digit" }) : null; const cash = (v?: number | string | null) => v != null ? `${Number(v).toLocaleString("ar-SA")} ر.س` : null; // ── render ──────────────────────────────────────────────────────────────── return ( إغلاق } > {/* loading */} {loading && (
جارٍ التحميل…
)} {/* error */} {!loading && error && } {/* content */} {!loading && trip && (
{/* title + trip number + status row */}

{trip.title}

{trip.tripNumber}

{/* driver / car / branch */} {/* timing */} {/* counts + cash */} {/* notes */} {/* timestamps */}
)}
); }