"use client"; import { useEffect, useState } from "react"; import { Alert, Button, Modal, Spinner } from "../UI"; import { getStoredToken } from "@/src/lib/auth"; import { userService } from "@/src/services/user.service"; import type { UserDetail } from "@/src/types/user"; interface UserDetailModalProps { userId: string; onClose: () => void; } // ── small helper components ─────────────────────────────────────────────────── // (No equivalents in the shared UI kit — DetailRow/StatusBadge/Avatar are // purpose-built layouts, not generic form/action controls, so they stay custom.) function DetailRow({ label, value }: { label: string; value?: string | null }) { return (
{label} {value || "—"}
); } // Kept custom rather than swapped for : Badge only renders a label // pill (no dot indicator), and the pulse-dot is the whole point of this status // chip's design. function StatusBadge({ active }: { active: boolean }) { return ( {active ? "نشط" : "معطل"} ); } function Avatar({ name }: { name: string }) { const initials = name.trim().split(" ").slice(0, 2).map(w => w[0]).join("").toUpperCase(); return (
{initials}
); } // ── main component ──────────────────────────────────────────────────────────── export function UserDetailModal({ userId, onClose }: UserDetailModalProps) { const [user, setUser] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); // fetch user details on mount useEffect(() => { let cancelled = false; (async () => { try { const token = getStoredToken(); const data = await userService.getById(userId, token); if (!cancelled) setUser(data); } catch { if (!cancelled) setError("تعذّر تحميل بيانات المستخدم. يرجى المحاولة لاحقاً."); } finally { if (!cancelled) setLoading(false); } })(); return () => { cancelled = true; }; }, [userId]); // ── helpers ─────────────────────────────────────────────────────────────── const fmt = (iso?: string | null) => iso ? new Date(iso).toLocaleDateString("ar-SA", { year: "numeric", month: "long", day: "numeric" }) : null; // ── render ──────────────────────────────────────────────────────────────── return ( إغلاق } > {/* loading */} {loading && (
جارٍ التحميل…
)} {/* error */} {!loading && error && } {/* content */} {!loading && user && (
{/* avatar + name + status row */}

{user.name}

{user.userName && (

@{user.userName}

)}
{/* detail rows */} {user.passwordChangedAt && ( )}
)}
); }