// File: frontend/app/(protected)/admin/roles/page.jsx 'use client'; import { useState, useEffect } from 'react'; import { api } from '@/lib/api'; import { Button } from '@/components/ui/button'; import { Card, CardContent, CardHeader, CardTitle, CardDescription } from '@/components/ui/card'; import { Badge } from '@/components/ui/badge'; import { ShieldCheck, PlusCircle } from 'lucide-react'; // Import Dialog component ที่เราเพิ่งสร้าง import { RoleFormDialog } from '../_components/role-form-dialog'; export default function RolesPage() { const [roles, setRoles] = useState([]); const [allPermissions, setAllPermissions] = useState([]); const [loading, setLoading] = useState(true); // State สำหรับควบคุม Dialog const [isFormOpen, setIsFormOpen] = useState(false); const [selectedRole, setSelectedRole] = useState(null); const fetchData = async () => { try { setLoading(true); const [rolesRes, permsRes] = await Promise.all([ api.get('/rbac/roles'), api.get('/rbac/permissions'), ]); setRoles(rolesRes.data); setAllPermissions(permsRes.data); } catch (error) { console.error("Failed to fetch RBAC data", error); } finally { setLoading(false); } }; useEffect(() => { fetchData(); }, []); const handleCreate = () => { setSelectedRole(null); // ไม่มี Role ที่เลือก = สร้างใหม่ setIsFormOpen(true); }; const handleEdit = (role) => { setSelectedRole(role); setIsFormOpen(true); }; if (loading) return
Loading role settings...
; return ( <>

Roles & Permissions

{roles.map(role => (
{role.name} {role.description || 'No description'}

Assigned Permissions:

{role.Permissions.length > 0 ? ( role.Permissions.map(perm => ( {perm.name} )) ) : (

No permissions assigned.

)}
))}
); }