diff --git a/src/pages/roles/roles-list/RolesListPage.tsx b/src/pages/roles/roles-list/RolesListPage.tsx new file mode 100644 index 0000000..7d607ec --- /dev/null +++ b/src/pages/roles/roles-list/RolesListPage.tsx @@ -0,0 +1,193 @@ +import { useState } from "react"; +import { useNavigate } from "react-router-dom"; +import { useRoles, useDeleteRole } from "../core/_hooks"; +import { Button } from "@/components/ui/Button"; +import { LoadingSpinner } from "@/components/ui/LoadingSpinner"; +import { Role } from "@/types/auth"; +import { Trash2, Edit, Plus, Eye, Users } from "lucide-react"; +import { Modal } from "@/components/ui/Modal"; + +const RolesListPage = () => { + const navigate = useNavigate(); + const [deleteRoleId, setDeleteRoleId] = useState(null); + + const { data: roles, isLoading, error } = useRoles(); + const { mutate: deleteRole, isPending: isDeleting } = useDeleteRole(); + + const handleEdit = (roleId: number) => { + navigate(`/roles/${roleId}/edit`); + }; + + const handleView = (roleId: number) => { + navigate(`/roles/${roleId}`); + }; + + const handlePermissions = (roleId: number) => { + navigate(`/roles/${roleId}/permissions`); + }; + + const handleDelete = (roleId: number) => { + setDeleteRoleId(roleId.toString()); + }; + + const confirmDelete = () => { + if (deleteRoleId) { + deleteRole(deleteRoleId, { + onSuccess: () => { + setDeleteRoleId(null); + } + }); + } + }; + + const cancelDelete = () => { + setDeleteRoleId(null); + }; + + if (isLoading) return ; + if (error) return
خطا در بارگذاری نقش‌ها
; + + return ( +
+
+
+

+ مدیریت نقش‌ها +

+ +
+
+ +
+
+ + + + + + + + + + + + {roles?.map((role: Role) => ( + + + + + + + + ))} + +
+ نام نقش + + توضیحات + + تعداد دسترسی‌ها + + تاریخ ایجاد + + عملیات +
+
+ {role.title} +
+
+
+ {role.description} +
+
+ + {role.permissions?.length || 0} دسترسی + + + {new Date(role.created_at).toLocaleDateString('fa-IR')} + +
+ + + + +
+
+
+ + {roles?.length === 0 && ( +
+

هیچ نقشی یافت نشد

+
+ )} +
+ + {/* Delete Confirmation Modal */} + +
+

+ آیا از حذف این نقش اطمینان دارید؟ این عمل قابل بازگشت نیست. +

+
+ + +
+
+
+
+ ); +}; + +export default RolesListPage; \ No newline at end of file