import { useState, useEffect, useCallback } from 'react'; import { Users as UsersIcon, CheckCircle, Search, Edit3, Check, X } from 'lucide-react'; import api from '../services/api'; import Skeleton from '../components/ui/Skeleton'; import Spinner from '../components/ui/Spinner'; import Pagination from '../components/ui/Pagination'; export interface UserRecord { [x: string]: string; id: string; firstName?: string; lastName?: string; mobile?: string; email?: string; role?: string; createdAt?: string; } export default function Users() { const [users, setUsers] = useState([]); const [isLoading, setIsLoading] = useState(true); // Queries const [page, setPage] = useState(1); const [search, setSearch] = useState(''); const [role, setRole] = useState(''); const [totalPages, setTotalPages] = useState(1); // Edit State const [editingId, setEditingId] = useState(null); const [editRole, setEditRole] = useState(''); const [isSaving, setIsSaving] = useState(false); const fetchUsers = useCallback(async () => { try { setIsLoading(true); const params = new URLSearchParams(); params.append('page', page.toString()); if (search) params.append('search', search); if (role) params.append('role', role); const response = await api.get(`/admin/users?${params.toString()}`); if (response.data?.success) { setUsers(response.data.data); setTotalPages(response.data.meta?.lastPage || 1); } } catch (err) { console.error('Failed to fetch users', err); } finally { setIsLoading(false); } }, [page, search, role]); useEffect(() => { const delayDebounceFn = setTimeout(() => { fetchUsers(); }, 500); return () => clearTimeout(delayDebounceFn); }, [fetchUsers]); const handleEditClick = (user: UserRecord) => { setEditingId(user.id); setEditRole(user.role || 'User_PetOwner'); }; const handleSaveEdit = async (id: string) => { try { setIsSaving(true); await api.put(`/admin/users/${id}/role`, { role: editRole }); setEditingId(null); fetchUsers(); } catch (err) { console.error('Failed to update user role', err); } finally { setIsSaving(false); } }; return (

مدیریت کاربران

مشاهده و تایید حساب‌های کاربری و کلینیک‌ها

{ setSearch(e.target.value); setPage(1); }} />
{isLoading ? ( Array.from({ length: 4 }).map((_, i) => ( )) ) : ( users.map((user) => { const isEditing = editingId === user.id; return ( ); }) )}
نام کاربر / کلینیک ایمیل نوع حساب تاریخ عضویت وضعیت عملیات
{user.firstName} {user.lastName} {user.email} {isEditing ? ( ) : ( {user.role === 'User_Wholesale' ? 'خریدار عمده' : user.role?.includes('B2B') ? 'همکار (B2B)' : (user.role === 'ADMIN' ? 'مدیر سیستم' : 'مشتری عادی')} )} {new Date(user.createdAt).toLocaleDateString('fa-IR')} {user.status === 'active' ? ( تایید شده ) : (
در انتظار تایید
)}
{isEditing ? (
) : (
)}
); }