import { useState } from 'react'; import { Plus, Search, Filter } from 'lucide-react'; import { Table } from '../components/ui/Table'; import { Button } from '../components/ui/Button'; import { Modal } from '../components/ui/Modal'; import { Pagination } from '../components/ui/Pagination'; import { UserForm } from '../components/forms/UserForm'; import { PermissionWrapper } from '../components/common/PermissionWrapper'; import { TableColumn } from '../types'; import { UserFormData } from '../utils/validationSchemas'; import { formatDate } from '../utils/formatters'; import { useUsers, useCreateUser, useUpdateUser, useDeleteUser } from '../hooks/useUsers'; import { useFilters } from '../stores/useAppStore'; const Users = () => { const [showUserModal, setShowUserModal] = useState(false); const [editingUser, setEditingUser] = useState(null); const [currentPage, setCurrentPage] = useState(1); const itemsPerPage = 5; const { filters, setFilters } = useFilters(); const queryParams = { page: currentPage, limit: itemsPerPage, search: filters.search, sortBy: 'createdAt', sortOrder: 'desc' as const, }; const { data: usersResponse, isLoading, error } = useUsers(queryParams); const createUserMutation = useCreateUser(); const updateUserMutation = useUpdateUser(); const deleteUserMutation = useDeleteUser(); const users = usersResponse?.data || []; const totalItems = usersResponse?.total || 0; const totalPages = Math.ceil(totalItems / itemsPerPage); const columns: TableColumn[] = [ { key: 'name', label: 'نام', sortable: true }, { key: 'email', label: 'ایمیل', sortable: true }, { key: 'phone', label: 'تلفن' }, { key: 'role', label: 'نقش' }, { key: 'status', label: 'وضعیت', render: (value) => ( {value === 'active' ? 'فعال' : 'غیرفعال'} ) }, { key: 'createdAt', label: 'تاریخ عضویت', sortable: true, render: (value) => formatDate(value) }, { key: 'actions', label: 'عملیات', render: (_, row) => (
) } ]; const handleAddUser = () => { setEditingUser(null); setShowUserModal(true); }; const handleEditUser = (user: any) => { setEditingUser(user); setShowUserModal(true); }; const handleDeleteUser = async (userId: string) => { if (confirm('آیا از حذف این کاربر اطمینان دارید؟')) { try { await deleteUserMutation.mutateAsync(userId); } catch (error) { console.error('Delete error:', error); } } }; const handleSubmitUser = async (data: UserFormData) => { try { if (editingUser) { await updateUserMutation.mutateAsync({ id: editingUser.id, data: { name: data.name, email: data.email, phone: data.phone, role: data.role, } }); } else { await createUserMutation.mutateAsync({ name: data.name, email: data.email, phone: data.phone, role: data.role, password: data.password || '123456', }); } setShowUserModal(false); } catch (error) { console.error('Submit error:', error); } }; const handleCloseModal = () => { setShowUserModal(false); setEditingUser(null); }; const handleSearchChange = (value: string) => { setFilters({ search: value }); setCurrentPage(1); }; if (error) { return (

خطا در بارگذاری کاربران: {error.message}

); } return (

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

{totalItems} کاربر یافت شد

handleSearchChange(e.target.value)} className="input pr-10 max-w-md" />
{isLoading ? (
) : ( <>
)} ); }; export default Users;