import { useState } from "react"; import { useNavigate, useParams } from "react-router-dom"; import { useRole, useRolePermissions, usePermissions, useAssignPermission, useRemovePermission } from "../core/_hooks"; import { Button } from "@/components/ui/Button"; import { Permission } from "@/types/auth"; import { ArrowRight, Plus, Trash2, Check, Shield } from "lucide-react"; import { Modal } from "@/components/ui/Modal"; import { PageContainer } from "@/components/ui/Typography"; const RolePermissionsPage = () => { const navigate = useNavigate(); const { id = "" } = useParams(); const [showAssignModal, setShowAssignModal] = useState(false); const [removePermissionId, setRemovePermissionId] = useState(null); const { data: role, isLoading: roleLoading } = useRole(id); const { data: rolePermissions, isLoading: permissionsLoading } = useRolePermissions(id); const { data: allPermissions, isLoading: allPermissionsLoading } = usePermissions(); const assignedPermissionIds = (rolePermissions || []).map(p => p.id); // Access the permissions array from the object structure const safeAllPermissions = Array.isArray((allPermissions as any)?.permissions) ? (allPermissions as any).permissions : []; const availablePermissions = safeAllPermissions.filter((p: any) => !assignedPermissionIds.includes(p.id)); const { mutate: assignPermission, isPending: assigning } = useAssignPermission(); const { mutate: removePermission, isPending: removing } = useRemovePermission(); const handleAssignPermission = (permissionId: number) => { assignPermission({ roleId: id, permissionId: permissionId.toString(), }); }; const handleRemovePermission = (permissionId: number) => { setRemovePermissionId(permissionId.toString()); }; const confirmRemovePermission = () => { if (removePermissionId) { removePermission({ roleId: id, permissionId: removePermissionId, }, { onSuccess: () => { setRemovePermissionId(null); } }); } }; const cancelRemovePermission = () => { setRemovePermissionId(null); }; const isLoading = roleLoading || permissionsLoading; if (isLoading) { return (
{[...Array(2)].map((_, i) => (
{[...Array(5)].map((_, j) => (
))}
))}
); } if (!role) return
نقش یافت نشد
; return (
{/* Header */}

مدیریت دسترسی‌های نقش: {role?.title}

تخصیص و حذف دسترسی‌ها برای این نقش

{/* دسترسی‌های تخصیص یافته */}

دسترسی‌های تخصیص یافته ({(rolePermissions || []).length})

{permissionsLoading ? (
{[...Array(5)].map((_, i) => (
))}
) : (
{(rolePermissions || []).length > 0 ? ( (rolePermissions || []).map((permission: Permission) => (

{permission.title}

{permission.description}

)) ) : (

هیچ دسترسی تخصیص داده نشده است

)}
)}
{/* دسترسی‌های در دسترس */}

دسترسی‌های قابل تخصیص ({availablePermissions.length})

{allPermissionsLoading ? (
{[...Array(5)].map((_, i) => (
))}
) : (
{availablePermissions.length > 0 ? ( availablePermissions.map((permission: Permission) => (

{permission.title}

{permission.description}

)) ) : (

تمام دسترسی‌ها به این نقش تخصیص داده شده است

)}
)}
{/* Modal تأیید حذف دسترسی */} setRemovePermissionId(null)} title="حذف دسترسی" >

آیا از حذف این دسترسی از نقش اطمینان دارید؟

); }; export default RolePermissionsPage;