"use client"; import { FormEvent, useCallback, useEffect, useState } from "react"; import { getStoredToken } from "@/lib/auth"; import { identityApi, type AdminUser } from "@/lib/identity"; import { normalizePhone } from "@/lib/phone"; import { AdminPageHeader, Banner, Button, EmptyState, Modal, StatusBadge, TextField, } from "@/components/admin/controls"; export default function AdminUsersPage() { const [users, setUsers] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(""); const [modalOpen, setModalOpen] = useState(false); const load = useCallback(async () => { const token = getStoredToken(); if (!token) { setError("توکن یافت نشد."); setLoading(false); return; } setLoading(true); setError(""); try { const rows = await identityApi.listUsers(token, { limit: 100 }); setUsers(rows); } catch (e) { setError(e instanceof Error ? e.message : "خطا در بارگذاری کاربران"); } finally { setLoading(false); } }, []); useEffect(() => { void load(); }, [load]); return (
setModalOpen(true)}>کاربر جدید} /> {error && {error}}
{loading ? ( ) : users.length === 0 ? ( ) : (
{users.map((u) => ( ))}
نام نام کاربری موبایل ایمیل وضعیت
{u.display_name || u.username || "بدون نام"} {u.username || "—"} {u.mobile || "—"} {u.email}
)}
setModalOpen(false)} onCreated={() => { setModalOpen(false); void load(); }} />
); } function CreateUserModal({ open, onClose, onCreated, }: { open: boolean; onClose: () => void; onCreated: () => void; }) { const [displayName, setDisplayName] = useState(""); const [username, setUsername] = useState(""); const [email, setEmail] = useState(""); const [mobile, setMobile] = useState(""); const [password, setPassword] = useState(""); const [saving, setSaving] = useState(false); const [error, setError] = useState(""); const handleSubmit = async (e: FormEvent) => { e.preventDefault(); setError(""); const token = getStoredToken(); if (!token) { setError("توکن یافت نشد."); return; } if (password.length < 8) { setError("رمز عبور باید حداقل ۸ کاراکتر باشد."); return; } setSaving(true); try { await identityApi.createUser(token, { email: email.trim(), username: username.trim(), password, mobile: normalizePhone(mobile), display_name: displayName.trim() || undefined, }); setDisplayName(""); setUsername(""); setEmail(""); setMobile(""); setPassword(""); onCreated(); } catch (err) { setError(err instanceof Error ? err.message : "ایجاد کاربر ناموفق بود"); } finally { setSaving(false); } }; return (
{error && {error}}
); }